Warum gibt es eine Verzögerung bei einer 7-Segment-Anzeige mit gemeinsamer Anode?

Ich habe eine 4-stellige 7-Segment-Anzeige mit gemeinsamer Anode. Ich habe jede Segmentkathode mit einem 330-Ohm-Widerstand verbunden, und der Widerstand ist mit einem Schieberegister verbunden. Jede Segmentkathode ist mit demselben Schieberegister verbunden. Jede gemeinsame Anode ist mit einem zweiten Schieberegister verbunden. Im Moment verwende ich ein Arduino, um die Anzeige zu multiplexen, um eine Zahl anzuzeigen.

Das funktioniert super, aber es gibt ein Problem. Das Display ist nicht hell genug! Ich gehe davon aus, dass dies eine gemeinsame Anodenkonfiguration ist und dass das Schieberegister nur etwa 40 mA Strom für 8 Segmente (AG und Dezimalpunkt) liefern kann.

Ich habe entschieden, dass ich mehr Kraft brauche. Mein erster Gedanke war, zu versuchen, 4 PNP-Transistoren zu verwenden . Ich schließe sie richtig an und die Segmente werden heller. Großartig! Es gibt jedoch ein Problem. Es scheint, als würde der Transistor etwas verlangsamen! Es gibt ein böses Leuchten von Segmenten, die von anderen Ziffern verwendet werden! Ich habe den Mikroprozessor so eingestellt, dass er jedes Segment 4 Millisekunden lang anzeigt. Das Datenblatt behauptet, dass der Transistor schneller ein- und ausschalten sollte. Warum tritt dieses schwache Leuchten auf?

So sieht es aus, wenn 1111 angezeigt wird:

Geben Sie hier die Bildbeschreibung ein

So sieht es aus, wenn 1112 angezeigt wird:

Geben Sie hier die Bildbeschreibung ein

Wir brauchen wirklich eine schematische Darstellung dessen, was Sie tun, um Ihnen effizient zu helfen. Können wir einen Schaltplan bekommen? Es könnte sehr einfach zu lösen sein.
Könnte sehr gut auch ein Softwareproblem sein, daher sind Codeschnipsel darüber, wie Sie Ausgangsleitungen (Timing) ansteuern, auch eine gute Ergänzung.
Ich denke, der Code ist der wahrscheinlichste Verdächtige - ich vermute, dass das Problem "immer da" war, nur durch die höhere Ansteuerung der Transistoren sichtbarer gemacht. Bitte posten Sie den relevanten Code und einen Schaltplan.
74HC595 hat eine Verzögerung zwischen Schieberegistern und Ausgangsregistern.

Antworten (5)

Hier ist ein möglicher Mechanismus für den Fehler. Sie sagen, es funktioniert (schwammig) ohne die Transistoren, aber nicht mit ihnen. Also scheint der Fehler bei den Transistoren zu liegen. Gibt es einen Grund, warum die Transistoren möglicherweise etwas Strom durchlassen, wenn sie dies nicht sollten?

Ja. Du verwendest einen PNP-Transistor. Wie Sie wissen, sind diese Transistoren eingeschaltet, wenn die Basisspannung niedriger als die Emitterspannung ist. Sie sind ausgeschaltet, wenn die Basisspannung größer oder gleich der Emitterspannung ist.

Das Problem mit dem Schieberegisterchip ist, dass die Ausgänge immer kleiner als die Emitterspannung sind. Ich konnte die Teilenummer des von Ihnen verwendeten Chips nicht ganz erkennen, aber laut Datenblatt für den 74HC595 (Seite 6) erreichen die Ausgänge nicht ganz Vcc. Wenn es eine winzige Spannungsdifferenz gibt, könnten Sie feststellen, dass eine kleine Menge Strom aus der Basis des PNP-Transistors austritt. Bei einer Verstärkung von etwa 100 könnten Sie feststellen, dass genügend CE-Strom vorhanden ist, um eine merkliche Lichtleistung auf den LEDs zu erzielen.

Etwas zu versuchen: Fügen Sie eine Schottky-Diode zwischen Vcc und dem Emitter hinzu. Dies sollte die Kollektorspannung um einen Bruchteil eines Volts senken, gerade genug, damit das Schieberegister den Transistor vollständig ausschalten kann.

