Registro de desplazamiento paralelo en serie

1

Estoy haciendo un proyecto en el que los necesitaré y compré dos para aprender a usarlos y encadenarlos. Estoy usando el 74HC166, y estoy teniendo algunos problemas. Los estoy usando de acuerdo con la función de tabla de la hoja de datos, que adjunto:

Porlotanto,esunregistrodedesplazamientoPISOde8bits.Asíescomoestoyinterpretandolatabla.Nosécómoleerlo,asíquetuvequeadivinaryobviamentecometíerrores.

Siquierocargarlosestadosenelregistro,elPEyelCEdebenestarBAJOSantesdeactivarelCPdeBAJOaALTO.Despuésdeeso,puedocomenzaraleerlosvaloresdeQ7,yparacambiarelvalorqueleerédeQ7,tengoquevolveraactivarelCPconPEenALTOyCEenLOW.Nosécómousar,ocuándodeberíausarlafila"no hacer nada". y esto no funciona porque no estoy leyendo los estados correctos. En este momento acabo de conectar los pines Dn a ALTO o BAJO directamente para probarlo.

Este es el código que estoy usando:

/* Trigger a parallel Load to latch the state of the data lines,
*/
digitalWrite(clockEnablePin, LOW);
digitalWrite(ploadPin, LOW);
delayMicroseconds(PULSE_WIDTH_USEC);
digitalWrite(clockPin, HIGH);
delayMicroseconds(PULSE_WIDTH_USEC);
digitalWrite(ploadPin,HIGH);

/* Loop to read each bit value from the serial out line
 * of the SN74HC166.
*/
bitVal = digitalRead(dataPin);
digitalWrite(clockPin,LOW);
bytesVal |= (bitVal << ((DATA_WIDTH-1) - 0));
delayMicroseconds(PULSE_WIDTH_USEC);
digitalWrite(clockPin,HIGH);

bitVal = digitalRead(dataPin);
digitalWrite(clockPin,LOW);
bytesVal |= (bitVal << ((DATA_WIDTH-1) - 1));
delayMicroseconds(PULSE_WIDTH_USEC);
digitalWrite(clockPin,HIGH);

Esto debería leer los dos primeros estados. y repasaría el párrafo de "lectura" para leerlos todos. PULSE_WIDTH_USEC es 5. (5 microsegundos).

Entonces, ¿cómo uso estos registros?

EDIT: Ok, acabo de reescribir el código desde cero y funcionó ... Probablemente fue algo tonto.

    
pregunta MyUserIsThis

1 respuesta

1

Usted cuestionó si alguna vez necesitaría usar el estado de "retención" del registro de desplazamiento. En su caso, ya que está utilizando un enfoque de bit banged para operar el registro de desplazamiento, tiene la capacidad de inhibir selectivamente la sincronización del reloj que va al registro. Bajo esta condición, realmente no habrá necesidad de usar el estado de "espera" porque se puede lograr lo mismo manteniendo el pin del reloj en un nivel constante (alto o bajo).

El uso real para el estado de "espera" podría entrar en juego en los casos en que el reloj es una señal en constante funcionamiento y se implementa la lógica del hardware para producir los impulsos de CARGAR y HABILITAR al registro de cambios para permitir la operación en los momentos deseados. Dicha lógica tendría que producir los pulsos en el sincronismo adecuado con la señal del reloj para garantizar que se cumplan los tiempos de configuración y retención alrededor del borde ascendente del reloj para que el registro de desplazamiento funcione correctamente.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas