Tabla de contenido:

El registro de cambio 74HC164 y su Arduino: 9 pasos
El registro de cambio 74HC164 y su Arduino: 9 pasos

Video: El registro de cambio 74HC164 y su Arduino: 9 pasos

Video: El registro de cambio 74HC164 y su Arduino: 9 pasos
Video: COMO FUNCIONA EL REGISTRO DE DESPLAZAMIENTO 74HC164 2024, Noviembre
Anonim
El registro de cambios 74HC164 y su Arduino
El registro de cambios 74HC164 y su Arduino
El registro de cambios 74HC164 y su Arduino
El registro de cambios 74HC164 y su Arduino

Los registros de desplazamiento son una parte muy importante de la lógica digital, actúan como pegamento entre los mundos paralelo y serial. Reducen el número de cables, el uso de pines e incluso ayudan a aliviar la carga de su cpu al poder almacenar sus datos. Vienen en diferentes tamaños, con diferentes modelos para diferentes usos y diferentes características. El que discutiré hoy es el 74HC164 de 8 bits, en serie en paralelo, sin enclavamiento, registro de desplazamiento. Bueno, para empezar, es uno de los registros de desplazamiento más básicos que existen, lo que facilita el aprendizaje, pero resultó ser el único que tenía (¡jajaja!) Este instructivo cubre cómo funciona este chip, cómo conectarlo, y la interfaz con un arduino que incluye algunos bocetos de muestra y circuitos LED. ¡Espero que todos lo disfruten!

Paso 1: Entonces, ¿qué son los registros de turnos?

Entonces, ¿qué son los registros de turnos?
Entonces, ¿qué son los registros de turnos?

Como se mencionó anteriormente, vienen en todos los sabores diferentes, y también mencioné que estoy usando un 74HC164 de 8 bits, en serie en paralelo, sin enclavamiento, registros de desplazamiento, entonces, ¿qué significa todo eso?!? Primero, el nombre 74 - significa que es parte de la familia lógica 74xx, y dado que su lógica no puede controlar directamente mucha corriente (16-20ma para todo el chip es común), solo pasa señales, pero eso no significa esa señal no va a un transistor que puede cambiar una carga de corriente más alta. HC significa que es un dispositivo cmos de alta velocidad, puede leer sobre eso en el enlace a continuación, pero lo que básicamente necesita saber es que es un bajo dispositivo de energía y funcionará de 2 a 5 voltios (por lo que si está usando un arduino de 3.3 voltios está bien) También puede funcionar correctamente a altas velocidades, este chip en particular tiene una velocidad típica de 78 mhz, pero puede ir tan lento o tan rápido (hasta que comience a fallar) como desee www.kpsec.freeuk.com/components/74series.htm 164 es el número de modelo de este chip, hay una gran tabla de ellos en wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits Siguiente, 8 bits Un registro de desplazamiento se compone de circuitos flip flop, un flip flop es 1 bit de memoria, este ha s 8 (o 1 byte de memoria). Dado que es memoria, si no necesita actualizar el registro, simplemente puede dejar de "hablar" con él y permanecerá en el estado en que lo dejó, hasta que "hable" con él nuevamente o restablezca la energía. Otros registros de desplazamiento de la serie lógica 7400 pueden ir hasta 16 bits en serie en paralelo. Esto significa que su arduino envía los datos en serie (pulsos de encendido y apagado uno tras otro) y el registro de desplazamiento coloca cada bit en el pin de salida correcto. Este modelo solo requiere 2 cables para ser controlados, por lo que puede usar 2 pines digitales en el arduino y dividir esas 2 salidas en 8 salidas digitales más. (por ejemplo, un gamepad de NES) sin enclavamiento Esto puede ser una caída de este chip si lo necesita. A medida que los datos ingresan a un registro de desplazamiento a través de serie, se muestran en el primer pin de salida, cuando ingresa un pulso de reloj, el primer bit se desplaza en 1 lugar, creando un efecto de desplazamiento en las salidas, por ejemplo, 00000001 aparecería en las salidas como 101001000100001000001000000100000001 Si está hablando con otros dispositivos lógicos que comparten el mismo reloj y no esperan esto, podría causar problemas. Los registros de cambio bloqueados tienen un conjunto adicional de memoria, por lo que una vez que los datos terminan de ingresar al registro, puede activar un interruptor y mostrar las salidas, pero agrega otro cable, software y cosas para mantenerse al día. estamos controlando las pantallas LED, el efecto de desplazamiento ocurre tan rápido que no puede verlo (excepto cuando enciende el chip por primera vez), y una vez que el byte está en el registro de desplazamiento no hay más desplazamiento Estaremos controlando el tipo de gráfico de barras, segmento 7, y una matriz de puntos 16LED 4x4 con este chip y software en el arduino usando solo 2 pines digitales (+ potencia y tierra)

