Tabla de contenido:

Uso de un LED de matriz de puntos con un Arduino y Shift Register: 5 pasos
Uso de un LED de matriz de puntos con un Arduino y Shift Register: 5 pasos

Video: Uso de un LED de matriz de puntos con un Arduino y Shift Register: 5 pasos

Video: Uso de un LED de matriz de puntos con un Arduino y Shift Register: 5 pasos
Video: Arduino y 74HC595 con LEDs | Registro de Desplazamiento | Sponsor LCSC 2024, Noviembre
Anonim
Usando un LED de matriz de puntos con un Arduino y Shift Register
Usando un LED de matriz de puntos con un Arduino y Shift Register
Usando un LED de matriz de puntos con un Arduino y Shift Register
Usando un LED de matriz de puntos con un Arduino y Shift Register
Usando un LED de matriz de puntos con un Arduino y Shift Register
Usando un LED de matriz de puntos con un Arduino y Shift Register

El LED de matriz de puntos Siemens DLO7135 es una pieza asombrosa de optoelectrónica. Se factura como una pantalla inteligente de matriz de puntos de 5x7 (r) con memoria / decodificador / controlador. Junto con esa memoria, tiene una pantalla ASCII de 96 caracteres configurada con mayúsculas y minúsculas, un generador de caracteres y multiplexor integrados, cuatro niveles de intensidad de luz y todo funciona con 5V., y a $ 16 cada uno, definitivamente debería. Mientras pasaba la mitad del día en mi tienda local favorita de productos electrónicos, encontré un contenedor lleno de estos por $ 1.50 la pieza. Salí de la tienda con varios. Este instructivo le mostrará cómo conectarse a estos LED de matriz de puntos y mostrar caracteres usando un Arduino basado en AVR. Si ha leído alguna de mis guías anteriores, puede tener la idea de que a menudo estoy a favor de la solución más parsimoniosa, y no se equivocaría, incluso si no logro alcanzar la meta de vez en cuando.. Por lo tanto, también daré otro paso en este instructivo y le mostraré cómo puede reducir la cantidad de puertos de E / S necesarios para manejar estos grandes LED de matriz de puntos.

Paso 1: Obtenga los productos …

Obtenga los productos …
Obtenga los productos …

Para este pequeño proyecto, necesitará:

  • un microcontrolador basado en AVR como un Arduino o cualquiera de su tipo. Estas instrucciones probablemente podrían adaptarse a su MCU de elección.
  • un LED de matriz de puntos DLO7135 u otro de la misma familia
  • un registro de desplazamiento de 8 bits como 74LS164, 74C299 o 74HC594
  • una placa de pruebas
  • alambre de conexión, cortadores de alambre, etc.

No se necesita un soldador, aunque utilizo uno más tarde; puedes arreglártelas sin él.

Paso 2: conéctese directamente a la pantalla LED

Conéctese directamente a la pantalla LED
Conéctese directamente a la pantalla LED
Conéctese directamente a la pantalla LED
Conéctese directamente a la pantalla LED
Conéctese directamente a la pantalla LED
Conéctese directamente a la pantalla LED

Diseñe su pequeña lista de piezas y agarre el LED. Colóquelo en la placa de pruebas centrado un poco, a ambos lados de la ranura de la línea media. La primera parte de la conexión tiene lugar en el lado izquierdo del LED. El pin # 1 está ubicado en la parte superior izquierda como lo indica el triángulo / flecha. Puse las funciones de los pines en una imagen para su referencia mientras lee o conecta su LED.

El lado izquierdo

Positivo y Negativo Comenzando en la parte superior izquierda, conecte Vcc a 5V. Quizás sea una buena idea no tener la placa encendida hasta que haya completado todo el lado izquierdo; el LED puede ser brillante si está tratando de ver pequeños agujeros para pinchar los cables. Conecte el GND inferior izquierdo a tierra. Prueba de lámpara, habilitación de chip y escritura La segunda y tercera desde la parte superior izquierda son Prueba de lámpara y habilitación de chip. Ambos son de lógica negativa, lo que significa que están habilitados cuando están en un 0 lógico en lugar de 1. Mi imagen de abajo debería tener barras sobre ellos, pero no anoté eso para ninguno de ellos. El pin LT cuando está habilitado ilumina cada punto en la matriz de puntos con un brillo de 1/7. Es más una prueba de píxeles, pero lo interesante del pin LT es que no sobrescribe ningún carácter que esté en la memoria, por lo que si tiene varios de estos encadenados (tienen una distancia de visualización de 20 pies), estropee LT puede hacer que parezca un cursor. Para asegurarse de que esté deshabilitado, conéctelo a 5V. Los pines CE y WR también son de lógica negativa y deben estar habilitados para que se escriba en este dispositivo inteligente. Puede microgestionar estos pines con puertos de E / S de repuesto en su microcontrolador, pero no nos molestaremos aquí. Simplemente conéctelos a tierra para mantenerlos habilitados. Niveles de brillo Hay cuatro niveles de brillo programables en la familia de LED DLO:

  • Blanco
  • 1/7 brillo
  • 1/2 brillo
  • Brillo total

