Forum: Mikrocontroller und Digitale Elektronik UART- seltsamer Empfang


von Martin F. (martin-f)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe mir mal das UART Tutorial angeschaut und wollt einfach mal von 
'nem ATmega8 ein paar daten an den PC senden.
Als Terminal nutze ich Br@yterminal, da ich am Hyperterminal nicht 
rausgefunden habe, wie ich dort daten senden/empfangen kann.
Leider empfange ich statt der gesendeten Zeigen folge T e s t ! <10> 
<13> nur irgendwelchen Kauderwelsch (genaugenommen ´¹7ÉÔþ bzw in Hex 
ausgedrückt A4 B9 0E 27 C9 D4 FE).
Daraufhin hab ich mir mal die werte von 0-0xff zugeschickt, heraus kam 
die folgende Sequenz (als hes):

80 20 C0 10 B0 C8 74 42 25 8A 01 C8 E4 7A 41 91 49 02 B1 A4 BA 21 99 0D 
03 F4 F2 7D 80 28 C4 12 B2 49 9A 21 99 15 15 C9 B2 3D 90 FF 80 20 C0 10 
B0 C8 74 42 25 8A 01 C8 E4 7A 41 91 09 02 B1 A4 BA 61 99 0D 03 F4 F2 7D 
80 28 C4 12 B2 49 9A 21 89 15 05 C9 B2 3D 90 2C C6 93 CA 59 97 9C 2E C7 
E2 75 9E 02 85 A2 08 B4 CA 75 81 A9 65 09 DA 65 9D B0 34 CA 95 B5 B9 B7 
AC 36 CB E5 B5 BE 05 C5 A2 0C B6 CB DD A8 3A CD CB D5 AE 0B E5 B2 0E B7 
F9 B7 BC 3E CF F1 BD BF 01 C1 41 10 B8 CC 76 43 C9 45 11 CC E6 7B D0 24 
D2 99 B6 B3 C7 CC 36 D3 E6 EB DE 06 8B C2 14 BA 4D 9B C8 2A D5 CD AB CE 
0D CB D2 16 BB D3 D7 DC 2E D7 E3 DD DF 03 E1 61 18 BC CE 77 43 E9 65 19 
DE E7 7B F0 34 DA 9D B7 F6 1D D7 FA 1B F7 FE 07 E1 71 1C BE CF 77 E8 3A 
DD CF ED F7 0F F1 79 1E BF F6 1F F9 7D 1F FD 7F FF

Immerhin wird 0xff richtig übermittelt, aber das ist eigentlich nicht 
das, was ich mir vorgestellt habe. Leider kann ich da auch keine 
regelmäßigkeit entdecken. Hatjemand 'ne Idee, woran das liegen könnte? 
Ich häng das .asm File zur erzeugung der werte noch mal mit an.

EDIT:
ich bin mit der Fehler suche etwas weitergekommen: bis zu einer Baudrate 
von 4800 funktioniert es einwandfrei, ab 9600 baut er Mist. Woran kann 
das liegen? Kabellänge evtl? (ca 1 Meter) oder was sind sonst die 
stürprobleme bei RS232?

von Kai (Gast)


Lesenswert?

Wie sieht denn deine Hardware aus? Speziell im Bereiches des MAX232!?!

von Matthias (Gast)


Lesenswert?

naja,
soll:              00 01 02 03 04 05 06
Anzahl 1-Bits      00 01 01 02 01 02 02
IST                80 20 C0 10 B0 C8 74
Anzahl 1-Bits      01 01 02 01 03 03 04

Ich denke, das ist ein Baudraten/ANzahl Stopp/Paritybits Problem.
Ich würde dir mal raten, diese Einstellungen zu prüfen.
Wahrscheinlich stimmt die Baudrate im Atmel nicht. Entweder du hast dich 
beim Setzen von UBRR vertan, oder der µC-Takt stimmt nicht mit dem, was 
du zur Berechnung genommen hast. Kommt gern beim interne Oszillator 
vor...
Ich denke das wird der Fehler sein...

von Martin F. (martin-f)


Lesenswert?

@Kay
Die Schaltung um den max232 ist nach Tutorial/Datenblatt aufgebaut. ein 
max232 cpe, 5 elkos a 1µF, unverpolt eingebaut. 1M kabel zw PC und 
Max232, 10 cm zwishen max232 und µC. Ich hab nur noch 'nen 
abblockkondensator am max232 zugefügt (100nF)

