Ansteuerung 7Segment per Schieberegister

Hallo zusammen,

ich versuche zurzeit ein kleines Projekt zu realisieren, bei dem ich u.a. auch eine 7 Segmentanzeige (DB: http://www.toplightusa.com/product/pdf/A-3191AH.pdf) über ein Schieberegister (74HC595) ansteuern möchte. Der Aufbau für die Ansteuerung der 7-Segmentanzeige sieht zurzeit so aus:

Die mit R_x bezeichneten Widerstände sind 1 kOhm Widerstände.
Da ich ein Problem mit der Ansteuerung habe, habe mich zudem mit einem Beispielprogramm aus dem Internet von Makerblog.at bedient (siehe Code):

// Arduino-Pin verbunden mit SH_CP des 74HC595
int shiftPin = 5;
// Arduino-Pin verbunden mit ST_CP des 74HC595
int storePin = 6;
// Arduino-Pin verbunden mit DS des 74HC595
int dataPin = 7;
 
// Dieses Muster soll ausgegeben werden
int muster[8] = {1,1,1,1,1,1,1,1};
 
void setup() {
 
 pinMode(storePin, OUTPUT);
 pinMode(shiftPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
 
 // storePin sicherheitshalber auf LOW
 digitalWrite(storePin, LOW); 
 
 for (int i=0; i<8; i++) {
 // Zuerst immer alle 3 Pins auf LOW
 // Aktion passiert bei Wechsel von LOW auf HIGH
 digitalWrite(shiftPin, LOW);
 // Jetzt den Wert der aktuellen Stelle ans Datenpin DS anlegen 
 digitalWrite(dataPin, muster[i]);
 // Dann ShiftPin SHCP von LOW auf HIGH, damit wird der Wert
 // am Datenpin ins Register geschoben. 
 digitalWrite(shiftPin, HIGH);
 }
 
 // Wenn alle 8 Stellen im Register sind, jetzt das StorePin STCP
 // von LOW auf HIGH, damit wird Registerinhalt an Ausgabepins
 // kopiert und der Zustand an den LEDs sichtbar
 
 digitalWrite(storePin, HIGH);
}
 
void loop () {
 // Hier passiert nichts.
}

Zum Testen habe ich alle Segmente angesteuert, sodass die 8 zu sehen ist. Dies funktioniert auch einwandfrei.
Kommen wir nun zu meinem ersten Problem. Ich bin leider noch nicht so fit darin, Datenblätter korrekt zu lesen bzw. zu deuten. Aus dem Datenblatt (siehe oben) 2. Seite und die dort abgedruckte zweite Tabelle habe ich entnommen, dass die Spannung ~1,85V betragen sollte und der Strom in etwa 20 mA für den Betrieb der 7 Segmentanzeige betragen sollte. In dem Datenblatt befindet sich auf Seite 2 jedoch auch eine Tabelle „Maximum Ratings“ dort sind 5V und 30 mA pro Segment als Maximum angegeben. Wo ist der Unterschied in den beiden Tabellen und welche Werte muss ich nun einhalten?
Für das zweite Problem muss ich die Schaltung (vgl. Bild 1) sowie meine dazugehörigen Messwerte etwas genauer erläutern.
Ich habe aus Interesse zunächst den Strom gemessen, der zum Schieberegister fließt:

Mein Multimeter zeigt hier einen Wert von ~93 mA an. Da dies für den Arduino deutlich zuviel ist, habe ich sofort einen 1 kOhm-Widerstand eingebaut, um den Stromfluss zu begrenzen:

Als Ergebnis habe ich anschließend nur noch einen Strom von 1,5 mA gemessen (komisch ist für mich an dieser Stelle gewesen, dass trotz der Stromabnahme die 7 Segmentanzeige nicht dunkler wurde).
Ich habe dann also angefangen den Strom zu messen, der über GND zurück zum Arduino fließt, hier zeigt mir mein Multimeter nun (trotz des 1 kOhm-Widerstandes) ein Wert von ~60 mA an.

Dies hat mich verwirrt, da ich mir nicht erklären kann, woher der deutlich höhere Strom kommt. Als ich ausversehen mein zweites Multimeter abgeklemmt habe, hatte ich folgendes Bild:

So habe ich ohne VCC-Verbindung dennoch die 60 mA am GND anliegen und die 7 Segmentanzeige leuchtet trotzdem mit voller Kraft. Erst als ich die Verbindung des Shift-, Clock- und Data-Pins zum Ardunio getrennt habe, ging die 7 Segmentanzeige aus.

Irgendwie kann ich mir das Ganze nicht so recht erklären. Seht Ihr hier evtl. Fehler, oder die Abhängigkeiten?
Neben den zuvor geschilderten Merkwürdigkeiten, hat es mich ebenso gewundert, dass der Einfluss der R_x Widerstände von 1 kOhm auf 330 Ohm keinen merkbaren Effekt in der Leuchtkraft ausgelöst haben.
Falls Ihr noch mehr Informationen benötigt, versuche ich diese natürlich nachzuliefern, damit man dem Problem auf die Schliche kommt.

Ich hoffe mein Problem konnte ich enigermaßen verständlichen schildern.

Vielen Dank!

Gruß!

In so einem IC sind Schutzdioden verbaut, die aber auch dazu führen können, daß unerwartete Ströme fließen können. Vermutlich versorgen die Ausgänge des µC das IC mit Energie. Das ist ein zerstörerischer Zustand!

Der Widerstand in der Versorgungsspannung ist daher eine ganz schlechte Idee! Die LEDs sollten von einem eigenen Netzteil versorgt werden.

In Datenblättern wird zwischen den maximal zulässigen Werten und den typischen Werten unterschieden. Werden die maximalen überschritten, gibts Zerstörung. Die maximalen gelten häufig auch nur unter bestimmten Rahmenbedingungen.

Normalerweise sind für Dich die typischen Werte maßgebend.

Warum eigenes Netzteil?

Der Arduino bringt doch locker die paar mA am 5V Pin, wenn er nicht gerade mit 12V oder mehr versorgt wird. Der Widerstand in der Versorgungsleitung muss auf alle Fälle raus

Hallo,

vielen Dank für die Antworten bisher.
Darf ich nochmal Fragen, warum der Widerstand eine schlechte Idee ist?
Ich begrenze damit doch den Stromfluss, oder welchen negativen Effekt handel ich mir damit ein?

//Zudem die 90 mA wären doch ebenfalls ein zerstörerischer Zustand, oder? Kann ich das irgendwie begrenzen, dass ich ohne externe Spannungsversorgungen einen sauberen Aufbau bekomme?
Gruß!

ElEspanol:
Warum eigenes Netzteil?

Da der TO schrieb: "Da dies für den Arduino deutlich zuviel ist ..." war ich gedanklich bei einem vierstelligen Display aus einem anderen Thema. Wobei ich bei Testaufbauten eine eigene Spannung für das Brotbrett bevorzuge, während der Arduino an USB hängt, da ich den heißen Linearregler des Arduino nicht schätze. Das ist dann so eine Sicherheitsgeschmackssache.

Ich stimme Dir also vollumfänglich zu :slight_smile:

theev:
Darf ich nochmal Fragen, warum der Widerstand eine schlechte Idee ist?
Ich begrenze damit doch den Stromfluss, oder welchen negativen Effekt handel ich mir damit ein?

Anstelle der erforderlichen 5V am IC hast Du dann nur 3,5V am Versorgungspin. An den Eingängen des IC liegen aber weiter 5V an. Damit verläßt Du die Spezifikation des IC, da die Versorgungsspannung (mit Toleranzen) immer größer oder gleich wie die anderen Spannungen sein muß. Wenn das IC noch funktioniert, hast Du Glück.

Hallo,

danke für die Antwort.
IC =integrated circuit und somit das Schieberegister?
Dann wäre der Widerstand auf der GND-Seite besser aufgehoben um den Stromfluss zu begrenzen, richtig?
Weil auf Dauer wären die 90 bzw. 60 mA für den Arduinio bestimmt auch nicht gut, sodass ich irgendwas unternehmen muss, um den Stromfluss zu verringern.

Kann ich sonst etwas tun um meine Schaltung zu verbesseren? Mit meinen beschriebenen Phänomenen, dass ich quasi ohne VCC-Verbindung trotzdem brennende LEDs habe, bin ich mir irgendwie unsicher, ob das alles so in Ordnung ist.

Gruß!

Du kannst die R_x grösser als 1k machen. Aber niemals in Gnd oder Vcc Widerstände rein, wenn du nicht genau weißt, was du tust.
Und sogar wenn du meinst, genau zu wissen, mach es lieber doch nicht

Wie versorgst du das ganze momentan?

Hallo,

ich habe nun die R_x von 1kOhm auf 4,7 kOhm erhöt.

Ich messe nun zwischen VCC und IC 125 mA und zwischen dem Ausgang der 7Segment-Anzeige und GND ebenfalls 125 mA - wie kann das sein? Spannung zwischen VCC und GND sind die 5V des Arduinos.

Wenn ich die VCC Verbinung trenne, dann leuchtet die 7 Segmentanzeige trotzdem weiterhin und der Strom zwischen COM der 7 Segment-Anzeige und GND beträgt ~ 60 mA.

Momentan wird alles durch den Arduino gespeist der an meinem PC-USB hängt.

Gruß!

theev:
Weil auf Dauer wären die 90 bzw. 60 mA für den Arduinio bestimmt auch nicht gut, sodass ich irgendwas unternehmen muss, um den Stromfluss zu verringern.

Du bist vollkommen auf dem Holzweg!

Es gilt der Energieerhaltungssatz, nachdem Energie umgewandelt werden kann, aber nicht verschwindet oder unversehens auftaucht. Die LEDs benötigen zum Leuchten Energie. Diese Energie, also Strom und Spannung, kommen vom IC (=Schieberegister), das IC bezieht diese vom Arduino und zwar überwiegend über VCC und GND. Es macht keinen Sinn, den Enegiebedarf verkleinern zu wollen.

Widerstände in GND- und VCC-Leitungen sind tabu!

Wenn Du die notwendige Enegie nicht vom Arduino zur Verfügung stellen lassen möchtest, kannst Du sie von einer anderen Quelle, einem Netzteil beziehen. Also 5V-Netzteil mit GND von Arduino und vom IC sowie mit VCC vom IC verbinden. VCC nicht mit dem Arduino verbinden! Dann fließt die Energie für die LEDs vom Netzteil und der Arduino muß nur sich selbst versorgen und eine Kleinigkeit für die Ausgänge.

Hallo,

vielen Dank.
Ich habe immer nur im Kopf, dass der Arduino maximal 50 mA pro Ausgang liefern kann bzw. sollte.
Da liege ich mit den gemessenen Werten deutlich drüber, sodass ich Angst habe, dass ich dem Arduino schade.

Zudem wundert es mich, wenn ich die Verbindung VCC trenne, dass die 7 Segmentanzeige trotzdem leuchtet.

Danke für die Hilfestellung soweit!

theev:
Ich habe immer nur im Kopf, dass der Arduino maximal 50 mA pro Ausgang liefern kann bzw. sollte.

Dein Kopf spielt Dir einen Streich. Die 5V kannst Du höher belasten, USB kann 500mA, abzüglich ca. 100mA für den Arduino bleiben maximale 400mA übrig. Würde ich nicht ausreizen, aber 100mA sind weitgenug weg.

Was Du meinst sind die digitalen Ausgänge, die ich nicht über 20mA belasten würde. Das IC ist da aber mit unter 1mA (geschätzt) deutlich drunter.

Meine Angaben sind über den dicken Daumen gepeilt, das Datenblatt gibt die genauen Werte an.

Hallo,

so habe ich das noch gar nicht gesehen.
Danke für den Hinweis :slight_smile:
Wieder was gelernt, was eigentlich doch recht offensichtlicht ist.

Dankeschön.

Gruß!

Hallo,

eine Frage hätte ich noch.
Ist es korrekt, dass wenn ich die Verbindung zu VCC kappe, die Anzeige trotzdem noch leuchtet?

Gruß!

Mir ist nicht klar, was Du mit "korrekt" meinst.

io.png

Wenn Du VCC nicht anschließt, fließt der Strom vom Eingang über die obere Diode nach VCC und von da weiter über die Ausgänge zu den LEDs. (Quelle: Datenblatt 8 BIT SHIFT REGISTER WITH OUTPUT LATCHES (3 STATE) von SGS-THOMSON, April 1993)

Hallo,

ich meine folgende Situation:

Ich habe das Kabel zu VCC abgezogen, das Amperemeter springt von ~100 mA dann in der GND-Verbindung auf ~60 mA, obowhl ich eigl. keine VCC Verbindung habe.

Zudem ändert sich der Stromfluss nicht, wenn ich die R_x Widerstände alle entferne - es bleibt bei den 60 mA - das verwirrt mich zusätzlich.

Gruß!

theev:
Ist es korrekt, dass wenn ich die Verbindung zu VCC kappe, die Anzeige trotzdem noch leuchtet?

Es ist 'korrekt' in dem Sinne, dass das technisch erklärbar ist, und in so einer Situation immer so sein wird.
Es ist nicht 'korrekt' in Sinn eines normalen Betriebsmodus der Bausteine. Wie hier schon öfter erwähnt, darfst Du die IC's nicht ohne Betriebsspannung betreiben, auch keine Widerstände in die Vcc-Leitung legen. Die 60mA, die Du da misst, müssen jetzt die Digitalausgänge des Uno aufbringen.
Einerseits schreibst Du, dass Du Angst hast dem Uno zu schaden. Aber deine Experimente schaden eher als dass sie nutzen.

MicroBahner:
Aber deine Experimente schaden eher als dass sie nutzen.

Das kann ich nur unterstreichen!

MicroBahner:
Es ist nicht 'korrekt' in Sinn eines normalen Betriebsmodus der Bausteine.

Das ist nicht nur meilenweit entfernt vom normalen Betriebsmodus sondern (meist) explizit verboten. Dadurch kannst Du den Baustein und den Arduino kaputtmachen weil der Betriebsstrom über den Ausgang fleißt und dieser diesen Strom nicht verträgt.

Fast immer ist es verboten (Laut Datenblatt des Herstellers) eine höhere Spannung an den Eingängen anzulegen als die Betriebsspannung. Auch darfst Du keine niedrigere Spannung anlegen als an Masse bzw die negative Versorgungsspannung.
Es gibt Außnahmen, die dann explizit im Datenblatt vermerkt sind. Ohne genaues Nachlesen gilt keine höhre Spannung als Versorgungspannung !! Wenn Du die Versorgungsspannung kappst dann ist die Versorgungsspannung 0V !! Es darf dann keine Spannung an den Signalleitungen anliegen.

Du hast Glück daß Arduino ziemlich gutmütig gegenüber solchen Fehlern ist und das Schieberegister scheints auch. Hättest Du zB ein WS2812 wäre jetzt der Daten-Eingang kaputt.

Grüße Uwe

Hallo,

die "Experimente" sind meistens ungewollt und ergeben sich eher zufällig. Bei dem gekappten Verbindungen zum VCC ist meine Messspitze des Multimeters leider verrutscht - da habe ich mich dann gewundert, warum die Anzeige trotzdem weiterleuchtet.
Nach meinem Verständnis wird der Strom für die Anzeige über VCC des IC zur Verfügung gestellt, sodass ich ohne VCC auch eigl. keine Effekte hätte sehen dürfen.
Als es dennoch weiter geleuchtet hat, habe ich ich als Konsequenz dann den Strom gemessen, der über die digitalen Pins fließt, auch hier konnte ich nichts erhöhtes feststellen. Nachdem ich dann alle 3 Signalleitungen gekappt hatte war es auch mit dem Leuchten vorbei.

Ich bin leider, wie man merkt, in der ganzen Thematik sodass ich einfach viel ausprobieren muss. Wenn was kaputt geht, dann muss ich es nächstes mal anders machen. Ich will damit nicht sagen, dass ich es darauf anlege etwas kaputt zu machen, aber wenn es aus Unwissenheit passiert, dann finde ich es halb so schlimm.

Ich danke Euch für die Hilfestellung, ich konnte wieder einige Sachen mitnehmen.
Gruß!

Moin,
von mir für Dich zum Mitnehmen:
Ebay - Suchbegriff 'arduino 7 segment'
und
MAX7219

Gruss
Kurti