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ß!