Hallo,
ich habe ein 595 Schieberegister seriell in parallel out, welches ich mit einem Arduino UNO verwende. Laut der reference auf Arduino.cc shiftOut() - Arduino Reference sollte shiftOut ein Byte, also 8 Bit nacheinander in das Register hineinschieben, welches ich dann mit einer steigenden Flanke am latchPin parallel am Ausgang des Registers ausgeben kann. Bei mir ist dies nicht der Fall. shiftOut schiebt mir wann immer ich die Funktion aufrufe nur 1 Bit (das LSB) ins Register.
Mein Code (minus Deklarationen):
void loop() {
int value = 255;
digitalWrite(latchPin, LOW);
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, value);
digitalWrite(latchPin, HIGH);
// pause before next value:
delay(10000);
}
Hier z.B. schiebe ich int 255 also byte 11111111 in das Register. An den Ausgängen messe ich im ersten Durchlauf HIGH aber nur an Ausgang 1. Dann 10 Sekunden später im zweiten Durchlauf messe ich HIGH an Ausgang 1 und 2, usw. Es sollten aber sofort nach dem ersten Durchlauf schon an allen Ausgängen ein HIGH anliegen, oder? In der reference wird value ja als Byte-Wert angegeben.
Genau so wie in dem obigen Beispiel sieht es für mich mit allen ungeraden Zahlen aus, also 1, 3, 5, ... 255. Bei allen geraden Zahlenwerten, deren LSB = 0 ist, sind und bleiben alle Ausgangspins 0.
Verstehe ich hierbei etwas falsch? In allen Beispielen die ich online finden konnte werden Byte oder int Variablen im Zusammenhang mit shiftOut verwendet.
Vielen Dank
Winterwurst