Was ist der beste Weg, um eine 4-stellige 7-Segment-LED an Atmega168 anzuschließen

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.

Ich habe Ihren Header und die Signatur (gemäß dieser Richtlinie ) entfernt und die Formatierung auf „888“.\nJemand...“ korrigiert [gr]avatar, unten rechts in Ihren Beiträgen. Aber gute Frage!

Antworten (4)

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.

Das verringert jedoch die Intensität, da Sie nur eine Einschaltdauer von 25 % für jedes einzelne Display haben.
Dies wird behoben, indem mehr Strom durch die Anzeigen geleitet wird, indem Segmentwiderstände mit niedrigerem Wert verwendet werden. Aufgrund des niedrigen Tastverhältnisses sind hohe Ströme möglich, wodurch die Helligkeit so weit wie nötig erhöht wird, ohne Energie zu verschwenden.
Ich denke, das ist es, was ich jetzt mache, Multiplexing. Ich habe die Segmente A – G auf den Pins 11 – 19 (Überspringen von 13). Und Ziffer 1 - 4 auf den Pins 7 - 10. Dies funktioniert gut, mit Ausnahme des Helligkeitsproblems. Die 8888 sollte heller oder die 1 dunkler sein, vorzugsweise erstere, damit sie schön hell ist. Danke aber für das Feedback.
Hast du Widerstände für die Segmente?
@ Leon Heller. Ich hatte 60 Ohm Widerstände, aber ersetzte sie durch 3 Ohm, um zu versuchen, die Helligkeit zu erhöhen. Es machte alles ein wenig heller, aber die 1 ist immer noch zu heiß. Benötige ich einen LED-Treiber oder könnte ich mit einem billigeren Teil wie einem 74HC595-Schieberegister oder einem I2C-I/O-Expander davonkommen?
3R ist viel zu niedrig und verursacht die Helligkeitsvariation.
Danke León. Mein Board läuft mit 3V3 und die LEDs sind mit 2V1 spezifiziert. Bedeutet dies, dass ich 120-Ohm-Widerstände für jedes der Segmente (7) und Ziffern (4) haben sollte? Oder nur die Segmente ODER Ziffern?
Angenommen, Sie schalten die Ziffern nacheinander zum Multiplexen ein, benötigen Sie die 120-Ohm-Widerstände an den Segmenten. Der Wert wäre richtig, da nur 100mA für alle Pins an einem Port erlaubt sind, siehe Anmerkungen zu 28.2. DC-Kennlinien im Datenblatt. Du überschreitest die Grenzen bei weitem.
Mit 3 Ohm = 400mA bei 1,2V überschreitet man die absolute Grenze von 40mA pro Portpin bei weitem, der ATmega168 könnte Schaden nehmen.
@starblue, ich glaube nicht, dass der Mega beschädigt wird, der Strom wird nur auf 40 mA begrenzt.
@vicatcu: Falsch. AVR IO-Ports sind nicht strombegrenzt, wie fast jeder Mikrocontroller. Eine zu starke Erhöhung des Stroms führt zu einer internen Erwärmung des Chips, was schließlich zum Ausfall führt.

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.

TSOP-Gehäuse ist nicht einfach von Hand zu löten! Der MAX7221 existiert im DIL-Paket.
@Federico - naja, wer Platz sparen will, muss leiden! :-). Das MAX6950-Paket ist nur 5 x 5 mm groß! Übrigens, wenn Sie den 7221 wegen besserer Lötbarkeit wollen, können Sie immer noch das SOIC-Paket wählen.

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.