Tabla de contenido:

Pantalla LED RGB de 64 píxeles: otro clon de Arduino: 12 pasos (con imágenes)
Pantalla LED RGB de 64 píxeles: otro clon de Arduino: 12 pasos (con imágenes)

Video: Pantalla LED RGB de 64 píxeles: otro clon de Arduino: 12 pasos (con imágenes)

Video: Pantalla LED RGB de 64 píxeles: otro clon de Arduino: 12 pasos (con imágenes)
Video: Cual pantalla usar con Arduino? 2024, Noviembre
Anonim
Pantalla LED RGB de 64 píxeles: otro clon de Arduino
Pantalla LED RGB de 64 píxeles: otro clon de Arduino
Pantalla LED RGB de 64 píxeles: otro clon de Arduino
Pantalla LED RGB de 64 píxeles: otro clon de Arduino
Pantalla LED RGB de 64 píxeles: otro clon de Arduino
Pantalla LED RGB de 64 píxeles: otro clon de Arduino

Esta pantalla se basa en una matriz de LED RGB de 8x8. Para fines de prueba, se conectó a una placa Arduino estándar (Diecimila) utilizando 4 registros de desplazamiento. Después de ponerlo a funcionar, lo permaticé en un PCB fabuloso. Los registros de desplazamiento tienen un ancho de 8 bits y se interconectan fácilmente con el protocolo SPI. La modulación de ancho de pulso se usa para mezclar los colores, más sobre eso más adelante. Parte de la RAM de la MCU se utiliza como framebuffer para contener la imagen. La RAM de video se analiza mediante una rutina de interrupción en segundo plano, por lo que el usuario puede hacer otras cosas útiles como hablar con una PC, leer botones y potenciómetros. Más información sobre "Arduino": www.arduino.cc

Paso 1: Modulación de ancho de pulso para mezclar colores

Modulación de ancho de pulso para mezclar colores
Modulación de ancho de pulso para mezclar colores

Modulación de ancho de pulso - ¿QUÉ? La modulación de ancho de pulso esencialmente enciende y apaga la energía alimentada a un dispositivo eléctrico con bastante rapidez. La potencia utilizable resulta del promedio matemático de la función de onda cuadrada tomada durante el intervalo de un período. Cuanto más tiempo permanezca la función en la posición ON, más potencia obtendrá. PWM tiene el mismo efecto en el brillo de los LED que un atenuador en las luces de CA. La tarea por delante es controlar individualmente el brillo de 64 LED RGB (= 192 LED individuales) de una manera económica y fácil, para que uno pueda obtener todo espectro de colores. Preferiblemente, no debería haber parpadeo ni otros efectos perturbadores. La percepción no lineal del brillo exhibida por el ojo humano no se tendrá en cuenta aquí (por ejemplo, la diferencia entre el 10% y el 20% de brillo parece "mayor" que entre el 90% y el 100%). La imagen (1) ilustra el principio de funcionamiento de el algoritmo PWM. Digamos que el código tiene un valor de 7 para el brillo del LED (0, 0). Además, sabe que hay un máximo de N pasos en el brillo. El código ejecuta N bucles para todos los niveles posibles de brillo y todos los bucles necesarios para dar servicio a cada LED en todas las filas. En caso de que el contador de bucle x en el bucle de brillo sea menor que 7, el LED se enciende. Si es mayor que 7, el LED se apaga. Al hacer esto muy rápidamente para todos los LED, niveles de brillo y colores base (RGB), cada LED se puede ajustar individualmente para mostrar el color deseado. Las mediciones con un osciloscopio han demostrado que el código de actualización de la pantalla toma aproximadamente un 50% del tiempo de CPU. El resto se puede utilizar para hacer comunicación en serie con una PC, leer botones, hablar con un lector RFID, enviar I2C datos a otros módulos …

Paso 2: Hablar con los registros de cambio y los LED

Hablar con los registros de cambio y los LED
Hablar con los registros de cambio y los LED
Hablar con los registros de cambio y los LED
Hablar con los registros de cambio y los LED

