CD4094BE Arduino problemas

Estoy tratando de construir un circuito que use tres 4094 para darme suficientes salidas para controlar varios LED. En el pasado, construí algunos circuitos similares usando el mismo código y esquema, pero por alguna razón, esta vez tengo problemas para controlar los registros de desplazamiento.

El primer 4094 está conectado a mi Arduino UNO usando las siguientes salidas:

CD4094_CLOCK  - Digital 2
CD4094_DATA   - Digital 3
CD4094_STROBE - Digital 4

En aras de las pruebas, conecté los 4094 OE a +5 V, pero en realidad estarán en un pin PWM. También conecté todos los 4094 STROBEy CLOCKlas entradas como lo hice anteriormente.

Estoy usando el siguiente programa, sin embargo, no importa qué valor tenga shiftOuten el 4094, la mayoría de las salidas permanecen altas:

// CD4094 Constants
#define CD4094_CLOCK    2
#define CD4094_DATA     3
#define CD4094_STROBE   4
//#define CD4094_OE     3

char Display1 = 0, Display2 = 0, Display3 = 0;

void setup() {
    pinMode(CD4094_CLOCK, OUTPUT);
    pinMode(CD4094_STROBE, OUTPUT);
    pinMode(CD4094_DATA, OUTPUT);
    //pinMode(CD4094_OE, OUTPUT);
}

void loop() {
    Display1 = 63;
    Display2 = 6;
    Display3 = 91;

    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display3);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display2);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display1);

    digitalWrite(CD4094_STROBE, HIGH);
    digitalWrite(CD4094_STROBE, LOW);

    delay(3000);

    Display1 = 0;
    Display2 = 0;
    Display3 = 0;

    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display3);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display2);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display1);

    digitalWrite(CD4094_STROBE, HIGH);
    digitalWrite(CD4094_STROBE, LOW);

    delay(3000);
}

Aquí hay una foto de mi protoboard también, en caso de que pueda ayudar a alguien.

Tablero de circuitos

¿Alguien tiene alguna sugerencia sobre cómo puedo depurar este tipo de problema? Las únicas herramientas que tengo son mi multímetro y placas Arduino. ¿Hay algún tipo de problema con mi código?

No ha conectado la salida de datos ( QSn) de un registro de desplazamiento a la entrada de datos ( D) del siguiente registro de desplazamiento
También parece que el pin 2 está conectado a la entrada de datos, mientras que el código dice que debería ser el pin 3.
Olvidé las conexiones QS - ¡gracias! He movido las salidas para el primer 4094 ahora, CLOCKestá encendido D0, DATAestá encendido D1y STROBEestá encendido D2; gracias por señalarlo también. Actualicé mis constantes en consecuencia, ahora, cuando ejecuto el programa, todas mis salidas 4094 permanecen altas.
¿Podría actualizar su pregunta con estos nuevos datos y una nueva imagen? No puedo seguir lo que has cambiado. Además, intente evitar D0 y D1, ya que se usan para serial/UART, y creo que tienen pull-ups en la placa Uno.

Respuestas (2)

La señal estroboscópica se configura como salida pero nunca se inicializa tan alta. El código que proporcionaste simplemente lo eleva por un momento y luego lo mantiene bajo durante la transmisión. Si entiendo la hoja de datos correctamente, la luz estroboscópica debe mantenerse alta durante la transmisión de datos

¡Gracias por resolver el problema! Cambié mi código para que la luz estroboscópica sea alta shiftOuty obtenga los resultados esperados :)
// CD4094 Constants
#define CD4094_CLOCK    18
#define CD4094_DATA     19
#define CD4094_STROBE   17
#define CD4094_OE     16

char Display1 = 1, Display2 = 2, Display3 = 3;

void setup() {
    pinMode(CD4094_CLOCK, OUTPUT);
    pinMode(CD4094_STROBE, OUTPUT);
    pinMode(CD4094_DATA, OUTPUT);
    //pinMode(CD4094_OE, OUTPUT);
}

void loop() {
    Display1 = 63, 6, 91, 79, 102, 109, 125, 7, 127, 111;
    Display2 = 63, 6, 91, 79, 102, 109, 125, 7, 127, 111;
    Display3 = 63, 6, 91, 79, 102, 109, 125, 7, 127, 111;

    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display3);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display2);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display1);

    digitalWrite(CD4094_STROBE, HIGH);
    digitalWrite(CD4094_STROBE, LOW);

    delay(3000);
    Display1 = 0;
    Display2 = 0;
    Display3 = 0;

    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display3);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display2);
    shiftOut(CD4094_DATA, CD4094_CLOCK, MSBFIRST, Display1);

   digitalWrite(CD4094_STROBE, HIGH);
   digitalWrite(CD4094_STROBE, LOW);
   delay(30);
}