Programación de Arduino - Jugar con registros de desplazamiento (a.k.a Incluso más LEDs)
Hoy intentaré enseñarte un poco sobre los registros de turnos. Estas son una parte bastante importante de la programación de Arduino, básicamente porque expanden la cantidad de salidas que puede usar, a cambio de solo 3 pines de control. También puede conectar en serie los registros de desplazamiento para obtener aún más salidas..
Sin embargo, este es un salto significativo en la dificultad de los tutoriales anteriores, y le sugiero encarecidamente que tenga una muy buena comprensión del material anterior (enlaces al final de este artículo), así como la comprensión de los conceptos básicos de binario ¿Qué es binario? [Tecnología explicada] ¿Qué es binario? [Explicación de la tecnología] Dado que el binario es absolutamente fundamental para la existencia de las computadoras, parece extraño que nunca hayamos abordado el tema antes, así que hoy pensé que daría una breve descripción de qué binario ... Leer más, que Escribí la última vez.
Qué es un registro de turnos?
Un registro de desplazamiento de salida, técnicamente hablando, recibe datos en serie y los genera en paralelo. En términos prácticos, esto significa que podemos enviar rápidamente un grupo de comandos de salida al chip, indicarle que se active y las salidas se enviarán a los pines correspondientes. En lugar de iterar a través de cada pin, simplemente enviamos la salida requerida a todos los pines a la vez, como un solo byte o más de información.
Si le ayuda a comprender, puede pensar en un registro de desplazamiento como un 'conjunto' de salidas digitales, pero podemos omitir los comandos habituales de escritura digital y simplemente enviar una serie de bits para activarlos o desactivarlos..
Como funciona?
El registro de cambios que usaremos, el 74HC595N incluido en el kit de inicio Oomlout, solo necesita 3 pines de control. El primero es un reloj: no tiene que preocuparse demasiado por esto, ya que las bibliotecas seriales de Arduino lo controlan, pero un reloj es básicamente un pulso eléctrico de encendido / apagado que marca el ritmo de la señal de datos..
El pin de bloqueo se utiliza para indicar al registro de desplazamiento cuándo debe activar y desactivar sus salidas de acuerdo con los bits que acabamos de enviar, es decir, enclavarlas en su lugar.
Finalmente, el pin de datos es donde enviamos los datos seriales reales con los bits para determinar el estado de activación / desactivación de las salidas del registro de desplazamiento.
Todo el proceso se puede describir en 4 pasos:
- Establezca el pin de datos en alto o bajo para el primer pin de salida en el registro de desplazamiento.
- Pulse el reloj para 'cambiar' los datos al registro.
- Continúe configurando los datos y pulsando el reloj hasta que haya configurado el estado requerido para todos los pines de salida.
- Pulsar el pin de cierre para activar la secuencia de salida..
Implementación
Necesitas los siguientes componentes para este proyecto:
- 7HC595N chip de registro de desplazamiento
- 8 LEDS y resistencias apropiadas, o lo que quiera enviar a
- La placa de pruebas habitual, conectores y un Arduino básico.
Si tiene el kit de inicio de Oomlout, puede descargar el diseño del tablero desde aquí.
Aquí está el video de montaje:
El diseño del tablero:
Y mi versión ensamblada:
He modificado el código original provisto por Ooolmout, pero si desea intentarlo, puede descargarlo completo aquí. Se incluye una explicación del código, así que copie y pegue todo desde abajo o pegue en papel para leer una explicación del código..
/ * -------------------------------------------------- --------- * | Shift Register Tutorial, basado en | * | Kit de experimentación Arduino CIRC-05 | * | .: 8 Más LEDs:. (74HC595 registro de turnos) | * ------------------------------------------------- -------- * | Modificado por James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Definiciones de pines // 7HC595N tiene tres pines int data = 2; // donde enviamos los bits para controlar las salidas int clock = 3; // mantiene los datos sincronizados int latch = 4; // indica al registro de desplazamiento cuándo activar la secuencia de salida void setup () // configura los tres pines de control para que emitan pinMode (datos, SALIDA); pinMode (reloj, SALIDA); PinMode (pestillo, SALIDA); Serial.begin (9600); // para que podamos enviar mensajes de depuración al monitor serie void loop () outputBytes (); // nuestra salida básica que escribe 8 bits para mostrar cómo funciona un registro de desplazamiento. // outputIntegers (); // envía un valor entero como datos en lugar de bytes, contando efectivamente en binario. void outputIntegers () for (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100); void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >> para ajustar el retardo de dirección (100);
Desplazamiento de bits (Función OutputBytes)
En el primer ejemplo de bucle, outputBytes (), el código utiliza una secuencia de 8 bits (un byte) que luego se desplaza a la izquierda en cada iteración del bucle for. Es importante tener en cuenta que si se desplaza más de lo posible, el bit simplemente se pierde..
El cambio de bits se realiza utilizando << or >> seguido del número de bits que desea desplazar.
Mira el siguiente ejemplo y asegúrate de entender lo que está pasando:
byte val = B00011010 val = val << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010
Enviar enteros en su lugar (función OutputIntegers)
Si envía un número entero al registro de desplazamiento en lugar de un byte, simplemente convertirá el número en una secuencia de bytes binarios. En esta función (descomentar en el bucle y subir para ver el efecto), tenemos un bucle for que cuenta de 0-255 (el entero más alto que podemos representar con un byte) y lo envía en su lugar. Básicamente cuenta en binario, por lo que la secuencia puede parecer un poco aleatoria a menos que sus LED estén dispuestos en una línea larga.
Por ejemplo, si lee el artículo explicado en binario, sabrá que el número 44 se representará como 00101100, por lo que los LED 3,5,6 se encenderán en ese punto de la secuencia..
Daisy encadenando más de un registro de turnos
Lo sorprendente de los registros de cambios es que si se les da más de 8 bits de información (o el registro es muy grande), volverán a desplazar los otros bits adicionales. Esto significa que puede conectar una serie de ellos juntos, empujar una larga cadena de bits y distribuirlos en cada registro por separado, todo ello sin ninguna codificación adicional de su parte.
Aunque no detallaremos el proceso ni los esquemas aquí, si tiene más de un registro de turnos, puede probar el proyecto desde el sitio oficial de Arduino aquí..
Otros artículos de la serie:
- ¿Qué es Arduino y qué puedes hacer con él? ¿Qué es Arduino y qué puedes hacer con él? ¿Qué es Arduino y qué puedes hacer con él? El Arduino es un pequeño dispositivo electrónico notable, pero si nunca ha usado uno antes, ¿qué son exactamente y qué puede hacer con uno? Lee mas ?
- ¿Qué es un kit de inicio Arduino y qué contiene? ¿Qué está incluido en un kit de inicio Arduino? [MakeUseOf Explica] ¿Qué se incluye en un kit de inicio Arduino? [Explica MakeUseOf] Anteriormente presenté el hardware de código abierto Arduino aquí en MakeUseOf, pero va a necesitar algo más que el Arduino real para construir algo a partir de él y comenzar realmente. Arduino "kits de inicio" son ... Leer más
- Más componentes geniales para comprar con su kit de inicio 8 Más componentes geniales para sus proyectos Arduino 8 Componentes más geniales para sus proyectos Arduino Por lo tanto, está pensando en obtener un kit de inicio Arduino, pero se pregunta si habrá algunos LED y resistencias básicos. suficiente para mantenerte ocupado durante el fin de semana? Probablemente no. Aquí hay otros 8 ... Leer más
- ¿Empezando con tu Arduino Starter Kit? Instalación de controladores y configuración de la placa y el puerto Primeros pasos con su Arduino Starter Kit - Instalación de controladores y configuración de la placa y el puerto Primeros pasos con su Arduino Starter Kit - Instalación de controladores y configuración de la placa y el puerto Así que, usted mismo ha comprado un kit de inicio Arduino, y posiblemente algunos otros componentes geniales, ¿y ahora qué? ¿Cómo empezar realmente con la programación de esta cosa de Arduino? ¿Cómo se configura ... Leer más
- Fritzing, una herramienta gratuita para dibujar diagramas de circuitos Fritzing: la herramienta definitiva para dibujar proyectos de electrónica [multiplataforma] Fritzing: la herramienta definitiva para dibujar proyectos de electrónica [multiplataforma] A pesar de que suena como un alcopop, Fritzing es realmente una pieza increíble. software gratuito que puede utilizar para crear diagramas de circuitos y componentes para su uso con tableros electrónicos de creación rápida de prototipos, como el fantástico Arduino de código abierto ... Leer más
- Una mirada más cercana a la estructura de una aplicación Arduino y el programa Blink de ejemplo
- Arduino Xmas tree lights project Un proyecto de Arduino: Cómo hacer adornos de luces de Navidad llamativos. Un proyecto de Arduino: Cómo hacer adornos de luces de Navidad de Navidad. Esta es la siguiente parte de nuestra serie Arduino de aprendizaje, y esta vez aprenderemos y usaremos Arrays. Para hacer un pequeño adorno de árbol de Navidad con varias secuencias de flasheo. Esto sería un… Leer más (AKA aprendiendo sobre arreglos)
- ¿Qué es binario? ¿Qué es binario? [Tecnología explicada] ¿Qué es binario? [Tecnología explicada] Dado que el binario es absolutamente fundamental para la existencia de las computadoras, parece extraño que nunca hayamos abordado el tema antes, así que hoy pensé que daría una breve descripción de qué binario ... Leer más
Hasta aquí vamos con los registros de turnos de hoy, ya que creo que hemos cubierto mucho. Como siempre, lo invito a jugar y ajustar el código, y no dude en hacer cualquier pregunta que pueda tener en los comentarios, o incluso compartir un enlace a su increíble proyecto basado en el registro de turnos..
Explorar más sobre: Arduino.