Un registro de desplazamiento es un dispositivo que permite cargar datos en serie y una salida en paralelo. La operación opuesta también es posible con el chip apropiado. Hay un buen tutorial sobre los registros de cambio en el sitio web de arduino. Los LED son controlados por registros de cambio de 8 bits del tipo 74HC595. Cada puerto puede generar o absorber aproximadamente 25 mA de corriente. La corriente total por chip hundido o generado no debe exceder los 70 mA. Estos chips son extremadamente baratos, así que no pague más de 40 centavos por pieza. Como los LED tienen una característica de corriente / voltaje exponencial, es necesario que haya resistencias limitadoras de corriente. Usando la ley de Ohm: R = (V - Vf) / IR = resistencia limitadora, V = 5V, Vf = voltaje directo de los LED, I = corriente deseada LED rojos tienen un voltaje directo de aproximadamente 1.8V, rango azul y verde de 2.5V a 3.5V. Utilice un simple multímetro para determinarlo. Para una reproducción adecuada del color, se deben tener en cuenta algunas cosas: sensibilidad espectral del ojo humano (rojo / azul: malo, verde: bueno), eficiencia del LED a una determinada longitud de onda y corriente. En la práctica, uno simplemente toma 3 potenciómetros y los ajusta hasta que el LED muestre la luz blanca adecuada. Por supuesto, no se debe exceder la corriente máxima del LED. Lo que también es importante aquí es que el registro de desplazamiento que impulsa las filas debe suministrar corriente a 3x8 LED, por lo que es mejor no aumentar demasiado la corriente. Tuve éxito con resistencias limitadoras de 270 ohmios para todos los LED, pero eso depende de la marca de la matriz de LED, por supuesto. Los registros de cambio están interconectados con el serial SPI. SPI = Interfaz de periféricos en serie (Imagen (1)). En oposición a los puertos en serie de las PC (asíncrono, sin señal de reloj), SPI necesita una línea de reloj (SRCLK). Luego hay una línea de señal que le dice al dispositivo cuándo los datos son válidos (selección de chip / pestillo / RCLK). Finalmente, hay dos líneas de datos, una se llama MOSI (master out slave in), la otra se llama MISO (master in slave out). SPI se utiliza para interconectar circuitos integrados, al igual que yo2C. Este proyecto necesita MOSI, SRCLK y RCLK. Además, también se utiliza la línea de habilitación (G). Un ciclo SPI se inicia tirando de la línea RCLK a LOW (Imagen (2)). La MCU envía sus datos en la línea MOSI. El registro de desplazamiento muestra su estado lógico en el borde ascendente de la línea SRCLK. El ciclo se termina tirando de la línea RCLK de regreso a HIGH. Ahora los datos están disponibles en las salidas.

Paso 3: esquema

Esquemático
Esquemático
Esquemático
Esquemático

La imagen (1) muestra cómo se conectan los registros de desplazamiento. Están conectados en cadena, por lo que los datos se pueden transferir a esta cadena y también a través de ella. Por lo tanto, es fácil agregar más registros de desplazamiento.

La imagen (2) muestra el resto del esquema con el MCU, conectores, cuarzo… El archivo PDF adjunto contiene los trabajos completos, lo mejor para imprimir.

Paso 4: código fuente de C ++

Código fuente C ++
Código fuente C ++
Código fuente C ++
Código fuente C ++
Código fuente C ++
Código fuente C ++

En C / C ++ generalmente uno tiene que crear un prototipo de funciones antes de codificarlas. # Include int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comentario * / } El IDE de Arduino no requiere este paso, ya que los prototipos de funciones se generan automáticamente. Por lo tanto, los prototipos de funciones no aparecerán en el código que se muestra aquí. Imagen (1): setup () functionImage (2): función spi_transfer () usando hardware SPI del chip ATmega168 (se ejecuta más rápido) una interrupción de desbordamiento de timer1 Piezas de código que tienen un aspecto ligeramente críptico para principiantes, por ejemplo mientras que (! (SPSR & (1 << SPIF))) {} usan los registros de la MCU directamente. Este ejemplo en palabras: "si bien el bit SPIF en el registro SPSR no está configurado, no haga nada". Solo quiero enfatizar que para proyectos estándar realmente no es necesario lidiar con estas cosas tan estrechamente relacionadas con el hardware. Los principiantes no deben asustarse por esto.

Paso 5: gadget terminado

Gadget terminado
Gadget terminado
Gadget terminado
Gadget terminado
Gadget terminado
Gadget terminado

