Este tutorial es una recopilación bibliográfica y también un aporte de @Alain D. En el le mostraremos como usar un Arduino UNO o MEGA para programar un ATmega328P o otra placa Arduino con el mismo MCU (microcontrolador). La placa Arduino UNO no es más que un circuito de extensión que tiene como centro al MCU AVR ATmega328P el cual podemos hacer funcionar, como todo microcontrolador, de forma independiente. Para esto, se puede escoger entre usar el oscilador interno del integrado (8 MHz o 1MHz) o una fuente de reloj externa de: 20,16,12,8,6 o 4MHz.
Al crear aplicaciones personalizadas con Arduino, a menudo es conveniente diseñar su PCB en lugar de utilizar una placa de desarrollo Arduino completa como Uno o Mega. De esta manera, puede lograr más compacidad y rentabilidad. Para aplicaciones simples que no necesitan una sincronización precisa, incluso puede prescindir de los tradicionales condensadores combinados con el cristal y usar solo un chip ATMega328 con su oscilador de baja precisión incorporado (8 MHz o 1MHz).
En este artículo, veremos cómo programar un circuito integrado (IC) ATMega328(P) con y sin cristal. La forma en que lo haremos es mediante el uso de un Arduino MEGA 2560 como programador en el sistema (ISP) para un IC virgen ATMega 328P. Sin embargo, esto también se puede hacer con otras placas Arduino, como la UNO, simplemente ajustando los pines utilizados para la comunicación ISP.
(1) Cristal dentro de la lista de valores. (20,16,12,8,6 o 4MHz)
(2) Capacitores en el rango de 18 a 22 pF.
(1) Resistencia de 10K.*
*(Es recomendado usar la resistencia para ambas configuraciones).
Para que nuestro ATmega328P funcione de forma independiente debemos conectar los pines:
*(El motivo de usar esta resistencia es para mantener una referencia de voltaje positiva pues este pin tiene como función el RESET, pero con lógica negativa.)
Y si deseamos utilizar la fuente de reloj externa se conectará, además, esta y los capacitores de la siguiente forma a los pines 9 y 10:
Por parte de la placa Arduino que se utilice para la programación (UNO/MEGA 2560) se debe hacer las siguientes conexiones de pines:
+===================+===========+=====+===========+ | Function | MEGA 2560 | UNO | AT 328P | +===================+===========+=====+===========+ | MISO | 50 | 12 | 18 | +-------------------+-----------+-----+-----------+ | MOSI | 51 | 11 | 17 | +-------------------+-----------+-----+-----------+ | SCK | 52 | 13 | 19 | +-------------------+-----------+-----+-----------+ | SS | 53 | 10 | 16 | +-------------------+-----------+-----+-----------+ | 5V | 5V | 5V | 7 and 20* | +-------------------+-----------+-----+-----------+ | GND | GND | GND | 8 and 22 | +-------------------+-----------+-----+-----------+ | Reset | 10 | 10 | 1 | +-------------------+-----------+-----+-----------+ | Heartbeat LED** | 9 | 9 | n/a | +-------------------+-----------+-----+-----------+ | Programming LED** | 7 | 7 | n/a | +-------------------+-----------+-----+-----------+ | Error LED** | 8 | 8 | n/a | +-------------------+-----------+-----+-----------+
* IC Pin 20 es AVCC. IC Datasheet recomienda conectarlo incluso si no usa señales analógicas.
** No olvide conectar el LED a través de una resistencia. Un valor típico es 220 ohmios.
*La conexión de los LEDs es opcional en ambas configuraciones ya que solo sirven para mostrar el normal funcionamiento correcto. Las resistencias de los LEDs son de 220 Ω
Al no usar un oscilador externo debe conectar los pines:
Una vez lista toda la parte electrónica, pasamos a lo que le ocupa el software y para esto debemos convertir nuestra placa Arduino (MEGA 2560/UNO) en un programador ISP, para esto:
Ahora para mayor comodidad, debemos descargar el archivo de configuración de hardware del repositorio de GitHub el cual nos va a permitir grabar en nuestro Atmega328P el bootloader* correspondiente según nuestra elección de reloj y después, para su acople en el IDE Arduino, seguiremos los pasos siguientes:
*El bootloader es el programa base, el cual nos permite la comunicación serial de nuestro ATmega328P con la PC.
Una vez hecho esto tendremos las siguientes dos nuevas opciones en nuestro IDE Arduino en Herramientas (Tools)>Placa (Board):
Entonces, pasamos a seleccionar la primera de estas dos opciones “ATmega328” y nos aparecerá nuevas configuraciones en el menú Herramientas (Tools), las cuales configuraremos de la siguiente manera seleccionando el reloj correspondiente según nuestra configuración:
¡Ahora ya está listo nuestro entorno de trabajo! Si nuestro ATmega328P no posee un bootloader de fábrica o deseamos cambiarlo para utilizar otra configuración de reloj presionaremos la opción “Quemar Bootloader (Burn Bootloader)”. Una vez grabado el bootloader a nuestro ATmega328P teniendo en cuenta si usamos o no cristal y que valor tiene, podemos ya subir cualquier proyecto.
Además, muy IMPORTANTE, para subir un sketch a nuestro ATmega328P en vez de utilizar la típica opción Subir (Upload) debemos utilizar la opción “Subir usando programador (Upload Using Programmer)” en la barra de menú: Programa (Sketch).
Además, hay que tener en cuenta a la hora de usar nuestro ATmega328P el siguiente diagrama pues mucho de los pines según nuestro entorno de IDE Arduino cambian:
Espero que leyendo el siguiente tutorial les sea más fácil programarlos
alex out
Me complace anunciar la creación de esta útil herramienta (SquidStats), para el análisis y monitoreo…
La inteligencia artificial está revolucionando las industrias al automatizar tareas, predecir patrones y permitiendo tomar…
Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…
Percona Monitoring and Management (PMM) es una herramienta de código abierto para la supervisión y…
Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…
Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…
View Comments
justamente lo que estaba buscando excelente y muchas gracias
Muchas gracias, estuve buscando un tutorial así hace mucho pero todos eran muy antiguas y no funcionaban.