Paso 2: cableado y funcionamiento básicos

Cableado y funcionamiento básicos
Cableado y funcionamiento básicos
Cableado y funcionamiento básicos
Cableado y funcionamiento básicos

Cableado El 74HC164 es un chip de 14 pines, tiene 4 pines de entrada, 8 pines de salida, alimentación y tierra, así que comencemos desde arriba. Los pines 1 y 2 son entradas en serie, están configurados como una puerta Y lógica, lo que significa que ambos tienen que ser lógicamente altos (es decir, 5 voltios) para que el bit se vea como un 1, un estado bajo (0 voltios) en cualquiera de los dos se leerá como un cero. Realmente no necesitamos esto y es más fácil de manejar en el software, así que elija uno y conéctelo a V + para que siempre se lea alto. Elijo usar un puente del pin 1 al pin 14 (V +) ya que puede colocar un puente de tablero sobre el chip. La única entrada serial restante (pin 2 en mis esquemas) irá al pin digital 2 del arduino. Los pines 3, 4, 5 y 6 del 74HC164 son los primeros 4 bytes de salida El pin 7 se conecta a tierra Saltando a la derecha, pin 8 es el pin del reloj, así es como el registro de desplazamiento sabe que el siguiente bit en serie está listo para su lectura, esto debe estar conectado al pin digital 3 en el arduino. El pin 9 es para borrar todo el registro de una vez, si baja, tiene la opción de usarlo, pero nada en este inescrutable lo hace, así que átelo a V + pines 10, 11 12 y 13 son los últimos 4 bytes de salida, el pin 14 es la potencia de los chips Operación Primero debe configurar la entrada en serie del registro (pin digital 2 en el arduino) alto o bajo, a continuación, debe girar el pin del reloj (pin digital 3) de bajo a alto, el registro de desplazamiento leerá los datos en la entrada en serie y cambiará los pines de salida por 1, repita 8 veces y habrá configurado las 8 salidas. Esto se puede hacer a mano con bucles for y escrituras digitales en el IDE de arduino, pero desde t Ésta es una comunicación a nivel de hardware (SPI) muy común, tienen una única función que lo hace por usted. shiftOut (dataPin, clockPin, bitOrder, value) Simplemente dígale dónde están conectados los pines de datos y reloj al arduino, de qué manera enviar los datos y qué enviar, y se encargará de usted (útil)

Paso 3: Proyectos

Proyectos
Proyectos

