SN74HC595N Parece que se leen mal los bits

0

Un prenote; No estoy seguro de si esto cae más en la electrónica o en Arduino, pero creo que los registros de cambios están más relacionados con la electrónica y los binarios.

Estoy usando un solo SN74HC595N registro conectado a mi Arduino Uno. Estoy usando la función shiftOut de Arduino, pero cuando envío un byte, por ejemplo, 11111111 , solo Output1 y Output7 están activos. También probé algunos diferentes, como 01010101 y aún así, la salida no se parecía en nada a lo que esperaría (Excepto 00000000 que hizo lo que esperaba y apagó todos los LED). Aquí hay un gráfico de las conexiones al Arduino:

~ las clavijas de salida están conectadas a LED de 3 mm a través de resistencias; Todo está cableado directamente, pero VCC se demodula con dos 0.1uF y un capacitor de 10uF, que se conecta a GND para filtrar las frecuencias altas y suavizar la entrada

Y mi código simple:

int latchPin = 12;
int clockPin = 11;
int dataPin = 13;


void setup(){
    pinMode(latchPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    pinMode(clockPin, OUTPUT);

    digitalWrite(latchPin, LOW);
    digitalWrite(clockPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1111111);
    digitalWrite(latchPin, HIGH);
    digitalWrite(clockPin, HIGH);

}

void loop(){

}

Soy nuevo en los registros de cambio (y no estoy familiarizado con los bytes), por lo que me disculpo por cualquier incompetencia, ¡y gracias por la ayuda!

EDITAR: Ahora, cuando envío 11111111, recibo los pines 0, 1, 2, 3 y 7 para encender. Confirmé esto con mi multímetro, los pines activos leen 4,85 voltios, mientras que los pines desactivados leen 0 voltios.

    
pregunta Carter F

2 respuestas

2

Debe proporcionar un byte (uint8_t) para que los datos se desplacen. Su 11111111 se interpreta como un decimal decimal, por lo que está obteniendo parte de eso. Yo esperaría que el número 11111111 = 0xA98AC7 salga como 0xC7, que no coincide exactamente con lo que está viendo, así que quizás haya algo más en eso.

Pruebe shiftOut (dataPin, clockPin, LSBFIRST, 0xFF); para todos en adelante

Si prefiere binario a hexadecimal, debería poder usar 0b11111111 .. ese formato binario es compatible con GCC y por lo tanto con Ardunio.

    
respondido por el Spehro Pefhany
0

Debe asegurarse de que la secuencia de transiciones siga el diagrama de tiempo para SN74HC595N shift registro:

Enestemomentonoestoysegurodequédiagramadetiempoestágeneradoporsucódigo.

Laotrapreocupaciónpotencialpodríasersucableadofísico(quenoreveló).losdesajustesdelaimpedanciadelcablepuedenproduciruntimbrequepuedecausar"doble sincronización" y cambios falsos con datos incorrectos.

Un poco de consejo: use la ortografía exacta de los nombres de las señales en su código por las hojas de datos de IC, de modo que será fácil seguir las transiciones con los diagramas de tiempo de la hoja de datos y no buscar nombres de señales mentales en dos tablas de consulta.

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas