Forum: Mikrocontroller und Digitale Elektronik UART ATMEGA32


von Daniel G. (sirdaniel)


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

von Ha Jo (Gast)


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

von crazy horse (Gast)


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.

von Willi W. (williwacker)


Lesenswert?

Um es nochmals deutlich zu sagen:

1023 passt nicht in ein  Byte, da passt maximal 255 rein.

Der mega kann auch 9 bits, damit kommt man dann auf 511 (aber das können 
die wenigsten Terminalprogramme).

Ciao
Willi

von Neubi (Gast)


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

von Ha Jo (Gast)


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


von Marc B. (__marc)


Lesenswert?

> Habt ihr schon mal ein Terminalprogramm
> gesehen, das die empfangen Binärdaten also ein Byte umwandelt
> und in dezimal ausgibt???? Ich noch nicht.

http://www.der-hammer.info/terminal/hterm.zip

HTERM gibt binär, dezimal, hex und ascii aus.
Man kann ebenso in bin, dez, hex und ascii senden.
Ein sehr schönes Programm...

Gruß
Marc

von Michael U. (Gast)


Lesenswert?

Hallo,

@Hans-joachim Borchers:
dann muß er sich wohl hier genauer ausdrücken...

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

Gruß aus Berlin
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.