De acuerdo, suficiente conferencia y teoría, ¡hagamos algunas cosas divertidas con este chip! Hay 3 proyectos para probar en este instructivo, los primeros 2 son fáciles y se pueden ampliar en un momento. El tercero, la matriz de LED 4x4, requiere más tiempo y pensamiento para construir, debido al cableado del LED. Lista de piezas Proyecto 1: Controlador de pantalla LED de gráfico de barras de '2 cables' 1 * 74HC164 Registro de cambios 1 * tablero sin soldadura 1 * arduino o arduino compatible (5v) 1 * resistencia de 330 ohmios 1/4 vatios 8 * LED rojos de salida normal 12 * cables de puente Proyecto 2: controlador de pantalla de 7 segmentos '2 cables' 1 * 74HC164 Registro de cambios 1 * placa de prueba sin soldadura 1 * arduino o compatible con arduino (5v) 1 * Resistencia de 330 ohmios 1/4 vatios 1 * Pantalla de siete segmentos de cátodo común 9 * Cables de puente Proyecto 3: Pantalla de matriz LED 4x4 '2 cables' 1 * 74HC164 Registro de cambios1 * Arduino o compatible con arduino (5v) 4 * 150 ohmios 1 Resistencia de 1/4 vatio 8 * 1Kohm Resistencia de 1/8 vatio (o más grande) 8 * Transistor NpN (2n3904 o mejor) 16 * LED rojos de salida normal son un medio para construirlo y una potencia regulada de 5 voltios que puede manejar 160 + ma (puede enciende todos los LED a la vez como una luz de freno)

Paso 4: Proyecto 1 [pt 1]: Hardware del controlador de pantalla LED con gráfico de barras de '2 cables'

Proyecto 1 [pt 1]: Hardware del controlador de pantalla LED con gráfico de barras de '2 cables'
Proyecto 1 [pt 1]: Hardware del controlador de pantalla LED con gráfico de barras de '2 cables'
Proyecto 1 [pt 1]: Hardware del controlador de pantalla LED con gráfico de barras de '2 cables'
Proyecto 1 [pt 1]: Hardware del controlador de pantalla LED con gráfico de barras de '2 cables'

Conecte el arduino y cambie el registro de acuerdo con el esquema, ya tengo una pantalla de gráfico de barras de 10 segmentos lista para usar en la placa de pruebas y eso es lo que verá en la imagen, pero puede hacer lo mismo con los LED individuales En la segunda página Dije que estos no eran dispositivos controladores, que eran dispositivos lógicos, con pequeñas cantidades de corriente capaces de pasar a través de ellos. Para ejecutar 8 LED, manteniendo el circuito simple y sin cocinar el registro de desplazamiento, es necesario que limitemos un poco la corriente. Los LED están conectados en paralelo y comparten una tierra común (cátodo común), antes de pasar a la alimentación tierra de suministro que deben pasar a través de una resistencia de 330 ohmios, lo que limita la cantidad total de corriente que todos los LED podrían usar a 10ma (a 5 voltios) Esto deja a los LED en un estado de aspecto enfermizo, pero se encienden y, por lo tanto, sirven para En este ejemplo, para impulsar los LED a su corriente adecuada, deberá insertar un transistor donde el registro de desplazamiento pueda encender / apagar una fuente de corriente más alta (ver proyecto 3) El pin de datos del registro de desplazamiento (pin 2) necesita para conectarse al pin digital arduino n. ° 2 El pin de reloj del registro de desplazamiento (pin 8) debe conectarse al pin digital arduino n. ° 3

Paso 5: Proyecto 1 [pt 2]: Software de controlador de pantalla LED con gráfico de barras '2 cables'

Proyecto 1 [pt 2]: Software de controlador de pantalla LED de gráfico de barras '2 Wire'
Proyecto 1 [pt 2]: Software de controlador de pantalla LED de gráfico de barras '2 Wire'
Proyecto 1 [pt 2]: Software de controlador de pantalla LED de gráfico de barras '2 Wire'
Proyecto 1 [pt 2]: Software de controlador de pantalla LED de gráfico de barras '2 Wire'

