Atmega16 UART empfängt nicht - senden klappt

Gast #2478351
Lesenswert?

Guten Tag,

ich habe Probleme mit dem UART meines Atmega16. Er sitzt auf einem Atmel 
Evaluations-Board Version 2.0.1 von Pollin - Also 16 MHz-Quarz.

Zu den Fuses:

[marco@PC uart]$ avrdude -p atmega16 -P /dev/ttyACM0 -c stk500v2 -v -n
Reading | ################################################## | 100% 
0.03s

avrdude: Device signature = 0x1e9403
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as 89

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as 89
avrdude: safemode: Fuses OK

Loopback funktioniert. Bei jedem Reset sendet der uC ein h. Schicke ich 
über minicom jedoch etwas, tut sich am Ausgang des uC nichts.

minicom-einstellungen:

A - Serieller Anschluss : /dev/ttyS0
B - Pfad zur Lockdatei: /var/lock
C - Programm zur Rufannahme  :
D - Programm zum Wählen      :
E - Bps/Par/Bits             : 9600 8N1
F - Hardware Flow Control    : Nein
G - Software Flow Control    : Nein


Vielen Dank für Eure Hilfe und einen guten Rutsch!

Marco
Angehängte Dateien:
Gast #2478361
Lesenswert?

> Schicke ich über minicom jedoch etwas, tut sich am Ausgang des uC nichts.

Zunächst sollte sich was am Eingang tun. Wenn sich dort nix tut, hat 
der Kleine doch keine Chance! Dann müsstest du minicom überreden, 
jedes eingetipperte Zeichen direkt zu senden und nicht erst beim 
Zeilenende (Return).
Gast #2478381
Lesenswert?

Multimeter reicht. Baudrate auf PC-Seite so langsam wie möglich (bei 
1200 Baud sollte noch was zu sehen sein, bei 3ßß Baud sieht man sicher 
was) und dann die DC Spannung am Eingang gegen GND messen. Der 
Spannungspegel (Absolutwert mal außen vor) muss bei jedem Zeichen 
schwanken nicht erst nach Drücken des Return.
Gast #2478388
Lesenswert?

Dem Loopback (AVR aus der Fassung raus und Drahtbrücke zwischen RXD/TXD) 
sind 1:1 RS232 Kabel (korrekt) und Nullmodemkabel (problematisch) 
gleich.

Der Loopback testet nicht die korrekte Zuordnung der TXD/RXD Leitungen 
an die entsprechenden Pins des AVR. Die richtige Zuordnung findest du 
aber mit dem Multimeter raus.

Beim fertigen Pollingboard kann eine falsche Zurodnung praktisch fast 
nur durch Verwendung eines Nullmodemkabels entstehen. Bei 
Eigenbauschaltungen ist es schon einfacher möglich falsch zu verdrahten.
Gast #2478416
Lesenswert?

Ja, zu wenig. 1-2 mV (bei korrekter Bedienung des Multimeters: DC 
Messung Messbereich 10V oder 20V je nach Typ) sind Grundrauschen.

Da müsste bei korrekter Beschaltung ein Schwanken von HIGH (Ruhepegel um 
5V) auf LOW (um 0 V) zu sehen sein.

Zupf den AVR raus und mach Spannungsmessungen an der IC Fassung bei 
spannungsversorgtem Pollinboard. Am RXD IC-Pin muss ein HIGH Pegel zu 
messen sein und am TXD IC-Pin ein LOW Pegel.

Wenn es umgekehrt ist, kontrolliere mit dem Durchgangstester deines 
Multimeters dein RS232-Kabel, ob es 1:1 verschaltet ist (korrekt) oder 
TX/RX gekreuzt sind (falsches Kabel, Nullmodem).
Gast #2478422
Lesenswert?

Ich habe gerade das Kabel durchgepiepst. Es hat keine gekreuzten 
Leitungen, ist also ein Modemkabel, also kein Fehler.

Leider habe ich auch keinen anderen Atmega16, um ihn als Fehlerquelle 
auszuschließen. Ich probiere es morgen mal mit einem Atmega8.

