Hey friends,

I have a two daisy chained shift registers (74AHC595) which are controlled via an ESP32. I want to set one output to high at a time before switching to the next.

The code seems to work, but the outputs O_9 and O_10 are not staying high (zoom) after setting them, whereas all the other ones are working fine. This is the used code snipped:

pinMode(SHIFT_OUT_DATA, OUTPUT);
pinMode(SHIFT_OUT_CLK, OUTPUT);
pinMode(SHIFT_OUT_N_EN, OUTPUT);
pinMode(SHIFT_OUT_LATCH, OUTPUT);

digitalWrite(SHIFT_OUT_N_EN, LOW);

uint16_t input_bin = 0b1000000000000000;

for(int i=0; i<17; i++){

    byte upper_byte = input_bin >> 8;
    byte lower_byte = input_bin & 0x00FF;

    digitalWrite(SHIFT_OUT_LATCH, LOW);
    shiftDataOut(SHIFT_OUT_DATA, SHIFT_OUT_CLK, MSBFIRST, lower_byte);
    shiftDataOut(SHIFT_OUT_DATA, SHIFT_OUT_CLK, MSBFIRST, upper_byte);
    usleep(10);
    digitalWrite(SHIFT_OUT_LATCH, HIGH);

    delay(10)
    input_bin = input_bin>>1;
} 

Is there anything I’m doing wrong, or any idea on where the problem may lie? I’ve already tried looking for shorts and other error sources, but the design was manufactured on a PCB and no assembly issues are noticeable.

  • @mvirts
    link
    English
    11 year ago

    I think you got and and or switched, first two lines should be fine for shifting the top 8 bits down.

      • @[email protected]
        link
        fedilink
        English
        2
        edit-2
        1 year ago

        I think what he refers to is that you seem to do a bitwise or for the second line instead of the bitwise and.

        • @mvirts
          link
          English
          11 year ago

          Yes that’s what I was thinking

        • @[email protected]
          link
          fedilink
          English
          1
          edit-2
          1 year ago

          2nd line of what? Oh you are completely right. My bad. Idk why I wrote that. I’ll fix my comment.