En uno de los artículos anteriores, ya mencionamos brevemente el uso de un registro de desplazamiento, en particular, el 74HC595. Echemos un vistazo más de cerca a las capacidades y el procedimiento para trabajar con este microcircuito.
Necesario
- - Arduino;
- - registro de desplazamiento 74HC595;
- - cables de conexión.
Instrucciones
Paso 1
El registro de desplazamiento 74HC595 y similares se utilizan como dispositivos para convertir datos en serie en paralelo, y también se pueden utilizar como un "pestillo" para los datos, manteniendo el estado transferido.
El pinout (pinout) se muestra en la figura de la izquierda. Su propósito es el siguiente.
Q0… Q7 - salidas de datos en paralelo;
GND - tierra (0 V);
Q7 '- salida de datos en serie;
^ MR - reiniciar maestro (activo bajo);
SHcp - entrada de reloj de registro de desplazamiento;
STcp - entrada de pulso de reloj "latch";
^ OE - habilitación de salida (activo bajo);
Ds - entrada de datos en serie;
Vcc - fuente de alimentación +5 V.
Estructuralmente, el microcircuito se fabrica en varios tipos de casos; Usaré el que se muestra en la figura de la derecha, el resultado, porque es más fácil de usar con una placa de pruebas.
Paso 2
Permítanme recordar brevemente la interfaz serial SPI, que usaremos para transferir datos al registro de desplazamiento.
SPI es una interfaz serial bidireccional de cuatro cables en la que participan un maestro y un esclavo. El maestro en nuestro caso será el Arduino, el esclavo será el registro 74HC595.
El entorno de desarrollo de Arduino tiene una biblioteca incorporada para trabajar en la interfaz SPI. Al aplicarlo se utilizan las conclusiones que se marcan en la figura:
SCLK - Salida de reloj SPI;
MOSI - datos de maestro a esclavo;
MISO - datos de esclavo a maestro;
SS - selección de esclavos.
Paso 3
Armemos el circuito como en la imagen.
También conectaré un analizador lógico a todos los pines del microcircuito del registro de desplazamiento. Con la ayuda de él, veremos qué está sucediendo a nivel físico, qué señales van hacia dónde y descubriremos qué significan. Debería parecerse a la foto.
Paso 4
Escribamos un boceto como este y cargámoslo en la memoria Arduino.
La variable PIN_SPI_SS es una constante estándar interna que corresponde al pin "10" del Arduino cuando se usa como el maestro de la interfaz SPI que estamos usando aquí. En principio, también podríamos usar cualquier otro pin digital en el Arduino; entonces tendríamos que declararlo y configurar su modo de funcionamiento.
Al alimentar este pin en BAJO, activamos nuestro registro de desplazamiento para transmitir / recibir. Después de la transmisión, volvemos a subir el voltaje a ALTO y finaliza el intercambio.
Paso 5
Convirtamos nuestro circuito en trabajo y veamos qué nos muestra el analizador lógico. La vista general del diagrama de tiempos se muestra en la figura.
La línea discontinua azul muestra 4 líneas SPI, la línea discontinua roja muestra 8 canales de datos paralelos del registro de desplazamiento.
El punto A en la escala de tiempo es el momento en que el número "210" se transfiere al registro de desplazamiento, B es el momento en que se escribe el número "0", C es el ciclo que se repite desde el principio.
Como puede ver, de A a B - 10.03 milisegundos, y de B a C - 90.12 milisegundos, casi como pedimos en el croquis. Una pequeña adición en 0, 03 y 0, 12 ms es el tiempo para transferir datos en serie desde el Arduino, por lo que no tenemos exactamente 10 y 90 ms aquí.
Paso 6
Echemos un vistazo más de cerca a la sección A.
En la parte superior hay un pulso largo con el que Arduino inicia la transmisión en la línea SPI-ENABLE: selección de esclavo. En este momento, comienzan a generarse pulsos de reloj SPI-CLOCK (segunda línea desde arriba), 8 piezas (para transferir 1 byte).
La siguiente línea desde la parte superior es SPI-MOSI: los datos que transferimos del Arduino al registro de desplazamiento. Este es nuestro número "210" en binario - "11010010".
Una vez completada la transferencia, al final del pulso SPI-ENABLE, vemos que el registro de desplazamiento ha establecido el mismo valor en sus 8 patas. He resaltado esto con una línea punteada azul y etiquetado los valores para mayor claridad.
Paso 7
Ahora dirijamos nuestra atención a la sección B.
Nuevamente, todo comienza con la elección de un esclavo y la generación de 8 pulsos de reloj.
Los datos de la línea SPI-MOSI ahora son "0". Es decir, en este momento escribimos el número "0" en el registro.
Pero hasta que se complete la transferencia, el registro almacena el valor "11010010". Se envía a los pines paralelos Q0.. Q7, y se envía cuando hay pulsos de reloj en la línea desde la salida paralela Q7 'a la línea SPI-MISO, que vemos aquí.
Paso 8
Por lo tanto, hemos estudiado en detalle el tema del intercambio de información entre el dispositivo maestro, que era el Arduino, y el registro de desplazamiento 74HC595. Aprendimos cómo conectar un registro de desplazamiento, escribir datos en él y leer datos de él.