Ohhh, ich habe gerade herausgefunden, dass ich meinen Code nicht geändert habe. Ich wusste nicht, dass der Transistor einschaltet, wenn die Basisspannung 0 V beträgt. Ich schaltete im Grunde 3-stellige Transistoren ein, während ich einen ausschaltete. Es war nur ein Code-Fix. Scheitern meinerseits.
@ blake305 - Ah! Ich wollte sogar genau das vorschlagen, habe es aber vergessen. Gut gemacht.
@blake305: Gibt es einen Grund, warum Sie diese Antwort akzeptiert haben? Bei allem Respekt vor Rocketmagnet, aber es weist nicht auf die Lösung hin. Keine der Antworten tut es.
@FedericoRusso - Das habe ich mich auch gefragt. Meine Vermutung war, dass diese Antwort auf die Transistoren hinwies, und dies war der Hinweis, der ihn zum eigentlichen Problem führte.
@blake305 - Wenn Sie die Lösung gefunden haben, können Sie sie als Antwort posten, die Sie in ein paar Tagen akzeptieren können. Kann für andere nützlich sein. Mach dir keine Sorgen um Rocketmagnet, er wird eine weitere großartige Antwort auf eine andere Frage posten, wo er die Akzeptanz bekommen kann, die er hier verlieren würde ;-)

Stimmen Sie dieser Antwort nicht zu! Blake hat die Lösung selbst gefunden, scheint sie aber nicht als Antwort zu posten. Ich poste nur als weise Lektion für zukünftige Generationen.

Indem er die gemeinsamen Anoden direkt ansteuerte, machte er jeweils einen Ausgang hoch und die Ausgänge für die nicht ausgewählten Anzeigen niedrig. Aber das Hinzufügen der PNP-Transistoren kehrt die Logik um, und dann möchten Sie, dass der ausgewählte Anzeigeausgang niedrig und die anderen hoch sind.

Was passiert also, wenn Sie vergessen, die Anodentreiber zu invertieren? Angenommen, Sie möchten "1234" anzeigen. Sie machen die Anode der ersten Ziffer hoch, die anderen niedrig und geben das Bitmuster für eine "1" aus. Anstatt dass die erste Ziffer die „1“ zeigt, bleibt sie leer, und die anderen zeigen die „1“. Gehen Sie zur nächsten Ziffer. Auch hier bleibt diese Ziffer leer und die anderen drei zeigen die "2" an. Usw. Aufgrund des Multiplexing zeigt jede Ziffer eine Mischung aus den anderen drei Ziffern, aber nicht den tatsächlichen Wert für diese Ziffer.

Geben Sie hier die Bildbeschreibung ein

Blake sagt, das sollte "1112" sein. Die ersten drei Ziffern zeigen die Mischung aus "1" und "2", während die letzte nur die "1" zeigt, weil alle anderen Ziffern so sind.

Rocketmagnet ist möglicherweise auf dem richtigen Weg: Die PNPs können aufgrund von Leckagen durch ihre Treiber einen gewissen Basisstrom haben. Wenn die Stromversorgung von PNP (die Emitterspannung der Transistoren) mit der der HCMOS-Treiber (HC595?) identisch ist, sollte dies kein Problem darstellen, da die HCMOS-Ausgänge normalerweise innerhalb von etwa 100 mV von den Schienen bleiben.

Wenn die Versorgung der PNPs höher ist, sollten Sie sie nicht mit einem Gegentaktausgang, sondern mit Open Drain/Open Collector ansteuern. In diesem Fall wird der Leckstrom des Transistors im ausgeschalteten Zustand durch die Basis des PNP fließen und somit verstärkt. Ein 2N2907 hat keinen sehr hohen hFE, kann jedoch dazu führen, dass genügend Kollektorstrom als leicht nach oben leuchtende LEDs angezeigt wird.

Die Abhilfe ist einfach: Fügen Sie einen Widerstand zwischen Basis und Emitter der PNPs hinzu. Solange der Leckstrom einen Spannungsabfall von weniger als 0,6 V über dem Widerstand verursacht, fließt alles durch den Widerstand und nichts durch die Basis. Wählen Sie zum Beispiel einen 4,7-kΩ-Widerstand. Dann benötigen Sie mindestens 130 µA, um den ersten Strom durch die Basis zu bekommen, bis dahin fließt alles durch den Widerstand. 130 µA sind ein sicherer Wert: Sie sind viel größer als der erwartete Leckstrom, aber viel kleiner als das, was der Treiber versenken kann.