Danke für die Hilfe
Gast #2478435
Lesenswert?

Ich kenne das Problem mit dem Pollin-Board. Die onboard serielle 
Schnittelle nutze ich allerdings nie. Hast Du JP1 und JP2 gesetzt (siehe 
Datenblatt)? Falls Das nicht funktioniert: Hast Du einen FTDI-Adapter? 
Falls ja, dann kannst Du direkt PD0, PD1 (Atmega16) und GND mit einem 
dünnen Draht verbinden. Das funktioniert in jedem Fall.
Gast #2478438
Lesenswert?

Ja, JP1 und JP2 habe ich gesetzt. Ich habe alles durchgepiept und die 
Pinbelegungen gecheckt. Gerade nochmal einen Backloop-Check gemacht. 
Funktioniert alles. Einen USB-Adapter für serielle Schnittstelle habe 
ich auch. Werde ich morgen auch testen, nachdem ich den Atmega8 getestet 
habe.

Danke!
Gast #2478449
Lesenswert?

> Ok, ich habe das ganze nochmal ohne uC nur an den Pins gemessen - Ohne
> Tastendruck liegen 5V an, bei Tastendruck bricht die Spannung auf 2,5V
> bis 3V ein. Denke, das ist OK.

Vermutlich OK.

Das Bitgeklapper eines Zeichens wird über die Zeit der Übertragung einen 
Mix aus HIGH und LOW erzeugen und du wirst im Mittel "2,5V bis 3V" 
messen.

Wie war die Spannung bei eingestecktem AVR und den 1-2 mV?
MOMENT da kommt mir ein Verdacht...

> int main(void)
> {
>   uart_init();
>
>   DDRD = 0xFF; // PORTC Ausgang
>   USART_Transmit('h');

Hör' mal auf, bei der DDRD Zuweisung nach der UART-Initialisierung und 
bei der Ausgabe von c an dem RXD (PD0 = Pin14 beim Atmega16) zu 
fummeln :-)

Es wäre wesentlich geschickter, wenn du c nicht auf PORTD schickst, 
sondern z.B. auf PORTC wie im Kommentar angedeutet (dann aber die JTAGEN 
Fuse disablen).

Alternativ maskiere bei den DDRD und PORTD Zugriffen die PD0 und PD1 
Pins aus (Bitmanipulation).
Gast #2479284
Lesenswert?

Hallo :) ich habe den gleichen Code auf einen Atmega8 auf demselben 
Board geladen und dort läuft er. Vermutlich funktioniert der UART vom 
Atmega16 tatsächlich nicht mehr vollständig.

Vielen Dank für Eure Hilfe :)
Gast #2479300
Lesenswert?

Hey Krapao... Du hattest recht :D Ich habe damit ja den gesamten Port 
als Ausgang definiert... dann funktioniert natürlich der UART nicht mehr 
:(

Jetzt klappts auch mit dem Atmega16 :D

Danke danke danke
Gast #2479452
Lesenswert?

Hi

>Hey Krapao... Du hattest recht :D Ich habe damit ja den gesamten Port
>als Ausgang definiert... dann funktioniert natürlich der UART nicht mehr
>:(

Stimmt nicht. Datenblatt (Alternate Port Functions):

RXD, Receive Data (Data input pin for the USART). When the USART 
Receiver is enabled this pin is configured as an input regardless of the 
value of DDD0.

Und TXD wird auch automatisch zum Ausgang wenn TXE gesetzt wird. Du 
brauchst dich also nicht um die Datenrichtung von TXD/RXD kümmern.

MfG Spess
Gast #2480240
Lesenswert?

Spess53 hat recht. Die Definition am Ausgang hat nichts mit der Sache zu 
tun. Es war vielmehr das Flachbandkabel, welches ich in das Pollinboard 
gesteckt hatte, um es mit dem Addon-Board zu verbinden. Selbst wenn nur 
das Flachbandkabel mit offenem Ende eingesteckt ist, funktioniert die 
Übertragung mit UART nicht mehr. ich werde nun das Flachbandkabel 
testen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren