Problema con Bootloader Microcontrolador Atmega328P

Hola Buenas Tardes, soy Nicolás, necesito ayuda con algo que me está ocurriendo con mi microcontrolador atmega328p. Lo que sucede es que yo hice un proyecto para el final de un curso de robotica con arduino e hice una PCB capaz de utilizar un atmega328p para dejarla fija en mi proyecto, esta placa yo la programaba mediante ISP, con las mismas conexiones como cuando quemas el bootloader. Lo que me ocurre es que el programa no se ejecuta, o eso entiendo yo, porque saqué ese microcontrolador y lo reemplaze con el del arduino original y ahí si se ejecuta. Entonces puse el microcontrolador viejo en la placa arduino y al conectarle la corriente el led del pin 13 no parpadea, sino que se queda prendido. Esto me da a entender que no funciona el bootloader, pero intenté volver a quemarlo y nada. No se que hacer. Olvidé aclarar que al cargarle un nuevo programa o quemar el bootloader al micro mediante ISP no me dá ningun error Disculpen si no me expliqué bien o no está bien redactado estoy algo apurado porque me estoy por ir a la secu.

Moderador:
Bienvenido al Foro Arduino en Español.
Por favor, lee las Normas del foro y edita el título.
El foro solo brinda ayuda asi que titulos como el tuyo "Ayuda con..." estan de mas.
Modifícalo para que quedo como se permite.

Coloca un esquema de cómo esta cableado el ATmega328p.
Dices que le subes el bootloader y no te da error, pero al ponerlo en pcb del arduino si funciona.
Ese arduino del que hablas de qué tipo es? Es un original o clon?

Hola ¿de donde sacas el programa que grabas en el chip de la pcb?, no lo entiendo.
Creo que primero tienes que cargar el bootloader en el chip de la pcb y luego cargar en ese chip, (convertido en Arduino), el programa compilandolo con el IDE.
saludos.

Bien creo que me expliqué mal, lo que intento decir es que yo estaba haciendo un curso de róbotica con Arduino y necesito un proyecto final de curso, así que se me ocurrió una idea, pero yo no quería dejar una placa arduino instalada allí para siempre, así que decidí investigar como es el conexionado del integrado atmega328p, luego lo realicé en protoboard, lo testee y me puse a diseñar una PCB con proteus (Adjunto foto del esquema y de la pcb), luego de eso realice el método de planchado, soldé los componentes, lo ensamblé y estaba listo para funcionar. En el momento que lo probé en protoboard le cargué el bootloader mediante las conexiones ISP, después descubrí en el IDE de arduino que existía una opción que servía para escribir programas en cualquier microcontrolador de la serie AVR utilizando otro Arduino (Adjunto fotos de las conexiones y de la configuración del IDE), así que agarré mi Arduino Uno Rev 3 Original y me dispuse a programar, primero subí un programa testeando todos los componenetes que funcionó perfectamente, luego al día siguiente intento subir otro programa y nada, no funciona, sube perfectamente pero no funciona, intento investigar el google, pero no encuentro nada, entonces se me ocurre retirar el microcontrolador que compré y le puse a mi PCB y reemplazarlo por el Original de la placa Arduino Uno y ahí comnezo a funcionar perfectamente, entonces digo, que raro que le pasa a este micro, agarro le micro que previamente había retirado de mi PCB y lo conecto a la placa Arduino Uno, allí es cuando me doy cuenta que el bootloader está defectuoso, ya que al conectarlo al USB de la computadora este enciende pero el led del pin 13 queda encendido y no hace el típico parpadeo que indica que el bootloader se cargó correctamente, (aunque ahora que lo pienso en algún lugar leí que el parpadeo provenía del controlador USB y no del micro). (Adjunto archivos correspondientes):

El siguiente código es el que ambos microcontroladores tienen cargados:

#define buzz 2

void setup(){
  pinMode(buzz, OUTPUT);
}

void loop(){
tone(buzz, 1000, 100);
delay(500);
noTone(buzz);
delay(500);
}








image

ARDUINO - Google Drive (VIDEOS DE FUNCIONAMIENTO)

Pude volver a cargar el bootloader y ahora el micro si funciona, pero ahora descubrí algo nuevo, con el micro original de la placa arduino mi proyecto funciona, en cambio cuando le conecto el que yo compre ahí no funciona. Y si le conecto a mi placa arduino el que yo compre allí si funciona, no entiendo que esta sucediendo ahí. Lo único que se me ocurre es que el bootloader que le estoy cargando es para funcionar con el oscilador interno de 8MHZ o que la placa arduino original posee algun otro componenete que permita que si funcione.