Wenn der 4,7-kOhm-Widerstand ein Pull-up von der Basis zum Emitter ist, muss sein Wert dann nicht von der Versorgungsspannung (Emitterspannung) des PNP abhängen?
@m.Alin - Nein. Der Emitter liegt bei Vcc, sagen wir +5 V. Die Basis ist 600 mV niedriger, bei 4,4 V. Dann benötigt der Widerstand 130 μ A, um die 600 mV zu erreichen, und zu diesem Zeitpunkt beginnt der Transistor zu leiten. Wenn Vcc +10 V wäre, dann ist die Basis immer noch 600 mV niedriger, bei 9,4 V. Die erforderliche Spannung über dem Widerstand bleibt gleich. (Vielleicht verwechseln Sie das mit einem NPN. Das PNP ist ein Spiegelbild des NPN. Für das NPN fließt also Strom vom Kollektor zum Emitter (Masse), für das PNP vom Emitter (+Vcc) zum Kollektor.)
Ich kenne die Unterschiede zwischen den NPNs und den PNPs. Vielleicht verwirrt mich der Leckstrom. Was ist der Weg des Leckstroms?
@m.Alin - Vcc -> PNP-Emitter -> PNP-Basis -> Basiswiderstand (ich hoffe, er hat diesen nicht vergessen) -> Treiberausgang (NMOS-Drain) -> Masse.

Dies ist ein sehr häufiges Problem, wenn Sie neu im Multiplexing sind. Multiplexing bedeutet, eine LED-Anzeige nach der anderen anzusteuern. Dieses Problem tritt auf, wenn noch Daten am Ausgangsport vorhanden sind und Sie eine andere Anzeige aktivieren. TUN Sie dies - Legen Sie Daten auf den Displayport - Schalten Sie ein beliebiges Display ein - Legen Sie alle Daten ab - Schalten Sie das Display aus - Sehr kleine Verzögerung - ...... Wiederholen Sie diesen Schritt ... Ihr Problem wird gelöst.

Nehmen wir einen maximalen Spitzenstrom von 20 mA pro Segment an. Die Low- und High-Side-Treiber werden jeweils ~ 0,5 V abfallen, das Display selbst wird ~ 1,5 V abfallen. Daher fällt der Widerstand um 2,5, also muss er für 20 mA 125 Ohm betragen. 120 Ohm reichen.

Ein herkömmliches Schieberegister wird mit 20 mA kein Problem haben, aber 8 x 20 mA (alle Segmente einer Ziffer eingeschaltet) sind wahrscheinlich zu viel. Wenn Sie 4 Ausgänge übrig haben, können Sie PNP-Transistoren (1k Basiswiderstand) verwenden. Andernfalls befestigen Sie die Transistoren an Ihrem zweiten Schieberegister.

Sie müssen sich darüber im Klaren sein, dass Sie Zeitmultiplexing durchführen: Sie müssen die Einschaltzeit gleichmäßig auf die 4 Ziffern aufteilen, und die Einschaltzeit muss viel größer sein als die Zeit, die zum Umschalten zwischen den Ziffern erforderlich ist. Dies würde eine niedrige Schaltfrequenz erfordern, aber Sie möchten das Schalten auch nicht sehen, daher könnten ~ 100 Hz (2,5 ms für jede Ziffer) ein guter Kompromiss sein.

Ihre Bilder zeigen Geisterbilder: Eine unerwünschte Ziffer erscheint (schwammig) über der Ziffer, die sichtbar sein sollte. Dies wird wahrscheinlich durch zu frühes Umschalten der Zeilen oder Spalten verursacht. Wenn Sie nicht alles in einem Schritt schalten können (beachten Sie, dass Sie dies mit einem kaskadierten Schieberegister mit separatem Halteregister tun können!), müssen Sie dies tun

  • alle Ziffern deaktivieren
  • aktivieren Sie die Segmente für die nächste Ziffer
  • aktivieren Sie die nächste Ziffer

Wenn Sie den ersten Schritt weglassen, erhalten Sie den Ghosting-Effekt.

Das hätte ich auch gedacht, aber der Effekt ist extrem . Sieht nicht nach etwas aus, das Sie lösen können, indem Sie die vorherige Anzeige ein paar Mikrosekunden früher ausschalten.
Das hängt davon ab, wie er seinen Code strukturiert hat. Eine meiner PIC-Assembler-Aufgaben war früher genau dieses Multiplexing, und ich habe es gesehen.
Auch dass die Geisterbilder zweistellig weiter erscheinen ?
Ich bin auch ein wenig verwirrt, würde gerne den Code / Schaltplan dafür sehen.
Aus den Bildern kann ich nicht erkennen, welche SRs verwendet werden. Ich hoffe, sie haben Ausgangsregister ...