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

2

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.

    
pregunta Joum

2 respuestas

3

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

  1. Las entradas paralelas. Estos tienen pestillos que deben señalizarse para leer las entradas y mantener internamente su estado. Una vez enclavado, 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. (\ $ \ overline {\ small \ text {SLOAD}} \ $)
  3. El último paso es desplazar los bits en el registro de desplazamiento (SCK)

Si entiendo la tabla de verdad y el diagrama de tiempo en la hoja de datos correctamente, el orden correcto de los pasos es el siguiente:

  1. Inicialice las señales de la siguiente manera RCK = bajo; \ $ \ overline {\ small \ text {SLOAD}} \ $ = high; \ $ \ overline {\ small \ text {OE}} \ $ = bajo; SCK = bajo;
  2. Aplique señales paralelas a las entradas A ~ H
  3. Registre las señales paralelas en los pestillos conduciendo RCK alto. RCK se dispara en un flanco ascendente. Conducir RCK bajo, su estado inactivo.
  4. Copie el contenido de los cierres de entrada en el registro de desplazamiento conduciendo \ $ \ overline {\ small \ text {SLOAD}} \ $ low. \ $ \ overline {\ small \ text {SLOAD}} \ $ está activo bajo. Drive \ $ \ overline {\ small \ text {SLOAD}} \ $ high nuevamente, su estado inactivo.
  5. Lea el pin Q H en su MCU
  6. Aplique un impulso de reloj en SCK para desplazar los datos en el pin Q H . SCK se dispara en un flanco ascendente. Condúzcalo alto, luego bajo.
  7. Repita los últimos 2 pasos para tantas entradas como le interese.
respondido por el jippie
0

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 externo de paralelo a serie. Especialmente uno que tiene un diseño de 30 años. El PIC ha incorporado periféricos HSSI para obtener una sincronización precisa en un amplio rango de velocidades en baudios si necesita mantener una UIT / USB / I2C de tasa de bits ajustada.

En relación con su pregunta: en primer lugar, considere la interfaz entre el PIC de 3.3V y las entradas en el 74HC589. ¿Tienes algún buffers / drivers de voltaje entre los chips? ¿Las salidas PIC (3.3 V) son lo suficientemente altas en los niveles lógicos 1 para registrarse de forma limpia como 1 en el 74HC589? Esto es VIH 'Voltaje de entrada mínimo de nivel alto' en la hoja de datos. Para comprobar esto, necesitamos saber cómo ha conectado los rieles de alimentación del 74HC589, ¿cuál es su voltaje de alimentación?

Deberá controlar el patrón de bits paralelo en los "PINES DE DATOS PARALELOS" al menos 20ns antes de la luz estroboscópica en R-CLOCK, (TIEMPO DE CONFIGURACIÓN), por lo que necesitará algunas instrucciones antes de levantar R-CLOCK. El tiempo de espera es mínimo de 5 ns, por lo que no es necesario mantener R-CLOCK alto durante mucho tiempo. ¿Qué aspecto tiene el código de software que realiza la carga paralela?

- actualizar -

¿Estás intentando LEER desde este dispositivo? Necesitaré un diagrama de circuito o una mejor descripción para entender.

    
respondido por el shuckc

Lea otras preguntas en las etiquetas