Ejemplo 1: Abra el archivo "_164_bas_ex.pde" Dentro del IDE de arduino, es un boceto simple que solo le permite definir LED de encendido o apagado en la pantalla del gráfico de barras Las primeras 2 líneas definen los números de pin que usaremos para los datos y el reloj, yo use #define sobre const integer, lo encuentro más fácil de recordar, y no hay ventaja para uno u otro una vez compilado #define data 2 # define clock 3 next es la función de configuración void, solo se ejecuta una vez, por lo que el arduino gira encendido, establece el registro de desplazamiento y no tiene nada más que hacer. Dentro de la función de configuración de vacío, configuramos los pines de reloj y datos como pines de SALIDA, luego, usando la función shiftOut, enviamos los datos al registro de desplazamiento void setup () {pinMode (reloj, SALIDA); // hace que el pin del reloj sea un pinMode de salida (datos, SALIDA); // hace que el pin de datos sea una salida shiftOut (data, clock, LSBFIRST, B10101010); // enviar este valor binario al registro de desplazamiento} En la función shiftOut puede ver sus argumentos datos es el pin de datos, reloj es el pin de reloj LSBFIRST se refiere al orden en el que está, al escribirlo en notación binaria (Bxxxxxxxx) el séptimo El elemento más allá de B es el bit menos significativo Primero, esto se alimenta primero, por lo que termina en la última salida una vez que se ingresan los 8 bits B10101010 es el valor binario que se envía al registro de desplazamiento, y se encenderá cada luz impar, intente jugar con diferentes valores para activar o desactivar diferentes patrones y finalmente un bucle vacío vacío (porque necesita uno incluso si no lo está usando) bucle vacío () {} // bucle vacío por ahora Ejemplo 2: las primeras 8 líneas son al igual que las primeras 8 líneas del primer ejemplo, de hecho no cambiarán para ninguno de los otros proyectos, así que #define data 2 # define clock 3void setup () {pinMode (clock, OUTPUT); // hace que el pin del reloj sea un pinMode de salida (datos, SALIDA); // hace que el pin de datos sea una salida Pero ahora en la configuración nula hay un ciclo de conteo de 8, que toma un byte vacío y cambia 1 bit a la vez, comenzando desde el bit más a la izquierda y moviéndose hacia la derecha. Esto es al revés del primer ejemplo donde comenzamos desde el bit más a la derecha y trabajamos a la izquierda, pero usando MSBFIRST la función shift out envía los datos de la manera correcta. También agregamos un retraso en el bucle for para que se ralentice lo suficiente como para ser visible. for (int i = 0; i <8; ++ i) // for 0 - 7 do {shiftOut (data, clock, MSBFIRST, 1 << i); // bit cambia un valor lógico alto (1) por i delay (100); // demora 100 ms o no podrás verlo}} void loop () {} // bucle vacío por ahora carga el script y ahora deberías ver que el gráfico de barras ilumina cada luz una a la vez

Paso 6: Proyecto 2: Controlador de pantalla de 7 segmentos '2 cables'

Proyecto 2: Controlador de pantalla de 7 segmentos '2 cables'
Proyecto 2: Controlador de pantalla de 7 segmentos '2 cables'
Proyecto 2: Controlador de pantalla de 7 segmentos '2 cables'
Proyecto 2: Controlador de pantalla de 7 segmentos '2 cables'

