Ganz genau so, nur daß du die LED verkehrt rum eingezeichnet hast. Die Daten gehen an alle IC und mit einem Latch-Enable HIGH-LOW sagst du dem jeweiligen IC, daß die Daten für ihn sind.
Nur um sicher zu gehen: Du verwendest die Ausgänge Analog1-8 nur als Digitalausgänge und weil sie gerade frei waren. Du solltest nicht hoffen, daß du dadurch die Leds dimmen könntest.
Ein kleines Detail, das dein Programm sehr vereinfachen wird: Nimm Ports Analog0-7 oder Analog8-15, nicht Analog1-8. In den ersten Fällen werden nämlich alle Leitungen von einem Register gesteuert (PORTF für Analog 0-7 oder PORTK für Analog 8-15). Damit kannst du alle Daten für ein Latch so rausschieben: /*
rausdamit (latchport, daten)
Dieses Funktiönchen schreibt alle Daten in einen 74HC573,
der am ArduinoMega an den Ports Analog0-7 hängt.
latchport: die Leitung mit dem LE des richtigen Chips
daten: D0-D7 als Byte.
*/
inline void rausdamit(uint8_t latchport, uint8_t daten) {
// Daten auf den Bus legen
PORTF = daten;
// Mit der LE-Leitung wedeln
digitalWrite (latchport, HIGH);
digitalWrite (latchport, LOW);
}
// Anwendungsbeispiel
void setup(){
// Alle Datenpins auf Ausgang schalten.
for (uint8_t pin = A0; pin <= A7; pin++) {
pinMode (pin, OUTPUT);
}
// LatchEnable pin ebenfalls
pinMode (A12, OUTPUT);
}
void loop (){
rausdamit (A12, 0b10100011);
delay(1000);
rausdamit (A12, 0b01011100);
delay(2000);
}
Der Code ist wie immer ungetestet.
Wenn du jetzt mehrere Latches hast, kannst du dir zwei Arrays machen, eines mit den Daten und eines mit den passenden Pinnummern der LatchEnable und deinen gesamten Würfel mit einer Schleife updaten. Du mußt dann nur mehr dazwischen die Daten im Datenarray anpassen. Das Programm wird dadurch nicht viel komplizierter als mein kleines Beispiel. Wenn du damit Probleme hast, einfach melden, dann kann ich mehr dazu schreiben.
Korman