Estoy usando un PISO shift-register, específicamente Fairchild Semiconductor 74HC589 .
Obtuve el jist de los funcionamientos de un registro de cambios genérico a través del GIF animado muy útil en el enlace de Wikipedia anterior, aunque hay un paso que me está excluyendo:
- Según la hoja de datos, hay un pin de carga en serie (13) y un pin de reloj de lectura (12). Supongo que solo quiero cargar lo que haya en los pestillos de entrada al propio registro de desplazamiento y luego simplemente sincronizar los bits uno por uno al pin de salida en serie. ¿Qué tipo de señal / secuencia de tiempo estoy buscando?
A medida que lo descubro, el pin serial load debe activarse para bloquear los pines de entrada y luego el leer reloj debe transferirse desde los pestillos al registro de cambios , verdad?
Necesito saber esto porque estoy controlando el SR a través de un PIC32MX y por ahora necesito saber cómo puedo SET
o CLEAR
los pines que he conectado al SR para poder leer en serie otro pin PIC32.
¿Alguna idea?
EDITAR:
Para ayudar a todos a entender mi pregunta (con suerte) un poco mejor, cada pin en el registro de cambios está conectado directamente a un pin en el PIC32. Por ejemplo:
#define READ_CLK PORTFbits.RF0
#define READ_CLK_TRIS TRISFbits.TRISF0
#define SERIAL_LOAD PORTEbits.RE4
#define SERIAL_LOAD_TRIS TRISEbits.TRISE4
#define SR_CLK PORTEbits.RE3
#define SR_CLK_TRIS TRISEbits.TRISE3
#define SDI_BUS PORTEbits.RE2
#define SDI_BUS_TRIS TRISEbits.TRISE2
De esta manera, mediante SET
ing o CLEAR
ing cada señal, puedo habilitar / deshabilitar los pines en el registro de desplazamiento.
Al final, la idea sería leer el pin SDI_BUS
del PIC que salga de la salida QH (pin 9) del registro de desplazamiento.
EDIT2:
He estado buscando un poco más sobre esto; descubrí que es una técnica llamada "bit banging". He reducido un poco mi problema particular a la fase de activación / selección de chips de lo que estoy tratando de lograr. No me queda muy claro cómo encajan en la imagen los serial load y read clock .
Debe haber una secuencia en la que se colocan alto (o bajo ) para permitir la sincronización del reloj QH a través de alternar el reloj serie pin. Esto es fundamentalmente lo que estoy tratando de entender.
EDIT3:
Siguiendo la respuesta de @shuckc, necesito aclarar lo siguiente:
- El pin no directamente conecta el registro de desplazamiento y el PIC. Hay cambios de nivel entre ellos. En cuanto a la tensión, las señales están correctamente adaptadas.
- El hecho de que el diseño de registro de desplazamiento que se está utilizando tenga 30 años está fuera de mi control. Estoy trabajando en un circuito construido con componentes que se han almacenado durante bastante tiempo y se utilizaron para crear prototipos de un concepto de diseño. No tengo otra opción, cajero automático.
- Lo que estoy tratando de entender es la secuencia de señales que necesito ingresar en el registro de desplazamiento para poder emitir los bits enclavados en serie. Esto apunta a LEER en el PIC de la SALIDA EN SERIE del registro de cambios.
Ahora mismo, lo que estoy tratando de hacer es algo en la línea de:
enableShiftRegister() // OE pin in SR ->High; SLOAD pin in SR -> High
latchSignal(); // LATCH_PIN = SET; delayNs(2); LATCH_PIN = CLEAR - RCLK in SR
loadSR(); // SLOAD_PIN = CLEAR; delayNs(2); SLOAD_PIN = SET;
for(i=0; i<8; i++){
clockSR(); // SRCLK_PIN = SET; delayNs(2); SRCLK_PIN = CLEAR; - SRCLK in SR
sdiBus = SDI_BUS;
}
La función delayNs(x)
retrasa la CPU durante x
nanosegundos. También traté de explicar qué pin en la SR está siendo controlado por qué pin PIC. Recuerda: están adaptados a la tensión, por lo que no es una pregunta.