Mire el pinout de su pantalla de 7 segmentos (solo tenía uno dual pero solo usaba la mitad) y use el dibujo a continuación para conectar cada segmento al bit correcto en el registro de desplazamiento bit 1 = pin 3bit 2 = pin 4bit 3 = pin 5bit 4 = pin 6bit 5 = pin 10bit 6 = pin 11bit 7 = pin 12bit 8 = pin 13 (si desea usar el punto decimal) Y el cátodo de la pantalla a través de la resistencia de 330ohm y la fuente de alimentación a tierra ahora abra el seven_seg_demo.pde en el ID de arduino, primero verá dónde definimos los datos y los pines del reloj #definir datos 2 # definir el reloj 3 A continuación, configuramos todos los patrones de caracteres en binario, esto es bastante fácil, mire el dibujo a continuación, si necesita el segmento medio escriba uno, a continuación, ¿necesita el segmento superior? Si es así, escriba otro, siga haciendo esto hasta que cubra los 8 segmentos, observe que mi bit más a la derecha (bit 8) es siempre 0, eso es porque nunca enciendo el decimal punto. byte cero = B01111110; byte uno = B00000110; byte dos = B11011010; byte tres = B11010110; byte cuatro = B10100110; byte cinco = B11110100; byte seis = B11111100; byte siete = B01000110; byte ocho = B1111101 = B11110; byte nueve; a continuación, en la configuración void, configuramos nuestros pines de datos y reloj en las salidas void setup () {pinMode (clock, OUTPUT); // hace que el pin del reloj sea un pinMode de salida (datos, SALIDA); // haga que el pin de datos sea una salida3} luego en el bucle void usamos shiftOut para mostrar cada patrón (número) esperar 1/2 segundo y mostrar el siguiente, 0 a 9, ya que se hace en la función de bucle void que contará 0-9 y repetir para siempre. bucle vacío () {shiftOut (datos, reloj, LSBFIRST, cero); retraso (500); shiftOut (datos, reloj, LSBFIRST, uno); retraso (500); shiftOut (datos, reloj, LSBFIRST, dos); retraso (500); shiftOut (datos, reloj, LSBFIRST, tres); retraso (500); shiftOut (datos, reloj, LSBFIRST, cuatro); retraso (500); shiftOut (datos, reloj, LSBFIRST, cinco); retraso (500); shiftOut (datos, reloj, LSBFIRST, seis); retraso (500); shiftOut (datos, reloj, LSBFIRST, siete); retraso (500); shiftOut (datos, reloj, LSBFIRST, ocho); retraso (500); shiftOut (datos, reloj, LSBFIRST, nueve); retraso (500);}

Paso 7: Proyecto 3 [pt 1]: Pantalla de matriz de LED 4x4 '2 cables'

Proyecto 3 [pt 1]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 1]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 1]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 1]: Pantalla de matriz de LED 4x4 '2 cables'

El proyecto de la matriz de LED 4x4 es un poco más complejo, pero casi todo está en construcción, elijo hacer el mío soldado en un tablero de perforación, pero debería ser posible replicarlo en un tablero de pruebas, solo que mucho más espaciado. difiere en que el registro de desplazamiento no está impulsando directamente los LED, sino que las salidas del registro de desplazamiento se envían a través de una resistencia de 1Kohm a la base de un transistor NpN, cuando la salida del bit es alta, deja pasar suficiente corriente y voltaje al transistor para cambiar la conexión entre el colector y el emisor, los colectores están conectados a un "robusto" regulado de 5 voltios. Los emisores de los transistores están conectados a resistencias de 150 ohmios y las resistencias están conectadas a los ánodos de 4 leds en una fila y limita la fila a 20ma, aunque cuando se dibujan imágenes en la pantalla, solo se enciende 1 led a la vez y, por lo tanto, casi con el brillo máximo (casi porque se encienden y apagan muy rápido para componer la imagen completa) Hay 4 filas y 4 columnas, cada una La fila obtiene una resistencia y un transistor, en cada columna los cátodos de los LED están unidos, se conectan al colector de un transistor, cuya base también está controlada por el registro de desplazamiento, y finalmente a tierra. Versión grande del esquema www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

Paso 8: Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'

Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'
Proyecto 3 [pt 2]: Pantalla de matriz de LED 4x4 '2 cables'

