Tengo un problema con el USART en un Atmega164P. Cuando el programador ISP está conectado todo funciona bien. Si desconecto el programador, todo lo que obtengo es un número de serie confuso y el chip no responde a los caracteres que envío. Aquí está el código
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}
void sendString ( unsigned char str[16] )
{
int i=0;
for ( i = 0 ; i < len ( str ) ; i ++ )
{
USART_Transmit ( str [ i ] );
}
}
Las funciones variadas llaman a sendString y todas funcionan bien hasta que se desconecta el programador. Entonces nada funciona.
La conexión a la PC es un adaptador serial USB > TTL.
En el lado eléctrico, he comprobado si existen bucles comunes de tierra / tierra, diferentes voltajes en los pines de programación y otras entradas que podrían estar afectando los pines de programación. No hay nada conectado a los pines de programación, excepto el programador.
También intentamos conectar el programador a un cargador de pared USB. Esto hizo que el chip funcionara como se esperaba, al igual que conectarlo a una computadora portátil que solo funciona con batería.
También conectamos la línea RESET a VCC con y sin una resistencia de extracción, ninguna de esas pruebas arrojó resultados exitosos (aún se recibió un número de serie confuso).