BL1 HIGH y BL0 LOW es 1/2 brillo. Ambos ALTO es brillo total. Ajústelo a lo que quiera. Nuevamente, si tiene puertos de E / S de sobra y es lo suficientemente importante para usted, esto también puede ser controlado por su Arduino. Eso envuelve el lado izquierdo. Si le da energía a su tablero, debería ver que el LED se enciende. Juega con los controles de brillo y la prueba de la lámpara para familiarizarte con él, si tienes curiosidad.

El lado correcto

El lado derecho consta completamente de puertos de datos. La parte inferior derecha, el pin 8 o D0 para ser precisos, representa el bit menos significativo en el carácter de 7 bits. La parte superior derecha, el pin 14 o D6 representa el bit más significativo. Esto le permite saber en qué orden mezclar sus bits al escribir en el LED. Cuando tenga los puertos de entrada de datos conectados, busque siete puertos de E / S digitales vacíos en su Arduino o AVR y conéctelos. Probablemente querrá recordar qué puerto de salida de datos en su AVR va a qué puerto de entrada de datos en el LED. Ahora está listo para enviar algunos datos a ese LED inteligente. ¿Todavía estás temblando de emoción? Sé quien soy…

Paso 3: especificar un carácter que se mostrará

Especificación de un carácter que se mostrará
Especificación de un carácter que se mostrará

El conjunto de caracteres que se usa en este LED CMOS es su ASCII común y corriente que comienza en 0x20 (decimal 32; un espacio) y termina en 0x7F (decimal 127; una eliminación, aunque se representa en el LED como un gráfico de cursor). Entonces, hacer que el LED muestre un carácter no implica nada más que presionar un 1 o 0 lógico en sus pines de salida de datos, generalmente seguido de un pulso WR, pero lo dejo para este ejercicio. recordó qué pines van a qué puertos, ¿verdad? Elegí PD [2..7] y PB0 (pines digitales 2 a 8 en Arduino-speak). Normalmente no sugiero usar PD [0..1] porque lo dedico a mi comunicación serial de regreso a una caja FreeBSD, y Arduino's et al. asigne esos pines a su canal de comunicación FTDI USB, y aunque "ellos" DICEN que los pines 0 y 1 funcionarán si no inicializa la comunicación en serie, nunca he podido usar esos pines como E / S digitales normales. De hecho, pasé dos días tratando de depurar un problema cuando intenté usar PD0 y PD1 y descubrí que siempre eran ALTOS. * encogerse de hombros * Probablemente sería bueno tener algún tipo de entrada externa, como tal vez un teclado, una rueda de empuje o un interruptor de ruedecilla, o tal vez incluso una entrada desde un terminal (mi ArduinoTerm no está listo para el horario de máxima audiencia todavía…). La decisión es tuya. Por ahora, solo voy a ilustrar cómo obtener el código para obtener el carácter que desea en el LED. Hay un archivo zip para descargar que incluye el código fuente y Makefile y también hay una película corta que muestra el LED imprimiendo su conjunto de caracteres. Perdón por la mala calidad del video. El código de abajo imprime la cadena "¡Bienvenido a mi Instructable!" luego recorre todo el conjunto de caracteres que admite el LED.

DDRD = 0xFF; // SalidaDDRB = (1 << DDB0); char msg = "¡Bienvenido a mi Instructable!"; uint8_t i; for (;;) {for (i = 0; i <27; i ++) {Print2LED (msg ); _delay_ms (150); } para (i = 0x20; i <0x80; i ++) {Print2LED (i); _delay_ms (150); } Print2LED (& apos * & apos);}La salida del puerto se cuida en la función Print2Led ()

