Estoy usando un ATmega64A para mi proyecto con ESP8266 y RFM75. Pero el ATmega64 se cuelga en el encendido y tengo que hacer un reinicio bajo para que mi código funcione. Estoy usando un cristal externo de 8 MHz.
He conectado correctamente todos los pines VCC y GND con capacitores de 0.1 µF en cada PIN de VCC. El pin RESET se tira alto con resistencias de 10 kΩ y los condensadores de 10 µF están conectados entre RESET y GND (también he probado condensadores de 0.1 µF).
Necesito algún tipo de ayuda para salir de este problema. Todos los comentarios o sugerencias serán apreciados.
EDIT 1: Mi esquema adjunto aquí.
HemedidoelniveldevoltajeenRESETPINenlacondicióndeencendido.
EDIT2:SoloelcódigodeparpadeodelLEDfuncionabienenelmismohardware,lohecomprobadotantasvecesalencender/apagarlaalimentación.Locódigotienealgunosproblemas.Estoytratandodeaveriguarlo.
EDIT2:HeencendidoelcódigodeparpadeodelLEDsimpleenelinicioantesdeiniciarESP8266oRFMInitialization.Tambiéntengounaopcióndedepuraciónenmicódigo.ATmega64UART1seutilizacomoterminaldedepuración.HeintentadoparpadearLEDantesdelainicializacióndedepuración.Ledparpadeantefuncionacomoelencanto!Tengounafunciónenelterminaldedepuraciónparaimprimirelbannerenelinicio.Imprimelafechayhoradelascausasdecompilaciónyreinicioyunaversióndelcódigo.Cuandohecomentadolafunción,micódigocomenzóafuncionarbien.Heprobadomuchasvecesendiferentestablerosporelproblemadesaparecidodesdeentonces.Aquílafunciónqueheeliminado.
staticvoidPrintBanner(void){unsignedcharstatus=MCUCSR;unsignedcharmoreThanOne=0;printf_P(PSTR(CMD_LINE_MSG_WELCOME));printf_P(PSTR("Firmware: v%S [Compiled on "__DATE__" "__TIME__"]\r\nBoot cause: "), PSTR(APP_VERSION));
if(status & (1 << PORF))
{
printf_P(PSTR("Power On"));
MCUCSR &= ~(1 << PORF);
moreThanOne = 1;
}
if(status & (1 << EXTRF))
{
if(moreThanOne)
printf_P(PSTR(", "));
printf_P(PSTR("External"));
MCUCSR &= ~(1 << EXTRF);
moreThanOne = 1;
}
if(status & (1 << BORF))
{
if(moreThanOne)
printf_P(PSTR(", "));
printf_P(PSTR("Brown-out"));
MCUCSR &= ~(1 << BORF);
moreThanOne = 1;
}
if(status & (1 << WDRF))
{
if(moreThanOne)
printf_P(PSTR(", "));
printf_P(PSTR("Watchdog"));
MCUCSR &= ~(1 << WDRF);
moreThanOne = 1;
}
if(status & (1 << JTRF))
{
if(moreThanOne)
printf_P(PSTR(", "));
printf_P(PSTR("JTAG"));
MCUCSR &= ~(1 << JTRF);
moreThanOne = 1;
}
printf_P(PSTR(" Reset.\r\n"));
}
¿Cuál sería la causa del problema de RESTABLECIMIENTO del ATmega64 con este código? ¿Se debe a la obtención de datos de la memoria del programa para imprimir sobre UART? Todavía estoy tratando de ir a la causa raíz de este problema. Si alguien tiene alguna idea sobre esto amablemente arroje algo de luz sobre esto. Gracias.