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?
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...
@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
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.
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.
> 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.
>Vielleicht sollt man noch mal empfohlene Baudraten zu entsprechenden >Taktfrequenzen einfügen. siehe Examples of Baud Rate Settings im Datenblatt. MW
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.