AVR Atmega164P UART / ISP-Programmiererproblem

Ich habe ein Problem mit dem USART auf einem Atmega164P. Wenn der ISP-Programmierer angeschlossen ist, funktioniert alles einwandfrei. Wenn ich den Programmierer trenne, bekomme ich nur eine verstümmelte Seriennummer und der Chip reagiert nicht auf Zeichen, die ich sende. Hier ist der Code

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 ] );
    }
}

Verschiedene Funktionen rufen sendString auf und alle funktionieren gut, bis der Programmierer getrennt wird. Dann geht nichts.

Die Verbindung zum PC ist ein USB->TTL Serial Adapter.

Auf der elektrischen Seite habe ich nach gemeinsamen Masse- / Masseschleifen, unterschiedlichen Spannungen an den Programmierstiften und anderen Eingängen gesucht, die die Programmierstifte beeinflussen könnten. Außer dem Programmierer selbst ist nichts mit den Programmierstiften verbunden.

Wir haben auch versucht, den Programmierer an ein USB-Wandladegerät anzuschließen. Dadurch funktionierte der Chip wie erwartet, ebenso wie der Anschluss an einen Laptop, der nur mit Akku betrieben wurde.

Wir haben auch die RESET-Leitung mit und ohne Pullup-Widerstand an VCC angeschlossen, keiner dieser Tests hat zu erfolgreichen Ergebnissen geführt (noch eine verstümmelte Serie erhalten).

Wird der Chip bei den entsprechenden Spannungen ausreichend mit Strom versorgt?
Wird der Chip zurückgesetzt? Der Reset-Pin hat keinen internen Pull-up und könnte schwebend sein und den Chip mitten in der Übertragung zurücksetzen.
Ich stimme @IgnacioVazquez-Abrams zu. Es hört sich so an, als würde der Chip über den ISP mit Strom versorgt. Wenn dieser also nicht angeschlossen ist, fällt die Vcc zu niedrig ab. Sie können testen, indem Sie nur die Vcc- und Masseleitungen vom ISP an den AVR anschließen. Wenn die Serie noch funktioniert, dann ist es mit ziemlicher Sicherheit ein Stromproblem. Wenn nicht, melde dich wieder, denn das wäre interessant!
@Austin Wir haben versucht, die RESET-Leitung sowohl mit als auch ohne Pullup hochzuziehen, keine Verhaltensänderung.
Ignacio Vazquez-Abrams und Bigjosh (ich werde nicht zwei von Ihnen markieren) Ich werde versuchen, nur die VCC- und GND-Leitungen im Header zu verbinden, sehen, was passiert, und lassen Sie es Sie wissen!
Stellen Sie sicher, dass der PC und der µC mit GND verbunden sind! Das Verbinden von RXD und TXD ist nicht ausreichend.
@HannoBinder TX, RX und GND sind alle zwischen dem AVR und dem USB->TTL-Adapter verbunden. Sowohl der Computer (Raspberry Pi) als auch der AVR teilen sich eine Stromversorgung, sodass auf diese Weise bereits eine gemeinsame Basis besteht. Wir haben das gleiche Verhalten sowohl mit verbundener als auch mit getrennter Masse des USB->TTL-Adapters beobachtet
+1 für eine gute erste Frage. Bitte keine Unterschriften, und Sie können sich bei denen bedanken, die antworten, indem Sie ihre Antworten positiv bewerten (nicht im Hauptteil der Frage) und die beste Antwort akzeptieren, die in den kommenden Tagen erscheint.

Antworten (1)

Das Problem wurde gelöst, indem ein 0,1-uF-Kondensator am Ausgang des 7805 hinzugefügt wurde. Dies hält die Leistung stabil und vermeidet die verstümmelte Seriennummer, die wir sahen