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.
METODO 1: USANDO CRISTAL EXTERNO
Listado de materiales:
(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:
- 7, 20 a VCC (5V)
- 8, 22 a GND
- 1 En serie a 10K hacia VCC*
*(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.
METODO 2: USANDO OSCILADOR INTERNO
*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:
- SS (16)
- MOSI (17)
- MISO (18)
- SCK (19)
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:
- Seleccionaremos la opción “Arduino as ISP” en: Herramientas (Tools) -> Programador (Programmer).
- Y luego subiremos el sketch a nuestra placa Arduino (MEGA 2560/UNO) llamado “ArduinoISP” que viene junto con nuestro IDE Arduino y se localiza en: Archivo (File) -> Ejemplos (Examples).
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:
- Crear una carpeta nombrada “hardware” en la carpeta de manejo de sketch de nuestro IDE Arduino (Normalmente se localiza en \Documentos\Arduino en Windows) .
- Copiar el contenido de nuestro archivo descargado de GitHub a la carpeta recién creada “hardware”.
- En caso de tener abierto el IDE Arduino, cerrarlo y volverlo a abrir para que se carguen las nuevas configuraciones.
*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
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
justamente lo que estaba buscando excelente y muchas gracias
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Muchas gracias, estuve buscando un tutorial así hace mucho pero todos eran muy antiguas y no funcionaban.