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 una serie distorsionada y el chip no responderá a los caracteres que envíe. 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 ] );
}
}
Varias funciones 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 USB->TTL Serial.
En el lado eléctrico, he comprobado si hay tierra común/bucles de tierra, diferentes voltajes en los pines de programación y otras entradas que podrían estar afectando los pines de programación. Nada está conectado a los pines de programación excepto el propio 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 funciona solo con batería.
También conectamos la línea RESET a VCC con y sin una resistencia pullup, ninguna de esas pruebas arrojó resultados exitosos (aún recibió una serie distorsionada).
El problema se resolvió agregando un capacitor de .1uF en la salida del 7805. Esto mantiene la energía estable y evita la serie distorsionada que estábamos viendo.
Ignacio Vázquez-Abrams
austin
gran josh
scottinthebooth
scottinthebooth
jimmyb
scottinthebooth
adam lorenzo