Go Down

Topic: 2 Schieberegister 74HC595 Anschließen (Read 5825 times) previous topic - next topic

uwefed

#15
Jul 24, 2012, 04:15 pm Last Edit: Jul 24, 2012, 09:18 pm by uwefed Reason: 1
Code: [Select]
for (int thisLed = 0; thisLed < 16; thisLed++) {    
   registerWrite(thisLed, HIGH);                 // schaltet 1 LED an
   if (thisLed > 0) {
     registerWrite(thisLed - 1, LOW);           // schaltet alle LED aus
   }    
   else {
     registerWrite(15, LOW);                       // schaltet alle LED aus
   }
   delay(250);
 }

und die Funktion:
Code: [Select]

void registerWrite(int whichPin, int whichState) {  
 unsigned int bitsToSend = 0;                                    // alle led aus (alle Bit auf LOW)
 digitalWrite(latchPin, LOW);
 bitWrite(bitsToSend, whichPin, whichState);              // setzt das entsprechende LED; hat aber nur Sinn wenn HIGH da alle Bit sowiso LOW sind
 byte registerOne = highByte(bitsToSend);                 // sendet die Daten
 byte registerTwo = lowByte(bitsToSend);  
 shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
 shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
 digitalWrite(latchPin, HIGH);
}

Die Funktion registerWrite setzt ein Byte auf H. Anders als man es vermutet werden alle anderen Byte auf LOW gesetzt. Also wird eine LED angeschaltet und dann gleich wieder gelöscht. Nach 250mS wiederholt es sich.
Abhilfe: die Variable bitsToSend muß aus der Funktion registerWrite heraus und global definiert werden.
also:

Code: [Select]
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 12;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 11;

unsigned int bitsToSend = 0;  

char inputString[2];

void setup() {
...
und
Code: [Select]
void registerWrite(int whichPin, int whichState) {  
 // unsigned int bitsToSend = 0;      
 digitalWrite(latchPin, LOW);
...

Grüße Uwe

uwefed

Hab eine Email an den Support geschrieben und das Problem erklährt.
Grüße Uwe

donalbe

Einfach superklasse. Du hast es ziemlich gut drauf!! ;-)
Gruß Andy

uwefed


Go Up