Después de haber resuelto todos los problemas y hacer que el código se ejecutara, solo tuve que crear un diseño de PCB y enviarlo a una casa fabulosa. Se ve mucho más limpio:-) Imagen (1): placa controladora completamente poblada Imagen (2): parte frontal de la PCB desnuda Imagen (2): parte posterior Hay conectores que rompen PORTC y PORTD del chip ATmega168 / 328 y 5V / GND. Estos puertos contienen las líneas serie RX, TX, el I2Líneas C, líneas de E / S digitales y 7 líneas ADC. Está diseñado para apilar escudos en la parte posterior de la placa. El espaciado es adecuado para usar perfboard (0.1in). El cargador de arranque se puede actualizar usando el encabezado ICSP (funciona con USBtinyISP de adafruit). Tan pronto como haya terminado, utilice un adaptador en serie FTDI USB / TTL estándar o similar. También agregué un puente de desactivación de reinicio automático. También he preparado un pequeño script en Perl (ver mi blog), que permite el reinicio automático con cables FTDI que generalmente no funciona de inmediato (línea RTS vs. DTR). Esto funciona en Linux, tal vez en MAC. Placas de circuitos impresos y algunos KIT de bricolaje están disponibles en mi blog. Requiere soldadura SMD! Consulte los archivos PDF para obtener instrucciones de construcción y fuentes para matrices LED.

Paso 6: Aplicación: Monitor de carga de CPU para Linux con Perl

Este es un monitor de carga muy básico con un gráfico de historial. Se basa en un script de Perl que recopila el "promedio de carga" del sistema cada 1s usando iostat. Los datos se almacenan en una matriz que se desplaza con cada actualización. Los datos nuevos se agregan en la parte superior de la lista, la entrada más antigua se elimina. Más información detallada y descargas (código…) están disponibles en mi blog.

Paso 7: Aplicación: Hablar con otros módulos usando I²C

Aplicación: Hablar con otros módulos usando I²C
Aplicación: Hablar con otros módulos usando I²C

Esta es solo una prueba de principio y, de lejos, no es la solución más simple para este trabajo.2C permite direccionar directamente hasta 127 placas "esclavas". Aquí, el tablero del lado derecho en el video es el "maestro" (que inicia todas las transferencias), el tablero de la izquierda es el esclavo (esperando datos). I2C necesita 2 líneas de señal y las líneas eléctricas habituales (+, -, SDA, SCL). Como es un bus, todos los dispositivos están conectados a él en paralelo.

Paso 8: Aplicación: "Game Cube":-)

Solicitud
Solicitud

Solo un pensamiento extraño Este también encaja en el gabinete de madera que se muestra en la página de introducción. Tiene 5 botones en su parte trasera que pueden usarse para jugar un juego simple.

Paso 9: Visualización de imágenes / animaciones en Matrix - Hack rápido

Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido
Visualización de imágenes / animaciones en Matrix - Hack rápido

Por lo tanto, solo tiene 8x8 píxeles y algunos colores disponibles. Primero, use algo como Gimp para reducir su imagen favorita a exactamente 8x8 píxeles y guárdelo como formato sin procesar ".ppm" (no ASCII). PPM es fácil de leer y procesar en un script de Perl. El uso de ImageMagick y la herramienta de línea de comandos "convertir" no funcionará correctamente. Cargue el nuevo código arduino, luego use el script Perl para cargarlo en el controlador. El parpadeo es solo una falta de coincidencia entre la actualización del LED y la velocidad de fotogramas de mi cámara. Después de actualizar un poco el código, se ejecuta bastante rápido. Todas las imágenes se transfieren en vivo a través de serie como las ve. Las animaciones más largas se pueden almacenar en una EEPROM externa como se hace en varios tableros de radios pov.

Paso 10: Control interactivo de animaciones almacenadas

¿Por qué dejar que el microcontrolador se divierta? El culto a Arduino tiene que ver con la computación física y la interacción, ¡así que simplemente agregue un potenciómetro y tome el control! El uso de una de las 8 entradas del convertidor analógico a digital lo hace muy sencillo.

Paso 11: Mostrar video en vivo

El uso de un script de Perl y algunos módulos hace que sea bastante fácil mostrar video cuasi en vivo en sistemas X11. Fue codificado en Linux y también puede funcionar en MACs Funciona así: - obtener la posición del cursor del mouse - capturar un cuadro de píxel NxN centrado en el cursor - escalar la imagen a 8x8 píxeles - enviarlo a la placa LED - repetir

Paso 12: más luz casi gratis

Más luz casi gratis
Más luz casi gratis

Con solo dos pasos, el brillo se puede aumentar bastante. Reemplace las resistencias de 270 Ω con las de 169 Ω y coloque otro registro de desplazamiento 74HC595 en IC5.

Recomendado: