Detector de firma de chip y cargador de bootloader

Unos amigos me regalaron un atmega328p y me advirtieron que ya tenía bootloader grabado. Pero no estaban seguro de a que frecuencia de cristal, ni si usaba oscilador interno o externo. Para colmo de males yo no tengo en estos momentos cristales compatibles para usar. Por lo que tendría que usar mi breadboard y probar unas cuantas combinaciones con distintos cristales para hacerlo funcionar. Este tuto lo escribí porque pase tremendo trabajo para lograr que funcionara como quería y quiero mostrarle como lo hice. Primero que todo agradecer enormemente a Andy Abreus Reyes (AKA @AAR96) por mostrarme cómo hacerlo.
Como ya señalé no poseo cristales para mi proyecto (ardutester) por lo que mi prioridad será grabar un bootloader al Atmega328p para que use su oscilador interno. Ante todo, probé grabar un código suponiendo que mi Atmega estaba usando un oscilador interno y que tenía un bootloader. Como la tarea fue infructuosa entonces decidí grabarle un nuevo bootloader. Para lograrlo usaremos unas herramientas creadas por Nick Gammon que podemos encontrar en su github.

Atmega Board Detector: Esto usa un board de Arduino para detectar la firma, los fusibles y el cargador de arranque de otro. Solo algunos Arduinos son compatibles para ejecutar el código. Ha sido probado en Arduino Uno, Mega2560 y Leonardo.

Atmega_Board_Programmer: Esto volverá a flashear el bootloader en los chips seleccionados. Solo algunos Arduinos son compatibles para ejecutar el código. Ha sido probado en Arduino Uno, Mega2560 y Leonardo.

Existen más herramientas en su github pero nos centraremos en estas dos solamente. Lo primero que haremos será revisar por curiosidad y por salir de dudas si nuestro atmega328p realmente tiene un bootloader. ¿Pero cómo lograremos esto sino poseemos ningún cristal para que nuestro Atmega funcione?

Aquí es donde entra el primer TIP de este tutorial, según la web de Nick Gammon debemos usar un reloj alterno. Como alternativa a un cristal o resonador, el código del Atmega Board Detector también genera un reloj de 8 MHz en el pin D9 de la placa de programación del Arduino (usando el temporizador 1). Por lo tanto, solo necesita conectar D9 en la placa de programación de Arduino a XTAL1 de la placa de destino (Atmega328p) y esto proporcionará una señal de reloj, lo que permitirá que se ejecute este código.

Con este reloj generado por nuestro Arduino UNO/MEGA que funcionara como programador podemos ya trabajar sin la necesidad de usar un cristal con el Atmega328p. Ahora les muestro como deben de quedar nuestras conexiones para lograrlo.

En la siguiente foto conectaremos el oscilador que genera nuestro Arduino programador para ya terminar la configuración que usaremos.

Para tener una mejor idea les dejo el pinout del Atmega328p

Descargamos del github las herramientas de Nick Gammon.

La descomprimimos y abrimos la carpeta Atmega_Board_Detector una vez allí damos doble click sobre Atmega_Board_Detector.ino y nos cargara el código en nuestro IDE

Previamente ya hemos fijado las opciones para nuestra placa de Arduino en mi caso un Arduino UNO por el COM4 y subimos el código. El código funciona usando el monitor serie a 115200 baud por lo que lo abrimos y fijamos esa velocidad. Enseguida veremos toda la información de nuestro chip.

Como se ve en la salida el Atmega328p que me regalaron si tenía un bootloader grabado como me especificaron. Ya aclarada la duda procedemos a grabarle un bootloader al Atmega328p. Abrimos la carpeta Atmega_Board_Programmer una vez allí damos doble clic sobre Atmega_Board_Programmer.ino y nos cargara el código en nuestro IDE.

Previamente ya hemos fijado las opciones para nuestra placa de Arduino en mi caso un Arduino UNO por el COM4 y subimos el código. El código funciona usando el monitor serie a 115200 baud por lo que lo abrimos y fijamos esa velocidad. Abrimos el monitor serie y nos mostrara la información de nuestro Atmega328p pero más resumida y se quedara esperando por nuestra respuesta a que bootloader le programaremos al Atemga.

LilyPad usando 8 Mhz de reloj interno (L) o usando 16 Mhz de reloj externo (U)

A lo que responderemos escribiendo la letra L en el monitor serie y le damos al botón de Enviar. Acto seguido se grabará el bootloader LilyPad en nuestro Atmega. La salida luce así:

Bueno ya tenemos listo nuestro Atmega328p para usarlo y como plus sin un cristal externo. Ahora solo queda subirle el código del proyecto que queramos en mi caso (ardutester). Ahora viene el segundo TIP del tutorial, para subirle un codigo a nuestro Atmega lo podemos hacer de varias formas.

Usando un FTDI Serial TTL-232 USB Cable como se explica en la web de Nick Gammon en el punto Programming a sketch. Método que no usare porque no poseo el conversor de TTL a USB. Así que usaremos el método que ya está explicado en este blog. Solo tendremos que hacer unos cambios en el cableado. Eliminamos el cable que va de D9 del Arduino UNO al pin 9 (clock) del Atmega328p puesto que ya no lo necesitamos pues nuestro Atmega ahora trabaja con su oscilador interno. Subimos a nuestra placa Arduino UNO el codigo de usarlo como programador ISP que viene como ejemplo (Archivo/Ejemplos/11.Arduino ISP). Previamente ya hemos fijado las opciones para nuestra placa de Arduino en mi caso un Arduino UNO por el COM4 y subimos el código. Ahora como nuestro Arduino UNO es el programador y queremos programar el Atmega328p que ahora tiene un bootloader LilyPad debemos cambiar en el IDE nuestro tipo de placa, que ahora es LilyPAD. Seleccionar el tipo de Atmega y el puerto que en este caso es el COM 4 donde esta nuestro Arduino UNO en modo programador.

Cargamos en el IDE el código del Ardutester y usaremos la opción de subir usando programador para cargar nuestro código al LilyPad.

Como se observa en la figura el código subió correctamente y ya nuestro Atmega328p con bootloader Lilypad tiene cargado el código de Ardutester y listo para ser usado. Finalmente los dejo con una foto del Ardutester funcionando con el Atemga328p y 8 resistencias solamente.

Espero les sirva de ayuda y lo saque de apuros.

Alex out

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.2 / 5. Recuento de votos: 5

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Alexander Rivas Alpizar 61 artículos
Administrador de Redes EMPRESTUR Cienfuegos

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.