Registro de desplazamiento desplazado

Acabo de intentar por primera vez obtener un registro de desplazamiento para trabajar con mi Arduino... fue casi impecable, pero parece que me falta mi primer bit.

Seguí la guía aquí, pero usando solo un registro de desplazamiento: http://arduino.cc/en/Tutorial/ShiftOut

Me tomó un poco de tiempo darme cuenta, pero parece que el pin Q1 en mi registro de desplazamiento se ilumina cuando envío el número 2, Q2 es alto para 4, Q3 = 8, etc. cuando llamo shiftout() con el número 1 no se enciende ningún LED.

Revisé mi cableado y parece estar bien... luego verifiqué dos veces y definitivamente está bien.

Las únicas cosas en las que puedo pensar son: 1. Mi registro de desplazamiento es ligeramente diferente al que están usando... es un 595N, no un 595. 2. Hice algo mal en el código...

En bucle():

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 1);
  digitalWrite(latchPin, HIGH);

¿Alguien tiene algún consejo para depurar este problema?

Saludos, Juan

También me hizo preguntarme qué es Q0 en el pin 15.
Q0 es la salida de orden más bajo: es muy común (aunque no universal) que estos se numeren desde cero en lugar de desde uno. Esto bien puede explicar por qué está obteniendo un resultado diferente al esperado. De lo contrario, es posible que tenga demasiados o pocos relojes. Si hubiera escrito la función de cambio usted mismo, también sería posible que estuviera presentando los datos en el momento incorrecto en relación con el reloj, pero la rutina de la biblioteca probablemente esté bien.
Tras una inspección más detallada del tutorial de Arduino, mi mente se saltó por completo el hecho de que estaban usando Q0: el diseño de pines en los diagramas de circuito es ligeramente diferente de la hoja de datos de phillips. Esto hace que todo tenga sentido :)

Respuestas (2)

El registro de desplazamiento se está comportando exactamente como se diseñó.

El segundo bit significativo desde el más bajo debe encenderse para un valor de 2. Eso es Q1.

Para verificar un valor de "1", debe buscar el bit de salida menos significativo, que es Q0.

Además, el 595 y el 595N no son funcionalmente diferentes.

Gracias por confirmar eso :) ¡Me gustan los registros de turnos!
@JohnHunt Sí, son geniales... ¡Aún más geniales son los registros de desplazamiento de alta corriente como TPIC6A596 , que en realidad pueden absorber 350 mA por bit y pueden usarse para controlar directamente relés, solenoides y cadenas de LED completas!

No soy bueno con el código, pero ¿tal vez está tratando de bloquear los datos en la salida antes de que se registren correctamente en el registro de desplazamiento interno? Esto podría resultar en que el bit de datos registrado previamente en el registro de desplazamiento aparezca en la salida. Esto podría darte lo que ves. Tal vez necesite un pequeño retraso después del comando shiftOut. ¿O tal vez estoy siendo estúpido?