shiftOut schiebt nur ein Bit ins Schieberegister

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

Hast Du Datapin und Clockpin vertauscht?

Sehr geehrter uwefed,

vielen Dank dass Du mich darauf aufmerksam machst. Scheinbar waren der latchPin und der clockPin vertauscht. Und ich suche die ganze Zeit nach dem Fehler in meinem Hauptprogramm... :grin: Darf ich fragen woher du das so schnell wusstest?

Bei vertauschen Clok und Data hast Du bei der Zahl 255 1 Clock-Impuls (weil ja alle Bits 1 sind) hätest Du eine andere Zahl gewählt ( zB 204 in binär 11001100) hättest Du 2 Bit bekommen.
Wenn Du Cklock und Latch vertauscht hast Du 1 Clock Impuls und darum 1 hinenigeschobenes Bit.
Grüße Uwe

Hi,

stimmt ich setze ja die Clock so einmal HIGH, darum also nur ein Bit. Das leuchtet mir ein. :slight_smile: Vielen Dank nochmal.

Gruesse
Winterwurst