Problema del programador AVR Atmega164P UART / ISP

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 chip recibe suficiente corriente con los voltajes apropiados?
¿Se está reiniciando el chip? El pin de reinicio no tiene pull-up interno y podría estar flotando, reiniciando el chip en medio de la transmisión.
Estoy de acuerdo con @IgnacioVazquez-Abrams. Parece que el chip se alimenta a través del ISP, por lo que cuando se desconecta, el Vcc está cayendo demasiado bajo. Puede probar solo conectando el Vcc y las líneas de tierra del ISP al AVR. Si la serie todavía funciona, es casi seguro que sea un problema de energía. Si no, repórtalo porque sería interesante.
@Austin intentamos levantar la línea RESET con y sin un pullup, sin cambios en el comportamiento.
IgnacioVazquez-Abrams y bigjosh (no me deja etiquetar a dos de ustedes) Intentaré conectar solo las líneas VCC y GND en el encabezado, veré qué sucede y les avisaré.
¡Asegúrese de que la PC y el µC tengan GND conectados juntos! Conectar RXD y TXD no es suficiente.
@HannoBinder TX, RX y GND están todos conectados entre el AVR y el adaptador USB->TTL. Tanto la computadora (Raspberry Pi) como el AVR comparten una fuente de alimentación, por lo que ya existe un terreno común de esa manera. Observamos el mismo comportamiento con la tierra del adaptador USB->TTL conectada y desconectada
+1 por una buena primera pregunta. Sin firmas, por favor, y puede agradecer a quienes respondan votando a favor de sus respuestas (no en el cuerpo de la pregunta) y aceptando la mejor respuesta que aparezca en los próximos días.

Respuestas (1)

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.