UART ATMEGA32

OP #575781
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
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
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
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
@ 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

Gast #579632
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.