@Matthias
Die einstellungen hatte ich auch erst vermutet, bin aber der meinung, 
alles richtig eingestellt zu habem:
im Terminal:
8 Datenbits, 1 Stopbit, kein Parity, kein Handshake. Baudrate gleich der 
Baudrate im µC
im µC:
entsprechende Baudrate, interner Oszi bei 1MHz, Programm aus dem UART 
Tutorial  (Clock auf 1000000 geändert, schleife zum ausgeben der Zeichen 
zugefügt) Abder auch das unveränderte Tutorial Prog liefert nicht test! 
zurück

Hat vielleicht jemand von Euch mal Lust, das Tutorial Prog auf 'nen µC 
zu laden? Dann könnt ich 'nen Hardwarefehler Ein/Ausschliessen 
Irgendjemand hat bestimmt irgendwo 'nen Mega8 o.ä. mit 'ner seriellen 
Schnittstelle rumfliegen, oder?
Link zum Tutorial:
https://www.mikrocontroller.net/articles/AVR-Tutorial:_UART

Vielen Dank für eure nächtliche Hilfe

von Karl H. (kbuchegg)


Lesenswert?

Martin F. wrote:
>
> entsprechende Baudrate, interner Oszi bei 1MHz,

Kauf dir einen Quarz.
interner Oszi kann funktionieren, muss aber nicht.

Wenn auf der Gegenstelle irgendwas ankommt heist das, das
der MAX232 und das Kabel OK sind aber die Baudrate nicht stimmt.

Vielleicht ist es dir nicht aufgefallen:
Du schickst 256 Bytes weg, am PC werden aber 257 Bytes
empfangen. Ein klares Indiz, dass mit dem Timing was nicht
stimmt. Der µC ist anscheind ein klein bischen zu langsam.
Dein internen Oszi wird also nicht 1Mhz machen, sondern
vielleicht nur 900kHz oder 950kHz.

>
> Hat vielleicht jemand von Euch mal Lust, das Tutorial Prog auf 'nen µC
> zu laden?

Das funktioniert.


von Martin F. (martin-f)


Lesenswert?

Da bin ich noch mal,
Ich vermute, das liegt tatsächlich am internen RC Oszi. Hab den mal auf 
4MHz hochgeschraubt, und bekomme dadurch nun eine Baudrate von 19200 
hin. Werd mir bei gelegenheit mal 'nen Quarz anschaffen und mal schauen, 
was dann dabei rauskommt. Was mir noch aufgefallen ist, wenn ich den 
internen RC Oszi auf 4* so schnell mache, bekomme ich auch eine 4* so 
hohe fehlerfreie baudrate. Ob ich daraus was schließen kann, weiß ich 
noch nicht, mal schauen.

Ein weiteres testen ergab, dass bei 4MHz zwar die Baudrate 19200 
funktioniert, aber 14400 nicht. Ich vermute das Problem vielleicht auch 
in der berechnung von dem UBRR wert, dass da durch Rundung probleme 
reinkommen, denn bei 14400 ist der gerade mal bei 0x10, da macht +-0,5 
durch runden schon recht viel aus. Bei 4MHz und 14400 Baud sind es z.B. 
0,361, die durch Runden wegfallen, bei 19600 Baud nur 0,02083. 
Dementsprechend besser oder schlechter funktioniert dann auch die 
syncronisierung...

Vielen Dank für eure Tips. Vielleicht sollt man noch mal empfohlene 
Baudraten zu entsprechenden Taktfrequenzen einfügen.

von Stefan (Gast)


Lesenswert?

> Ich vermute das Problem vielleicht auch in der Berechnung von dem UBRR
> Wert, dass da durch Rundung Probleme reinkommen, denn...

Du hast ein wesentliches Merkmal des UARTs experimentell herausgefunden.

Du kannst das auch im Datenblatt des µC nachlesen. Dort sind im UART 
Kapitel Tabellen drin, bei denen der typ. Baudratenfehler in 
Abhängigkeit von Baudrate und Taktrate angegeben ist.

von Michael Wilhelm (Gast)


Lesenswert?

>Vielleicht sollt man noch mal empfohlene Baudraten zu entsprechenden 
>Taktfrequenzen einfügen.

siehe Examples of Baud Rate Settings im Datenblatt.

MW

von Falk B. (falk)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#Senden

Damit es nicht noch tausend solcher Threads gibt.

MfG
Falk

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.