UART ATMEGA32

OP #575781
Lesenswert?
• ▲
▼
Hallo,

ich versuche vom µC an den PC nacheiander folgende Integers zu senden:

512
1023
5
21
30
512
915
400

Funktioniert prinzipiell auch, nur leider kommen völlig andere Zahlen im 
Terminal-Programm an:

88
245
132
37
244
133
77
68
245
86
244
132
244

Komisch ist ja schonmal, dass es 13 Zahlen sind statt 8. Der größte Wert 
scheint die 245 zu sein. Was passiert da?

PS: Ich habe das Senden per UART nach dem Tutorial implementiert.

MFG

Daniel
Gast #575788
Lesenswert?
• ▲
▼
Hi Daniel,

das sieht sehr nach einer nicht übereinstimmenden Baudrate aus.
Also Dein ATMEGA32 sendet nicht mit der Baudrate, die Du im Terminal
eingestellt hast. Weiter können Anzahl der Stopbits und ein unterschied-
liches Paritybit der Fall sein.
Diese Einstellungen solltest Du nochmal prüfen.
Für die Baudrate im ATMEGA solltest Du prüfen, ob der ATMEGA-CPY-Takt
stimmt, dann die Baudratenregister richtig gesetzt sind.
Im Terminalprogramm natürlich auch prüfen, ob diese Parameter
richtig eingestellt sind.

Wenn Du ein Scope hast, kannst Du es an die Sendeleitung des
ATMEGAS anschließen. Wenn Du kontinuierlich ein 'U' (0x55) sendest und 
mit
1 Stopbit und keinem Parity arbeitest, dann ist auf dem Scope
ein Rechtecksignal zu sehen. Bei 9600 Baud ist die Dauer eines
Bits, also von einer Flanke zur nächsten 1,041msec.

Viel Erfolg
Joachim
Gast #575796
Lesenswert?
• ▲
▼
erst mal arbeitet eine UART immer nur Byteorientiert, grössere 
Datentypen als ein char bestehen also aus mehreren Bytes. Die Uart 
selbst kann also keine Integers versenden, dass ist von der 
Sende-Software auf einzelne Bytes aufzudröseln und beim Empfänger wieder 
richtig zusammenzusetzen.

512
1023
5
21
30
512
915
400

Wenn man den jeweils kleinsten möglichen Datentyp nimmt, kommt man dabei 
auf exakt 13 Bytes :-)
Die Werte passen aber nicht zu den empfangenen.
Was genau hast du auf MC- und PC-Seite gemacht? Ohne genauere Infos kann 
man nur Rätselraten.
Gast #576081
Lesenswert?
• ▲
▼
habe auch mal probleme mit oben beschriebenem verhalten gehabt -> bei 
mir warens falsch gesetzte fusebits (ext. crystal xMHz - xMHz, CLKOPT, 
...)

einen genauen grund hab ich damals im datenblatt nicht finden können 
??!?


Neubi
Gast #576531
Lesenswert?
• ▲
▼
@ crazy horse
@  Willi Wacker

Zu euren Anmerkungen, daß in ein Byte nur 255 dec. reinpassen.....
Ist schon richtig. Habt ihr schon mal ein Terminalprogramm
gesehen, das die empfangen Binärdaten also ein Byte umwandelt
und in dezimal ausgibt???? Ich noch nicht. Also wenn man
ein Byte mit 65 dec. überträgt, wird im Terminal nie 65 angezeigt
sondern ein 'A', weil 65 der code für das 'A' ist.

Also nehme ich an, das Daniel eine ASCII Übertragung vornimmt.
Da kann man dann auch "1888" in 4 Bytes packen.

Joachim

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