Hier ganze Code zum Probieren. Ich greife auf ein paar Funktionen der Arduinoentwicklungsumgebung zurück. Das soll die Verständnis erleichtern. Jeder, der mit Arduino anfängt, kennt die Funktionen pinMode oder digitalWrite.
Später wird der geneigte User dazu übergehen, die Ports und Pins direkt anzusprechen. Der Code ist dann für Anfänger nicht mehr lesbar, dafür braucht das Programm weniger Platz auf dem Arduino.
Der Sketch kann auch mit der Arduinosoftware für einen ATtiny85 kompiliert und übertragen werden. Lediglich die Pinnummern, an denen das Shiftregister angeschlossen wird, müssen geändert werden. Bei meiner Konfiguration braucht der Sketch 968 Byte auf dem ATtiny85 und 1168 Byte auf dem Arduino Nano.
// Multiplex // PINs am PCB Board Leiste 1 (LED 4x4 Feld) // GND // (leer) // 11 SH Shift // 12 ST Store // 13 DS Date // (leer) // VCC //Pin verbunden mit dem ST_CP vom 74HC595 const int latchPin = 12; //Pin verbunden mit dem SH_CP vom 74HC595 const int clockPin = 11; //Pin verbunden mit dem DS vom 74HC595 const int dataPin = 13; byte zeichen[][4] = { {0b0110, 0b1001, 0b1111, 0b1001}, // A {0b1111, 0b1000, 0b1000, 0b1111}, // C {0b1110, 0b1001, 0b1001, 0b1110}, // D {0b1111, 0b1000, 0b1100, 0b1000}, // F {0b1001, 0b1111, 0b1001, 0b1001}, // H {0b0010, 0b0010, 0b0010, 0b0010}, // I {0b1000, 0b1000, 0b1001, 0b1111}, // L {0b1001, 0b1101, 0b1011, 0b1001}, // N {0b0110, 0b1001, 0b1001, 0b0110}, // O {0b1111, 0b0100, 0b0100, 0b0100}, // T {0b1001, 0b1001, 0b1001, 0b0110}, // U {0b1111, 0b0010, 0b0100, 0b1111}, // Z {0b0011, 0b0101, 0b1001, 0b0001}, // 1 {0b1010, 0b1111, 0b0010, 0b0010}, // 4 {0b1111, 0b0001, 0b0011, 0b0001}, // 7 {0b0010, 0b0101, 0b0101, 0b0010}, // 0 {0b0000, 0b0000, 0b0000, 0b0000}, // Leerzeichen {0b1001, 0b0000, 0b1001, 0b0110} // Smilie }; byte zeichenanzahl = strlen(zeichen);; byte ausgabe; byte counter; void Ausgabe(byte wert) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, wert); digitalWrite(latchPin, HIGH); } void setup() { // Pins für den 595 setzen pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { for (byte bild = 0; bild < zeichenanzahl; bild++) { for (int i = 0; i < 50; i++) { for (byte zeile = 0; zeile < 4; zeile++) { if ( zeile == 0 ) counter = B1000; ausgabe = zeichen[bild][zeile]; for (byte led = 0; led <; 4; led++) { byte pin; if ( led == 0 ) pin = B0001; Ausgabe(counter << 4 | (ausgabe & pin)); delay(1); pin = pin << 1; } counter = counter >> 1; } } } }
Hier ist das Ergebnis. Die LED auf dem Video flackern etwas, nur wegen der Aufnahme. Im Original leuchten alle gleichmäßig.
Sollte bei Nachbauten auf einem Breadboard die Buchstaben spiegelverkehrt sein oder auf dem Kopf stehen, so hast Du eine andere Anordnung der Zeilen oder Spalten an die Outputregister des Shiftregisters anders als ich gesetzt. Das ist nicht so tragisch, es zeigt zumindest, dass der Aufbau korrekt funktioniert. Entweder Du schreibst die Software um oder oder steckst die Verbinder auf dem Breadboard neu.
Im dritten Teil kommt nun eine Laufschrift dazu.