Descripción del problema
Tengo problemas ocasionales de arranque en algunas placas con un ATmega2561. En aproximadamente el 10% (parece fluctuar mucho) el procesador no parece arrancar en el primer encendido. Solo un ciclo de encendido permite que el MCU arranque.
He investigado en línea y probado diferentes cosas. Hice varias hipótesis y las probé, pero no he podido desacreditar ninguna de ellas.
He revisado la hoja de datos varias veces pero no pude encontrar ninguna pista sobre lo que podría estar haciendo mal.
Reproducción
El problema se manifiesta de la siguiente manera:
- Enciende la energía
- El software no arranca (no hay comunicación en UART, no hay parpadeo de LED, ambos deberían ocurrir cuando el software se ejecuta.)
- Apaga la energía y espera 10 segundos
- Vuelve a encenderla
- El microcontrolador arranca
Si apago la energía por >3 minutos, el problema vuelve a aparecer. Si una placa tiene el problema, es perfectamente reproducible. Reemplazar el microcontrolador resuelve el problema.
También he revisado la energía. El microcontrolador funciona a 5V. Los 5V se encienden en unos pocos microsegundos y son sólidamente estables (verificado con un osciloscopio y multímetro en configuración Min / Max.)
Además: Puedo programar el microcontrolador a través de ISP si está en ese estado colgado.
Hipótesis
Hipótesis 1
El resonador cerámico externo no arranca debido a una configuración incorrecta de los fusibles
Pude desacreditar eso midiendo la frecuencia con un osciloscopio y configurando el microcontrolador para usar el oscilador interno R/C (que debería arrancar.)
Hipótesis 2
Algo con el circuito de reset externo
El Reset/ es alto y estable 200ms después del encendido (ese es el tiempo en que el reset externo se pone en bajo).
Hipótesis 3
El MCU está en un estado indefinido por alguna razón desconocida después del arranque
Poner el reset en bajo durante cualquier cantidad de tiempo no hizo que el microcontrolador se iniciara.
Parece que se me han acabado las ideas. Además: Esta placa tiene un cargador de arranque que uso para cargar una aplicación. Si hay una aplicación válida, el cargador de arranque inicia de inmediato la aplicación en su primera línea de código. El problema existe independientemente del estado. No inicia en el cargador de arranque ni en la aplicación. Si no es un problema de hardware, debe ser de software, pero lo único común entre la aplicación y el cargador de arranque es básicamente una línea de código C (que llama a algunas funciones para leer de la EEPROM y FLASH para verificar si hay una aplicación válida instalada.)
¿Alguien tiene alguna idea de cómo abordar este problema? ¿Podría ser un problema de software? ¿Por qué no sucede en todos los microcontroladores?
Actualización:
Como se sugirió en los comentarios, he medido AVcc en relación con Vcc durante el encendido.
El Canal 1 (amarillo) es Vcc, el Canal 2 (cian) es Aref
Eso parece ser el problema. Aref (y también AVcc) está aumentando mucho más rápido que Vcc.
¡RESUELTO! (al menos así parece)
Agregar una resistencia frente al LM7805 que crea el Aref y AVcc para limitar la corriente (y por lo tanto cargar los condensadores más lentamente) hizo que el AVcc se encendiera después de Vcc y ahora una placa que tenía el problema arranca normalmente.
AVcc (amarillo) y Aref (cian)