Estoy usando un registro de desplazamiento PISO , específicamente el Fairchild Semiconductor 74HC589 .
Obtuve una idea del funcionamiento de un registro de desplazamiento genérico a través del GIF animado muy útil en el enlace de Wikipedia anterior, aunque hay un paso que me está eludiendo:
Como lo descubrí, el pin de carga en serie debe activarse para bloquear los pines de entrada y luego el reloj de lectura debe transferirse de los pestillos al registro de desplazamiento, ¿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 tengo conectados al SR para poder leer en serie en 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 desplazamiento 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, al hacer SET
ing o CLEAR
ing en cada señal, puedo habilitar/deshabilitar los pines en el registro de desplazamiento.
Al final, la idea sería leer en el SDI_BUS
pin del PIC lo 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 chip de lo que estoy tratando de lograr. No me queda muy claro cómo encajan en la imagen la carga serial y los pines del reloj de lectura .
Debe haber una secuencia en la que se elevan (o bajan ) para habilitar la salida del pin QH al cambiar el pin del reloj en serie . Esto es fundamentalmente lo que estoy tratando de entender.
EDIT3:
Siguiendo la respuesta de @shuckc, necesito aclarar lo siguiente:
En este momento 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 delayNs(x)
función retrasa la CPU por x
nanosegundos. También traté de explicar qué pin en el SR está siendo controlado por qué pin PIC; recuerde: están adaptados al voltaje, por lo que no es una pregunta.
Si entiendo su pregunta correctamente, es importante entender que el dispositivo funciona en un par de etapas separadas.
Si entiendo correctamente la tabla de verdad y el diagrama de tiempo en la hoja de datos, entonces el orden correcto de los pasos es el siguiente:
En general, sería más fácil generar/recibir el flujo de bits en serie directamente en un pin PIC, en lugar de usar un convertidor paralelo a serie externo. Especialmente uno que es un diseño de 30 años. El PIC tiene periféricos HSSI integrados para obtener una sincronización precisa en una amplia gama de velocidades de transmisión si necesita mantener una velocidad de bits UART/USB/I2C ajustada.
En relación con su pregunta, primero considere la interfaz entre el PIC de 3.3V y las entradas en el 74HC589. ¿Tiene algún amortiguador/controlador de voltaje entre los chips? ¿Son las salidas del PIC (3,3 V) lo suficientemente altas en los niveles lógicos 1 para registrarse limpiamente como un 1 en el 74HC589? Este es el 'Voltaje de entrada mínimo de nivel ALTO' del VIH en la hoja de datos. Para verificar esto, necesitamos saber cómo ha conectado los rieles de alimentación del 74HC589, ¿cuál es su voltaje de suministro?
Deberá controlar el patrón de bits paralelos en los "PIN DE DATOS PARALELOS" al menos 20 ns antes de la luz estroboscópica en R-CLOCK, (HORA DE CONFIGURACIÓN), por lo que necesitará algunas instrucciones antes de aumentar R-CLOCK. El tiempo de espera es de un mínimo de 5 ns, por lo que no necesita mantener R-CLOCK alto por mucho tiempo. ¿Cómo se ve su código de software que realiza la carga paralela?
-- actualizar --
¿Está intentando LEER desde este dispositivo? Necesitaré un diagrama de circuito o una mejor descripción para entender.
carajo
Joum
SDI_BUS
línea es común a varios módulos que están conectados en cadena y cada módulo tiene un montón de registros de desplazamiento con fotodiodos conectados a sus pines de carga en paralelo. Necesito saber cómo operar el registro de desplazamiento para poder obtener los datos en esos pines secuencialmente.carajo