voidPrint2LED (uint8_t i) {PORTD = (i << 2); si (i & 0b01000000) PORTB = (1 <

El código y Makefile se incluyen en un archivo zip a continuación.

Paso 4: Conserve los puertos de E / S con un registro de cambios

Conserve los puertos de E / S con un registro de cambios
Conserve los puertos de E / S con un registro de cambios
Conserve los puertos de E / S con un registro de cambios
Conserve los puertos de E / S con un registro de cambios
Conserve los puertos de E / S con un registro de cambios
Conserve los puertos de E / S con un registro de cambios

Así que ahora nuestro microcontrolador puede enviar datos al LED de matriz de puntos, pero utiliza ocho puertos de E / S. Eso excluye el uso de un ATtiny en un paquete DIP de 8 pines, e incluso con un Arduino más nuevo con un ATmega328p que tiene muchos puertos de E / S para un LED. Sin embargo, podemos evitar esto mediante el uso de un IC llamado registro de desplazamiento. Un momento para "cambiar" de marcha … Un registro de cambio se puede entender mejor si se piensa en las dos palabras que componen su nombre: "cambio" y "registro". La palabra cambio se refiere a cómo se mueven los datos a través del registro. Aquí (como en nuestro Arduino y microcontroladores, en general) un registro es una ubicación que contiene datos. Lo hace implementando una cadena lineal de circuitos lógicos digitales llamados "flip flops" que tiene dos estados estables que pueden ser representados por un 1 o un 0. Entonces, al juntar ocho flip flops tienes un dispositivo que es capaz de sostener y representando un byte de 8 bits. Así como hay varios tipos de flip flops, y varias variaciones en un tema de registros de turno (piense en los contadores ascendentes / descendentes y contadores Johnson), también hay varios tipos de registros de turnos basados en cómo los datos está bloqueado en el registro y cómo se emiten esos datos. En base a esto, considere los siguientes tipos de registros de turno:

  • Entrada serie / salida paralela (SIPO)
  • Entrada / salida serie (SISO)
  • Entrada / salida en paralelo (PISO)
  • Entrada / salida paralela (PIPO)

Dos notables son SIPO y PISO. Los registros SIPO toman datos en serie, es decir, un bit tras otro, desplazando el bit introducido anteriormente al siguiente flip flop y enviando los datos a todas las entradas a la vez. Esto lo convierte en un buen conversor de serie a paralelo. Los registros de desplazamiento PISO, a la inversa, tienen entradas paralelas, por lo que todos los bits se ingresan a la vez, pero salen uno a la vez. Y lo adivinaste, esto lo convierte en un buen convertidor de paralelo a serie. El registro de desplazamiento que queremos usar para reducir la cantidad de pines de E / S nos permitiría tomar esos 8 pines de E / S que usamos anteriormente y reducirlos a uno, o tal vez solo a un par, considerando que es posible que necesitemos controlar cómo ingresamos los bits. Por lo tanto, el registro de desplazamiento que usaremos es un Serial In / Parallel Out. Conecte el registro de cambio entre el LED y Arduino Usar un registro de cambio es fácil. La parte más difícil es solo visualizar los pines de salida de datos y cómo los dígitos binarios terminarán en el IC, y cómo eventualmente aparecerán en el LED. Tómate un momento para planificar esto. 1. Conecte 5V al pin 14 (arriba a la derecha) y lleve el pin 7 (abajo a la izquierda) hasta el suelo. El registro de desplazamiento tiene dos entradas en serie, pero solo usaremos una, así que conecte el pin dos a 5V3. No usaremos el pin transparente (usado para poner a cero todas las salidas) así que déjelo flotando o atáquelo a 5V4. Conecte un puerto de E / S digital para anclar uno del registro de desplazamiento. Este es el pin de entrada serial 5. Conecte un puerto IO digital al pin 8 (abajo a la derecha). Este es el pin del reloj 6. Conecte sus líneas de datos de Q0 a Q6. Solo usamos 7 bits porque el conjunto de caracteres ASCII solo usa siete bits. Usé PD2 para enviar mis datos en serie y PD3 para la señal de reloj. Para los pines de datos, conecté Q0 a D6 en el LED y continuando de esa manera (Q1 a D5, Q2 a D4, etc.). Dado que estamos enviando datos en serie, tendremos que examinar la representación binaria de cada carácter que queremos enviar, mirando 1 y 0, y emitiendo cada bit en la línea serie. He incluido una segunda versión de la fuente dotmatrixled.c junto con un Makefile a continuación. Recorre el conjunto de caracteres y muestra todos los caracteres pares (si es extraño pensar que una letra puede ser par o impar, piense en la representación binaria por un momento). Trate de averiguar cómo hacer que se muestre cíclicamente a través de la visualización de todos los caracteres impares. Puede experimentar más con las conexiones entre el registro de desplazamiento, el LED de matriz de puntos y su Arduino. Hay varias funciones de control entre el LED y el registro que pueden permitirle ajustar su control sobre cuándo se muestran los datos. Así que … ¡hemos pasado de tener que usar ocho puertos de E / S a usar solo dos!

Paso 5: resumen

Resumen
Resumen
Resumen
Resumen

En este instructivo, he presentado el LED de matriz de puntos DLO7135 y cómo hacerlo funcionar. Además, discutí cómo reducir la cantidad de puertos de E / S requeridos de ocho a solo dos usando un registro de desplazamiento. El LED de matriz de puntos DLO7135 se puede unir para crear marquesinas muy llamativas e interesantes. ¡Espero que te hayas divertido leyendo este instructivo! Si hay alguna mejora que crees que podría hacer o sugerencias que te gustaría dar en este o en cualquiera de mis ibles, ¡me alegra escucharlos! ¡Feliz AVR!

Recomendado: