Ich arbeite an einem Gerät mit einem 4-stelligen 7-Segment-Zähler und frage mich, wie ich alle LEDs am besten ansteuern kann. Im Moment habe ich eine benutzerdefinierte Platine, die sie alle von einem Atmega168 antreibt und die meisten E / A-Pins verwendet. Das Problem ist, dass einige Zahlen heller erscheinen als andere. Beispielsweise ist eine „1“ heller als eine „8888“.
Jemand schlug vor, einen LED-Treiber wie den TLC5940 zu verwenden.
Ist das notwendig? Da es sich um ein tragbares Gerät handelt, versuche ich, die Größe und Leistung auf ein Minimum zu beschränken.
Der aktuelle Prototyp funktioniert gut, aber ich möchte sicherstellen, dass die Ziffern gleich hell und so hell wie möglich sind, um die Sichtbarkeit zu erhöhen.
Sie können die Anzahl der Pins, die Sie auf dem AVR verwenden, reduzieren, indem Sie die Anzeigen multiplexen. Verbinden Sie alle Segmente miteinander und verbinden Sie sie über Widerstände mit sieben Ausgangspins und verbinden Sie die vier gemeinsamen Kathoden mit weiteren vier Ausgangspins. Dies sollte Ihnen eine gleichmäßige Helligkeit geben. Die Software wird komplexer, aber es ist eine viel bessere Lösung.
Da das menschliche Auge auf Spitzenhelligkeit reagiert, kann Multiplexing mehr Helligkeit liefern, als dies bei nicht gemultiplexten Displays möglich ist, und verbraucht weniger Strom, insbesondere wenn das Tastverhältnis reduziert wird.
Sie müssen natürlich sicherstellen, dass die Stromgrenzen der AVR-Pins nicht überschritten werden. Treibergeräte werden benötigt, wenn höhere Ströme als die 25-mA-Grenze für die AVR-Pins erforderlich sind. Ich verwende sie auf einer Leiterplatte, die ich für eine ähnliche Anwendung entworfen habe.
Sie brauchen keinen LED -Treiber, aber es hat seine Vorteile. Sie sparen viel an I/O Ihres Mikrocontrollers, Sie brauchen nur ein paar Leitungen für die serielle Schnittstelle (SPI oder I2C). Es kann auch Platz auf der Platine sparen, da Sie nicht viele diskrete Komponenten für das Multiplexing benötigen.
Mir persönlich gefällt das Maxim MAX6950/51 für fünf bzw. acht 7-Segment Ziffern. Es kommt in einem kleinen 16-Pin-Gehäuse. Es verfügt über eine digitale Helligkeitssteuerung und einen Hexadezimal-zu-7-Segment-Decoder. Schnittstellen zu Ihrem uC mit 3 Leitungen.
Sie sagen, dass dies ein tragbares Gerät ist. Es ist möglich, dass die Helligkeitsprobleme, die Sie sehen, nichts mit den beteiligten Chips zu tun haben, sondern auf den Innenwiderstand der Batterie zurückzuführen sind, insbesondere wenn Sie Knopfzellen verwenden. Das heißt, wenn Sie versuchen, alle LEDs (in einem Segment) gleichzeitig einzuschalten, stoßen Sie an die Grenze, wie viel Strom die Batterie liefern kann, unabhängig von den Treibern des Mikrocontrollers.
Ein praktikabler Ansatz besteht darin, eine Kette von vier 8-Bit-Schieberegistern (z. B. 74HC595) zu verwenden, um alle Segmente anzusteuern, und für jedes Segment den gleichen Strombegrenzungswiderstand zu verwenden (wichtig - jedes Segment erhält seinen eigenen Widerstand).
Verschieben Sie dann einfach das entsprechende 32-Bit-Muster vom AVR für den Wert, den Sie darzustellen versuchen. Dadurch werden die Leistungsanforderungen des LCD von den Stromquellenbeschränkungen des AVR-Pins entkoppelt. Es reduziert auch Ihre AVR-Pin-Nutzung auf drei Pins (Daten, Uhr, Latch).
In Bezug auf die Softwarekomplexität benötigen Sie lediglich eine Tabelle, um Ziffernwerte Bitmustern zuzuordnen. Wenn Sie die Verdrahtung zwischen den Ziffern konsistent halten, ist dies nur eine Nachschlagetabelle mit 10 Einträgen (wenn Sie nur einfache alte Basis-10-Zahlen anzeigen). Das Schieberegister-Kommunikationsprotokoll könnte nicht viel einfacher sein – öffnen Sie den Latch, takten Sie die Datenbits ein, schließen Sie den Latch, und sie sind in der Lage, zuverlässig mit Geschwindigkeiten zu arbeiten, die weitaus höher sind, als Sie mit AVRs erreichen können, also können Sie einfach wackeln die Drähte so schnell wie möglich in der Software. Wenn Sie die Leistung reduzieren möchten, können Sie möglicherweise PWM erreichen, indem Sie 0x0000 auch während des Ausschaltzyklus einschalten und Timer-Interrupts verwenden, um beispielsweise die Arbeitszykluskonsistenz sicherzustellen.
Letztendlich sind diese Dinge billig und werden in DIP-Paketen geliefert, wenn Ihnen das wichtig ist.
Kevin Vermeer