¿Cómo funciona exactamente este registro de turnos? -Fairchild 74HC589

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:

  • De acuerdo con la hoja de datos, hay un pin de carga en serie (13) y un pin de lectura de reloj (12). Supongamos que solo quiero cargar lo que sea que esté en los pestillos de entrada en el registro de desplazamiento y luego simplemente registrar los bits uno por uno en el pin de salida en serie. ¿Qué tipo de señal/secuencia de tiempo estoy buscando?

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 SETo CLEARlos 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 SETing o CLEARing en cada señal, puedo habilitar/deshabilitar los pines en el registro de desplazamiento.

Al final, la idea sería leer en el SDI_BUSpin 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:

  • El pin no conecta directamente el registro de desplazamiento y el PIC. Hay cambiadores de nivel entre ellos. En cuanto al voltaje, las señales están correctamente adaptadas.
  • El hecho de que el diseño del registro de cambios que se utiliza tenga 30 años está fuera de mi control. Estoy trabajando en un circuito construido con componentes que han estado almacenados durante bastante tiempo y que se usaron 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 generar los bits bloqueados en serie. Esto tiene como objetivo LEER en el PIC desde la SALIDA SERIAL del registro de desplazamiento.

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 xnanosegundos. 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.

¿Por qué no generar el flujo de bits en serie directamente en un pin PIC? Hay periféricos incorporados para obtener una sincronización precisa en una amplia gama de velocidades de transmisión.
@shuckc porque esto es lo que necesito hacer y no tengo esa opción. La SDI_BUSlí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.
Ah, está bien, ¡parece que estás mucho más cerca de lo que sonaba la pregunta inicial!

Respuestas (2)

Si entiendo su pregunta correctamente, es importante entender que el dispositivo funciona en un par de etapas separadas.

  1. Las entradas paralelas. Estos tienen latches que deben señalarse para leer las entradas y mantener internamente su estado. Una vez enganchado, la señal en los pines de entrada puede cambiar pero las señales internas serán estables. (RCK)
  2. El siguiente paso es donde estas señales internas se copian en el registro de desplazamiento. ( CARGA ¯ )
  3. El último paso es desplazar los bits en el registro de desplazamiento (SCK)

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:

  1. Inicialice las señales de la siguiente manera RCK = bajo; CARGA ¯ = alto; Equipo original ¯ = bajo; SCK = bajo;
  2. Aplicar señales paralelas a las entradas A~H
  3. Registre las señales paralelas en los pestillos elevando RCK. RCK se dispara en un flanco ascendente. Conduzca RCK bajo, su estado inactivo.
  4. Copie el contenido de los pestillos de entrada en el registro de desplazamiento conduciendo CARGA ¯ bajo. CARGA ¯ está activo bajo. Conducir CARGA ¯ alta de nuevo, su estado inactivo.
  5. Lea el pin Q H en su MCU
  6. Aplique un pulso de reloj en SCK para cambiar los datos en el pin QH . SCK se dispara en un flanco ascendente. Condúcelo alto, luego bajo.
  7. Repita los últimos 2 pasos para todas las entradas que le interesen.
Solo para ser perfectamente claro con respecto al paso 4, CARGA ¯ NO se activa por flanco. Los contenidos del registro de desplazamiento se ven obligados a coincidir con los contenidos del registro de entrada siempre que CARGA ¯ es bajo. Debes conducirlo alto antes de que puedas cambiar algo. Además, con respecto al paso 5, la primera salida (la correspondiente a la entrada H) está disponible inmediatamente en q H , antes de aplicar un flanco ascendente a SCK. Los pasos 5 y 6 realmente deberían intercambiarse.
@DaveTweed Buena captura con el disparador de borde, no estoy seguro de por qué escribí eso. Probablemente mezcló dos señales. Para Q<sub>H</sub> leí mal el diagrama de tiempo. Corregido ambos.
Este es exactamente el tipo de respuesta que estaba buscando, ¡gracias a ambos! ¿Hay algo que pueda agregar en términos de tiempo? es decir, cuánto tiempo debe CARGA ¯ ser conducido alto ? ¿Debo introducir algún retraso entre los pasos? ¿Algo así como un par de nanosegundos, más o menos?
@Joum Verifique en 'Características eléctricas de CA' en la hoja de datos, la mayoría de los tiempos de configuración son máximos del orden de 20 ns para 5V. Es probable que su controlador funcione a un par de MHz y probablemente sea "demasiado lento" (<50 MHz) para que realmente sea un problema.

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.

¡Gracias por intentar ayudar! Por favor revise mis ediciones en la pregunta.