En antiguos microcontroladores había que usar complejos y caros programadores para volcar código y probarlos, y para volver a usarlos había que borrar sus EPROM con luz ultravioleta o utilizar voltajes elevados y así reprogramarlos. El microcontrolador Atmega328P que se utiliza en Arduino tiene, como muchos en la actualidad, la posibilidad de programar con el voltaje habitual de uso, 5V en el caso de Arduino UNO. El prototipado es en la actualidad mucho más sencillo y barato gracias a estas nuevas plataformas. En algún momento hay que pasar del prototipo al circuito final sin tener que usar la placa para prototipado que es Arduino.
Este artículo explica cómo usar un microcontrolador Atmega328P en un circuito bá,sico independiente de la placa de Arduino.
La magia de Arduino está en su bootloader. Es un pequeño código almacenado en su memoria que se ejecuta al arrancar y que se encarga de leer datos por su puerto serie y almacenarlo en la memoria flash. Nos permite cargar nuestro propio código sin necesidad de usar un programador externo. Los Atmega328P se pueden adquirir a bajo precio, pero en la mayoría de los casos no poseerán el bootloader. Si no lo trae, lo primero que tendremos que hacer es cargar el bootloader en el microcontrolador. La buena noticia es que podemos hacerlo con la ayuda de la propia placa Arduino.
Esta es la lista de materiales necesaria:
- Arduino UNO.
- Protoboard.
- Un Atmega328P (atención: el Atmega328 es distinto).
- Cristal 16MHz (tipo HC49S)
- Dos capacitores cerámicos de 22pF.
- Dos resistores: 1K y 10K
- Cables
La distribución de pines del microcontrolador Atmega328P es:
Para que el Atmega328P funcione, lo mínimo necesario es conectar sus pines 7 y 20 a VCC (5V) y los 8 y 22 a tierra. Aunque el Atmega328P puede funcionar con un oscilador de reloj interno de 8MHz, sin bootloader no será posible activarlo, de modo que se debe usar un cristal externo de 16MHz, que se conecta a los pines 9 y 10, con sus dos capacitores de desacople (dos cerámicos de 22pF). Si se dispone de un resonador a 16MHz se puede usar en lugar del oscilador y no se necesitan los dos capacitores.
Finalmente el circuito queda así:
El programa que escribirá el bootloader requiere mínimas conexiones: una al pin de Reset (con la resistencia de 10K) y tres a los pines 13, 12 y 11.
El circuito montado en la protoboard queda así.
Con el Arduino conectado al PC y el entorno de desarrollo de Arduino ejecutándose, seleccionamos en el menú "Archivo": "Ejemplos > Arduino ISP".
En el menú "Herramientas": "Programador > Arduino as ISP."
Y finalmente, también en el menú "Herramientas", seleccionamos "Grabar secuencia de inicio".
Sólo nos queda pulsar el botón para cargar el código en el microcontrolador (el botón de la flechita hacia la derecha). Si todo va bien, nuestro Atmega328P ya tiene grabado su bootloader y está listo para que podamos cargar nuestro programa en él.
Podríamos insertarlo en el zócalo de una placa Arduino y programarlo normalmente, y después ponerlo de nuevo en la protoboard. Sin embargo, es mejor programarlo directamente en la protoboard conectando los pines TX y RX a la placa Arduino. ANTES HAY QUE QUITAR EL Atmega328P DE LA PLACA ARDUINO.
El conexionado quedará así:
NÓTESE que el Arduino NO TIENE el Atmega328P en su zócalo: está vacío.
Ahora a programarlo. Para hacer las cosas simples, usamos el programa de ejemplo "Blink" que trae el entorno de desarrollo. Está en el menú "Archivo > Ejemplos > Basic > Blink".
Cambiamos el programador en "Herramientas > Programador > AVR ISP".
Pulsamos entonces el botón que indica el cursor (flechita) para cargar el programa.
Finalizado el ciclo habitual, el código está grabado en el microcontrolador. Cada vez que lo alimentemos con 5V lo ejecutará.
El programa Blink hace parpadear un led de la placa Arduino que está conectado al pin 13. En este caso, necesitamos un LED, así que tendremos que ponerlo con una resistencia de 1K en la protoboard para poder probar el programa.
El montaje definitivo se muestra en la fotografía al principio del artículo.
Se alimenta externamente con una fuente estable de 5V capaz de entregar 500 mA o mayor. Es posible que deseemos alimentar con un voltaje superior no regulado o con baterías, y para eso es necesario agregar en este montaje algún tipo de regulador de voltaje a 5V como los 7805.
Si todo está correcto, el led comenzará a parpadear gracias a este circuito mínimo basado en el Atmega328A.