El registro de desplazamiento controla tanto el ánodo como los cátodos de los LED en un formato YX, observe el siguiente bit 1 = columna 1 (más a la derecha) bit 2 = columna 2bit 3 = columna 3bit 4 = columna 4bit 5 = fila 1 (superior) bit 6 = fila 2 bits 7 = fila 3 bits 8 = fila 4 Para hacer una imagen, dibuje un cuadrado de 4x4 en papel cuadriculado y complete los que desea que se muestren, luego haga una tabla YX. A continuación verá un mapeo para un símil, así como lo mejor que se puede hacer en 4x4 "píxeles". Para cada sección completa, anoto en qué columna (Y) está, luego en qué fila está (X) Ahora abra el archivo _4x4.pde en el IDE de arduino verá a nuestros 2 viejos amigos #define data 2 # define clock 3 luego una matriz de enteros int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Si miras que es solo una lista de mis coordenadas YX escritas, sería un gran dolor en el trasero convertir esos valores a mano, y tenemos una computadora … ¡déjalo hacerlo! Continuando, hay una configuración vacía donde hacemos nuestros pines de reloj y datos SALIDAS void setup () {pinMode (reloj, SALIDA); // hace que el pin del reloj sea un pinMode de salida (datos, SALIDA); // hacer que el pin de datos sea una salida3} Y un bucle vacío de aspecto confuso, para empezar necesitamos declarar algunas variables locales void loop () {int Y; int X; byte out; Luego, un bucle for, este bucle debe ser tan largo como la cantidad de entradas en la matriz img, para esta imagen solo usé 6 píxeles, por lo que hace 12 coordenadas YX. Hago que se salte cada dos números usando i + = 2, porque leemos 2 coordenadas por ciclo para (int i = 0; i <12; i + = 2) // número de puntos en la matriz img, este caso 12 {Ahora leemos la entrada Y en en la matriz, y restamos uno de su valor, porque los bytes no comienzan en uno, comienzan en cero, pero contamos desde 1 // obtenemos el primer par de cables YX Y = (img - 1); // resta uno ya que el recuento de bits comienza en 0 Luego leemos la entrada X en [i + 1] en la matriz, y restamos uno de su valor, por la misma razón X = (img [i + 1] - 1); Después de tener los valores de YX del píxel, hacemos un poco de bit a bit o matemático y nos desplazamos hacia la izquierda. Primero, necesitamos leer el valor de X, y cualquiera que sea su valor, desplazarlo tantos lugares + 4 a la izquierda, por lo que si X es 4 y agregue 4 es el bit 8 (MSB), mirando el gráfico de nuevo … bit 1 = columna 1 (más a la derecha) bit 2 = columna 2bit 3 = columna 3bit 4 = columna 4bit 5 = fila 1 (superior) bit 6 = fila 2bit 7 = fila 3 bits 8 = fila 4 bits 8 es la última fila A continuación, el valor de Y también se desplaza hacia la izquierda, esta vez solo, sin agregar nada. Finalmente, los dos se agrupan en 1 byte en lugar de 2 medios bytes. (nibbles), usando bit a bit o (el símbolo |) toma dos bytes y básicamente los suma, supongamos X = 10000000Y = 00000001 -------------------- OR = 10000001row 4 columna 1 out = 1 << (X + 4) | 1 << Y; Y finalmente shiftOut para mostrar la imagen actual, y seguir haciéndolo hasta que no tengamos más datos en la matriz … retrase un momento y repita para siempre, ya que estábamos cambiando los datos a la izquierda y necesitamos que el MSB esté en el último pin de salida del registro de desplazamiento envíelo primero. shiftOut (datos, reloj, MSBFIRST, out); // cambia el byte a nuestro registro delay (1); // retrasarlo un poco para que tenga la oportunidad de dejar un punto de luz en tus ojos. Siéntete libre de crear tus propias imágenes y efectos. Hay 3 archivos de muestra, la carita sonriente y un tablero de ajedrez (que se parece más a rayas), y finalmente un creador de chispas al azar

Paso 9: Conclusión

Conclusión
Conclusión
Conclusión
Conclusión
Conclusión
Conclusión

Sobre todo, este es un pequeño chip bastante útil, y me alegro de haberlo desechado de una vieja pieza electrónica que se envió a la basura. Se puede usar para otras cosas además de los sistemas de visualización, pero a todos les gustan las luces y la retroalimentación instantánea de ver Lo que está sucediendo es extremadamente útil para los pensadores visuales como yo. También perdonen mi código, solo he tenido el arduino desde la tercera semana de octubre, y ha sido un curso intensivo bastante grande. Pero eso es lo mejor del sistema, si te sientas y trabajas con él, está lleno de características interesantes que hacen que controlar el mundo con un microcontrolador de 8 bits sea bastante fácil de hacer. Como siempre, las preguntas y los comentarios son bienvenidos, y gracias por leyendo, espero que hayas aprendido mucho

Recomendado: