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 STROBE
y CLOCK
las entradas como lo hice anteriormente.
Estoy usando el siguiente programa, sin embargo, no importa qué valor tenga shiftOut
en 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.
¿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?
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
shiftOut
y 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);
}
Gerben
QSn
) de un registro de desplazamiento a la entrada de datos (D
) del siguiente registro de desplazamientoGerben
edcs
CLOCK
está encendidoD0
,DATA
está encendidoD1
ySTROBE
está encendidoD2
; gracias por señalarlo también. Actualicé mis constantes en consecuencia, ahora, cuando ejecuto el programa, todas mis salidas 4094 permanecen altas.Gerben