¿Cómo ocupar un Atmega328 en vez de un Atmega328p en Arduino?

Si alguna vez quemaron el chip de su Arduino y no tienen como reponerlo, entonces están en la misma situación que yo hace algunos dias.
El Arduino UNO viene con un flamante microcontrolador de 8 bits llamada  "Atmega328p" (la mayoría ya sabe eso), el problema es cómo lo reemplazo si es que lo llego a quemar, romper, perder o vender (tal vez).
Si vamos a la tienda de nuestros proveedores favoritos (ver lista de links a la izquierda) nos daremos cuenta que ninguno posee el dichoso Atmega328p, peor aún, la mayoría no tiene el Atmega168 (también compatible con Arduino), en cambio, si tienen un llamativo "Atmega328" (Olimex, en estación metro Tobalaba lo tiene a 2500 pesos). Si bien el nombre puede parecer distinto (una p menos), internamente son muy parecidos.





ADVERTENCIA: Debes poseer un programador de AVR para seguir leyendo o no podrás seguir


Primero lo primero, qué onda la "p"

La p al final del nombre es de "picopower", es decir, el Atmega328p consume menos potencia que su versión del Atmega328 (sin "p"), quizás no pico veces menos, pero si menos, por lo tanto, si no tienes problemas energéticos, entonces esta parece ser una buena opción para el reemplazo.


Carguemos el bootloader

Puede que lo sepas, pero si no, no importa, la diferencia de un chip funcionando con un sketch cargado con Arduino y otro chip funcionando con un sketch cargado por otro compilador, es que el que funciona a base de Arduino posee un bootloader, el bootloader es una especie de mili-micro-nano-sistema operativo, que se carga al iniciar el chip, es por eso que el chip con Arduino se demora unos 2 segundos más al partir en comparación al chip que NO ocupa Arduino, luego ambos deberían tener el mismo desempeño.
Como podrás intuir, el chip que compramos no viene con bootloader (a menos que lo hayas comprado con uno desde Riab, Sparkfun o similares) por lo mismo deberemos cargarlo nosotros mismos.

Ahora bien, intenta conectar tu programador AVR a la entrada ICSP (en rojo en la foto) del Arduino y ve a
---------> Tools/Burn Bootloader/ "Elige tu versión de programador AVR"

 Obtendrás un mensaje de error como el siguiente

Expected signature for ATMEGA328P is 1E 95 0F error

Lo que ocurre es que al momento de indentificarse el chip con la placa, le entrega un nombre distinto al que espera escuchar la placa. Esta medida de autentificación de chip se hace para evitar poner el bootloader a chips para los cuales no se está diseñado el bootloader, además es una medida a nivel de AVRdude, el cual es el programa que se encarga de programar el chip, pero bueno, eso es para otra oportunidad, ahora la buena noticia, podemos hacer leso a AVRdude, de manera que piense que el Atmega328 es el Atmega328p

anda a la carpeta donde tienes guardado el programa de arduino y ve a 

--------------> hardware/tools/avr/etc

Ahí encontrarás un archivo de nombre   avrdude.conf


abre el bloc de notas y arrastra avrdude.conf al bloc de notas

Luego, ve a la linea donde diga Atmega328, para hacer esto te recomiendo apretar CTRL+B y tipear Atmega328 y luego le das a buscar, así llegarás automáticamente a la sección.

Luego baja un poco y encontrarás esta línea...

signature       = 0x1e 0x95 0x0F;  

aca, debes cambiar el último sigito 0F por 14, dejandolo así

signature       = 0x1e 0x95 0x14; 

con esto le estás diciendo a AVRdude que el chip Atmega328p entrega un nombre a Arduino de 0x1e 0x95 0x14, pero en verdad este es el nombre que entrega el chip Atmega328, pero nosotros queremos hacer creer a AVRdude que el chip Atmega328 es el Atmega328p, enredado, no?

Bueno, una vez hecho el cambio, graba y cierra. cierra también la interfaz de Arduino y abrela nuevamente, conecta tu programador de AVR (como en la foto) y anda a Burn Bootloader, ahora deberas recibir un mensaje de burning bootloader  y bla bla bla

Listo, ya está el bootloader de arduino en nuestro chip Atmega328, pero aún no terminamos, ve al archivo donde modificamos la signature y vuelvelo a como estaba antes (o sea, con 0F en vez de 14). Listo

Una cosa más, si estás utilizando un Arduino UNO, ve a Tools/Board/ y elige Duemilanove w Atmega328, es lo mismo, pero de lo contrario no podrás subir tus sketchs. Eso!!!!

Cualquier duda o consulta puedes escribir a sisalina@puc.cl

 

1 comentario:

  1. sencilla pero eficiente explicación de las diferencias entre ATmega328 y Atmega329p, gracias.

    ResponderEliminar

Comenta aquí...