Logre hacerlo funcionar reinstalando el bootloader, logré cargar algunos programas y luego dejo de funcionar nuevamente, no entiendo que esta sucediendo la verdad.

Bien creo que tengo una hipotesis, creo que para poder cargar un programa y el bootloader a otro atmega328p debe conectarese los 5v del arduino y no utilizar alimentación externa.

Poco importa quien da los 5v, lo que si es imprescindible es que esten unidas las GND.
Y sinceramente me tienes echo un lio y no se que has hecho y como tienes los chip.
Yo haria lo siguiente:

  • 1º Con el chip del arduino, colocado en el arduino, (esperemos siga vivo), cargale el bootloader al chip nuevo segun este ARTICULO. Pero ojo en una protoboard porque cualquer cosa conectada al chip, (como parece ser que estas haciendo por las fotos), podria dar fallos en la grabacion.
  • 2º (A) Colocaria el nuevo chip con el bootloader correctamente cargado en el arduino. compila y carga el programa como haces normalmente, comprueba que funciona, sacalo y colocalo en la pcb. Tiene que funcionar en la pcb por narices.
  • 2º (B). si no quieres marear mas el chip del arduino, (lo mas prudente), una vez echo lo expuesto en punto uno, y sobre la misma protoboard, realiza el metodo expuesto en este VIDEO para cargar el programa, coloca ahora el chip en tu pcb.Tambien deberia dar resultado.

Ya nos contaras. Saludos.

Hola, muchas gracias por la ayuda, lo de los 5v yo pense lo mismo, es solo un hipótesis no comprobada, ahora mismo esta funcionando correctamente, logré cargar el bootloader , lo que está conectado a los pines 13,12,11 es el keypad, por lo que yo intuyo no debería causar problemas ya que son switches abiertos. Y la forma en la que se carga el programa realmente no la entendí como aplicarla a mi caso, ya que en mi PCB no tengo un controlador UART. La forma que estoy utilizando es mediante ISP con otro arduino y la opcion "subir usando programador". Tal vez suba un video explicando como funciona así es mas entendible que por texto.

Cierto, el segundo metodo no es viable si no tienes la UART, pero el primero si.

¿Entonces se ha solucionado el problema?
Saludos.

Si probablemente si, voy a seguir experimentado y voy a comprobar si obtengo otros fallos. Cualquier novedad lo cuento.

5 de septiembre 2021 - 1:30 a.m. (Actualización):

--->Hubo momentos en el que la placa funcionó 
      correctamente pero actualmente ya no 
      funciona.

--->Ya no puedo ni cargar el bootloader porque 
      me dá error de [device signature = 0x000000]


--->Nueva hipótesis, estuve investigando y ese 
      código de error equivale a que las conexiones 
      están mal o que el oscilador no funciona. En mi 
      caso las conexiones no están mal, incluso en la 
      descripción avanzada de cuando se carga el 
      bootloader se ve como dice "Oscilator: off". 
      Una de mis hipótesis de más arriba decía que 
      capaz era un problema con los osciladores. Así
      que es muy probable de que sea eso. De esta 
      manera se explicaría porqué cuando 
      conectaba el micro comprado al placa de 
      arduino si funcionaba y cuando lo conectaba al 
      PCB no.

Ahora me iré a dormir y mañana veré si puedo conseguir un cristal de 16 MHz y lo vuelvo a conectar.

Mi experiencia me dice que cada vez que cargas un programa via ISP se borra el bootloader. Así que si quieres funcionar solo hay solo dos opciones:

  • Grabar el bootloader y programar via UART.
  • Grabar siempre por ISP.

Estuve leyendo y si, al cargar el programa por ISP el bootloader se borra, pero ahora parece ser que mi chip esta muerto. Porque no es capaz de ser quemado el bootloader o subir el programa mediante ISP. Leí algo de los fuses, que todavía no entiendo que son, decía que podían llegarse a bloquear o algo así y tendría que usar un programador de 12V para poder reestablecerlos. Descarto totalmente que sea culpa del oscilador.

Bien aún no descubro que lo causó pero mi microcontrolador murió. Talvez estaba defectuoso cuando lo compré, o cuando lo soldé a la PCB (porque antes de tener la PCB que tengo puesta había hecho otra distinta, luego la rehíce, desoldé el chip y le puse un zócalo). Igual muchas gracias por la ayuda.