Hi
Ich hab grad mal das shiftOut sketch für 2 Schieberegister modifiziert, um zu schauen ob das mit 9 Schieberegistern, seriell beschrieben, von der Verarbeitungszeit her funktioniert.
Habe 2 Schieberegister angeschlossen, die restlichen weggelassen, der ardu "beschreibt" die nicht vorhandenen trotzdem^^
Hier der Code, ich hoffe er is nich falsch (nur zum testen):
const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
char inputString[2];
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop()
{
for (int thisLed = 0; thisLed < 72; thisLed++)
{
registerWrite(thisLed, HIGH);
}
}
// This method sends bits to the shift registers:
void registerWrite(int whichPin, int whichState) {
// the bits you want to send. Use an unsigned int,
// so you can use all 16 bits:
unsigned int bitsToSend = 0;
// turn off the output so the pins don't light up
// while you're shifting bits:
digitalWrite(latchPin, LOW);
// turn on the next highest bit in bitsToSend:
bitWrite(bitsToSend, whichPin, whichState);
// break the bits into two bytes, one for
// the first register and one for the second:
byte registerOne = highByte(bitsToSend);
byte registerTwo = highByte(bitsToSend);
byte registerTre = highByte(bitsToSend);
byte registerFor = highByte(bitsToSend);
byte registerFiv = highByte(bitsToSend);
byte registerSix = highByte(bitsToSend);
byte registerSev = highByte(bitsToSend);
byte registerAig = highByte(bitsToSend);
byte registerNin = highByte(bitsToSend);
// shift the bytes out:
shiftOut(dataPin, clockPin, MSBFIRST, registerNin);
shiftOut(dataPin, clockPin, MSBFIRST, registerAig);
shiftOut(dataPin, clockPin, MSBFIRST, registerSev);
shiftOut(dataPin, clockPin, MSBFIRST, registerSix);
shiftOut(dataPin, clockPin, MSBFIRST, registerFiv);
shiftOut(dataPin, clockPin, MSBFIRST, registerFor);
shiftOut(dataPin, clockPin, MSBFIRST, registerTre);
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
// turn on the output so the LEDs can light up:
digitalWrite(latchPin, HIGH);
}
Das Ergebnis: Viel zu langsam! Eine LED, die ich angeschlossen habe, und nach jedem Beschreiben aufleuchtet, blinkt geschätzt 10 mal die Sekunde.
Und das is ja noch nicht viel was da im sketch ist. Es sollen ja noch Animationen usw kommen, evtl auch ein 2x16 char Display und ein SD-Kartenslot.
Wie ich mit dem SPI einzelne Bytes, oder halt Bits in ein Schieberegister scheiben kann, weiß ich leider immernoch nicht. Stehe wieder auf dem Schlauch. Und wird das dann ausreichend schnell genug sein?
Hier gehts ja auch. Nur der hat da noch nen ganzen batzen weitere Elektronik, so wie das aussieht.
Ich wollts ja einfach mit 9 Schieberegistern, 8 Transistoren und 8 8-bit LED-Treiber-Arrays (und natürlich widerständen) machen.
Schonmal danke im Vorraus.
MFG, Robdeflop®