Paso 3: Prototipo en protoboard + programa de prueba
Por supuesto yo quería saber si esto es todo factible, así que tuve que probar unas cuantas cosas. En primer lugar, programar el ATmega sin el reloj; y segundo, prueba de la multiplexación de LED de 3 x 8.
Para empezar, revisé la Guía en la Página Web de Arduino cómo programar una independiente ATmega que es bastante completa y trabaja la mayoría del tiempo. Hay 2 pasos principales: utilizando un Arduino como programador quemar el bootloader y luego cargar el programa. Hay un retén, sin embargo, es decir si tienes un chip ATmega que ya se ha configurado para utilizar un reloj externo (por ejemplo, sacado de un Arduino), entonces la única forma de programar este chip es proporcionar una señal de reloj externo en XTAL1. Incluso si desea configurar el chip para utilizar el reloj interno más adelante, esto es un paso necesario antes de hacer cualquier cosa. Así que hay dos opciones: conectar un cristal para el ATmega; o si no tienes un cristal, también puede utilizar el programa ArduinoISP2 por Adafruit que realmente generará una señal de reloj en el pin 9. Al final elegí esta opción, ya que no tengo un cristal de repuesto que podría utilizar. Después de configurar el chip para utilizar el reloj interno, se pueden programar sin necesidad de un cristal externo, porque quemar el bootloader también establece los fusibles apropiados.
Después trabajó el bootloading, construí un pequeño prototipo en protoboard con solo 12 LEDs, sólo para ver cómo podría funcionar la multiplexación. En primer lugar he intentado mediante la función digitalWrite() , pero resultó ser demasiado lento, así que tuve que cambiarlo y establecer los registros de pin directamente. Esto es un poco más engorroso, pero afortunadamente es muy bien documentada en la Página Web de Arduino.
En primer lugar, deben definir algunas variables globales:
Y una matriz para almacenar los valores de brillo de LED:
Luego en el bucle principal, la loopCounter se incrementa en cada iteración, y su resto por 50 se compara a cada elemento de la matriz de valor , que determinará si el LED está encendido o apagado de esa iteración. Eligió a 50, porque todavía funcionó sin ningún parpadeo y ya dio una resolución lo suficientemente fina para lo que necesitaba.
En este momento acabo de probar el programa escribiendo valores en el array val para ver si funciona sin problemas, y cuando era feliz con él comencé el diseño de PCB, porque sabía fabricación llevaría algún tiempo y entonces pude terminar el resto del programa.