Tengo un proyecto que utiliza 10x 74HC595 registros de cambio para controlar una serie de electroimanes (80x imanes en total), conmutados con transistores. Mi situación actual es que cuando jalo el pin de reinicio del '595 LOW y HIGH otra vez, y luego el reloj del latch-pin, las salidas de todos los' 595s cambian a LOW, como se esperaba. Sin embargo, tan pronto como empiezo a registrar los bits, uno de los pines de salida del 595 también es milagrosamente ALTO, después de lo cual también cambia un bit ALTO como lo haría normalmente. La única diferencia es que debería cambiar solo los ceros hasta que el bit ALTO alcance ese registro de desplazamiento y se desplace a través de ese IC en particular. Por alguna razón y por algún medio, ese 595 en particular recibe un bit ALTO en su registro y lo desplaza. He comprobado el pin de entrada en serie justo antes de cambiar, y ciertamente no hay ningún bit ALTO que se haya cambiado desde el '595 anterior. Así que no tengo idea de dónde viene ese bit ALTO en particular.
Se adjunta un fragmento del esquema de cómo se conecta el '595. Las salidas están conectadas a las puertas del transistor NMOS para controlar los electroimanes. A continuación se muestra un fragmento del código que controla los '595s:
void main(void)
{
int i;
/* Reset the shift register contents and latch new contents */
shiftReg_reset = LOW;
delayus(1);
shiftReg_reset = HIGH; //LOW-to-HIGH transition
delayus(1);
shiftReg_latch = HIGH; //Move new outputs (all zeroes) to latches
delayus(1);
shiftReg_latch = LOW; //HIGH-to-LOW transition
delayus(1);
shiftReg_out_en = LOW; /* Output enables '595s (active-LOW) */
shiftReg_reset = HIGH; /* Pull reset pins HIGH (active-LOW) */
for (i = 0[![enter image description here][1]][1]; i < 80; i++)
{
/* Set data pin */
shiftReg_data = HIGH;
delayus(1);
/* shift bit */
shiftReg_clock = HIGH;
delayus(1);
shiftReg_clock = LOW;
/* load '595 contents to output latches */
delayus(1);
shiftReg_latch = HIGH;
delayus(1);
shiftReg_latch = LOW;
delayms(250);
} /* for */
} /* main() */'
No tengo idea de qué está causando este comportamiento. Como puede ver en el código, las salidas de los registros de desplazamiento son todos ceros inicialmente, pero una vez que se desplaza el segundo bit, parece que el mismo bit se desplaza de otro '595 en la secuencia, dando la idea de que hay dos conjuntos de los registros de desplazamiento que se interconectan con los que se obtienen los mismos datos, en lugar de hacerlo en cascada.
Todavía no he conectado ninguno de los electroimanes al circuito. Para cada transistor / electroimán, también he puesto un LED para indicar el estado de la salida del registro de desplazamiento. Estoy viendo el fenómeno descrito en los LED, por lo que el fenómeno no puede deberse a ningún efecto causado por el cambio de los electroimanes ...