Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Referencias:
Qué es el bootloader y cómo cargarlo
Cómo grabar el Bootloader Arduino en un AtMega32P
Configurar el IDE Arduino para AtMega328P con reloj interno 8 MHz
1. Objetivos
El objetivo de esta práctica es mostrar el procedimiento a emplear cuando queremos usar el C ATMega 328P de
forma independiente (standalone), fuera de una placa Arduino Uno, pero empleando el entorno de desarrollo (IDE)
de Arduino. La práctica se realizará primero haciendo funcionar el C con un oscilador que emplea un xtal externo
de 16 MHz y, en segundo lugar, empleando sólo el oscilador interno del C que trabaja a 8 MHz.
Se presupone que el C se ha comprado y a la hora de adquirirlo se puede optar por dos opciones, la primera de
ellas pidiendo el C de forma que ya viene con un bootloader para una determinada placa Arduino, por ejemplo para
Arduino Uno, y la segunda pidiendo el C sin ningún tipo de bootloader. El bootloader es un archivo hexadecimal
que se ejecuta antes que el programa del C y que permite que podamos emplear el IDE de Arduino. En caso
contrario, para programar el C deberíamos usar un programador (AVR ISP – In System Programmer) para la
arquitectura AVR que es la que tiene el C.
Nota: Según wikipedia, Atmega 328P tiene arquitectura AVR – Alf and Vegard’s RISC (The AVR architecture was
conceived by two students at the Norwegian Institute of Technology (NTH), Alf-Egil Bogen and Vegard Wollan.)
A la hora de realizar el pedido hay que elegir bien las siglas para evitar errores. El C debe ser ATMega 328P-PU.
ATMega 328P que es el C que incorpora la placa Arduino Uno y PU que dice que el encapsulado es DIP (pines a dos
lador-dual in pin). Hay que saber que el ATMega 328 es diferente del ATMega 328P (el P tienen características
adicionales como por ejemplo pico power (ahorro de energía).
2. Programación del C
La programación con la aplicación IDE de Arduino se realiza seleccionando en la aplicación tres elementos dentro del
menú Herramientas:
1. La placa (pe. Arduino Uno) para la que se desarrolla el programa facilitándonos la identificación de sus
entradas/salidas sin que nos preocupemos de los pines del C.
2. El puerto (pe. COM7) en el que se ha instalado (automáticamente) el driver que emplea el puerto USB del PC
para comunicarse con el puerto USB de la placa Arduino.
3. El programador (pe.” AVRISP mkll“ o “Arduino as ISP”) que es la aplicación que gestiona la comunicación de
los bits con la memoria del C. Recuerda que las siglas ISP significan In System Programmer, o sea
progrmación del C directamente en la placa o sistema en el que está conectado.
Además de seleccionar la placa, puerto y programador adecuados a lo que queremos hacer, el método de carga de
bits en el C supone que esos bits entran por unas determinadas líneas del C. Antes de desarrollar un programa
con el IDE de Arduino y subirlo (upload) al C, tengo que tener el C el bootloader correspondiente a la placa
Arduino que estoy simulando y por ello, aunque en ambos casos lo que hacemos es transferir datos al C, vamos a
seguir procedimientos diferentes cuando lo que queremos hacer es enviar (quemar) un bootloader, o bien enviar un
programa a la EEPROM del C.
En la práctica vamos a emplear el C de forma independiente en dos posibles configuraciones, con reloj a 16 MHz
(implica xtal externo de 16 MHz) y con reloj a 8 MHz (con el oscilador interno del C). Para emplear el IDE Arduino,
con el reloj de 16 MHz seleccionaremos una placa “Arduino Uno” que trabaja también con xtal de 16 MHz, y para la
configuración con reloj a 8 MHz seleccionaremos una placa específica “ATMega 328 on a breadboard (8MHz internal
clock)” que previamente tendremos que instalar en el IDE. Cada una de estas configuraciones supone un bootloader
diferente que hace corresponder (mapea) los pines del C a líneas de entrada/salida de la placa diferentes y, por
ello, es conveniente tener siempre en mente cuál es el pinout del C y cómo esos pines se mapean con los pines o
líneas de entrada/salida de la placa correspondiente. En las siguientes imágenes aparecen el pin out del C y la
corresponencia (mapeo) con la placa Arduino Uno (configuración con reloj a 16 MHz).
De acuerdo a cómo se emplea el ATMega 328P en la placa Arduino Uno, por ejemplo las líneas digitales 0 a 7
corresponden al puerto PD. Así los pines 2 y 3 de la placa Arduino Uno se corresponden con los pines 4 y 5 del C,
respectivamente. Esto hay que tenerlo en cuenta a la hora de programar y realizar las conexiones externas.
Para programar el C (no para quemar el bootloader) empleando el IDE de Arduino puedo hacerlo de varias formas:
El programador es el sw encargado de cargar, descargar y modificar datos en la ROM y la EEPROM del C. Según el
bootloader que tengas en el C, así tendrás que seleccionar en el IDE el tipo de placa en el menú
Herramientas>Placa.
Además de los pines que emplea el programador, tendremos que proporcionar al C la tensión de alimentación y
señal del xtal (16 MHz) por lo que tendremos que realizar las siguientes conexiones:
Paso 2. Quemas el bootloader de la placa Arduino Uno en el C que quieres inicializar. Para ello, antes tienes que
decir que el programador va a ser la placa Arduino Uno seleccionando Programador “Arduino como ISP”.
Además, si quieres funcionamiento con xtal externo de 16 MHz eliges placa “Arduino Uno” y si quieres
funcionamiento con reloj interno de 8 MHz eliges placa “
Mensaje de warning
Para cargar el programa en el C empleo el IDE de Arduino y un adapatador USB a TTL (modelo CH340C) que tiene 5
líneas Vcc, Gnd, Rx,TX y DTR. Las conexiones para realizar la programación, además de las necesarias para el C de
acuerdo a su bootloader (xtal 16 MHz externo ó reloj 8 MHz interno), son:
- Pines 7 y 20 Vcc
- Pines 8 y 22 Tierra
- Pines 9 y 10 XTAL externo
- Pin 1 RESET (a Vcc a través de una resistencia de 10K)
https://www.electroschematics.com/diy-arduino-making-your-own-arduino/
Para funcionamiento con oscilador interno de 8 MHz hay que descargarse un archivo
https://www.mediafire.com/file/yp6uf545hv4fbf7/breadboard-1-6-x.zip/file y las mínimas conexiones son:
- Pines 7 y 20 Vcc
- Pines 8 y 22 Tierra
- Pin 1 Reset (a Vcc a través de una resistencia de 10K)
https://www.youtube.com/watch?v=bzPkNGOYgx8
https://www.youtube.com/watch?v=sNIMCdVOHOM&feature=youtu.be
Ampliación.
Si quieres tener una señal de reloj externa debes modificar los fuses del C, en concreto el bit 6 del byte inferiro.
Para ello, desde una consola de comandos, leo con el programa avrdude (antes instalo en el PC la aplicación
WInAVR) los valores actuales de los bytes del C y modifico el bit ue me interesa. Al poner a 0 (programmed) el bit 6
del byte inferior lo que hago es que en el pin 14 del AtMega 328P esté presente la señal de reloj. Para comunicarme
con el C empleo la placa “Arduino Uno” como “Programador ISP” al igual que hice para grabar el bootloader. Las
conexiones entre la placa Arduino Uno y el C también son las mismas que para grabar el bootloader.
Ahora compruebo si se ha escrito el valor y al final del detalle de la salida del comando veo que así ha sido
Ahora ya puedo medir la señal de reloj en el pin 14 empleando un analizador lógico