-
Baudrate Problem
Hallo,
Mega32 @ 14,745600 MHz
Ich habe ein Problem mit der Baudrate. Bei einer Baudrate bis 28800 läuft alles super nur was drüber geht Funktioniert es nicht mehr.
Laut dieser Tabelle http://www.gjlay.de/helferlein/avr-uart-rechner.html sollte eine Baudrate von 115.2k kein Problem sein.
An was kann das liegen?
-
Du mußt auch sicher sein, daß du innerhalb einer Bitbreite die Zeichen aus der UART wegräumen kannst, sonst klappt es natürlich auch nicht.
-
mhh hab hier mal ein test Programm:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 14745600
$baud = 38400
Print "34"
Print "254"
Print "9"
Print "32"
Print "255"
Print "9"
Print "32"
Print "255"
Print "9"
Print "32"
Print "255"
Print "9"
Print "32"
Print "255"
Print "9"
Print "32"
Print "255"
Print "9"
Print "35"
Print "256"
Print "9"
End
Der Terminal spürt dann das aus:
Code:
34
254
9
32
25%
9
32
255
9
32
"55
9
32
255
9
32
255
9
35
256
9
Oder
Code:
34
54
9
ªªBPÊjPš’jP’jRÊjRšjR’ªjRÈjR’jRªªjPÊj˜’jP’ªªjRÊJPšªHP’ª²jRŠjRþ
An was kann das liegen?
-
Ah, ja. Vergiß, was ich bis jetzt gesagt habe.
DAS ist ein typischer Baudratenfehler
gehäufte Sonderzeichen deuten darauf hin, dass der Sender ein zu schnell ist (weil das Stop-bit noch als 2^^7 interpretiert wird).
Seltsam, daß am Anfang ein paar Zeichen um ein Haar noch zu stimmen scheinen, erst dann kommt stabiler Schrott.
Fragen
1 das ist ja irgendein gängiges Terminal-Programm ?
2 normales (PC) COm-Port oder irgendein USB/RS232 Fuzzy ?
3 µC Quartz korrekt (mit 22 µF) verdrahtet
3 µC Fuses irgendwie mystisch ?
Is leider so mit Kommunikationsproblemen. Wenn zwei sich nicht verstehen, kann es genauso sein,
daß der eine undeutlich nuschelt
oder daß der andere hörbehindert ist. (ganz schlimm: beides)
-
Erst mal danke für die schnelle Antwort.
zu 1: getestet mit Bascom Terminal, HTerm und mit eigenen Terminal
zu 2: Normaler COM Anschluss
zu 3: Ja
zu 4: Fuses sind für meine Begriffe korrekt.
-
*murmel,murmel*
Tscha, Ohne Gewähr (passieren kann aber nix):
NACH der $BAUD= anweisung setze mal andere Werte in das UBRR Register
In deinem Fall (Quartz & 38k4 Baud) sollte er ja "23" reinschreiben (ev. mit Simulator überprüfen --> Register display), kann aber auch "47" sein
Schreib ev. einfach mal
UBRR = 24 (oder höher), dann sollte er langsamer werden.
Ist nur ein Versuch, und kann nur helfen, wenn du mit dem QUartz Pech hast und er etwas höher schwingt von wegen Toleranz.
Dein Programm oben ist ja recht übersichtlich, da kann ja nix falsch sein.
Ich weiss nicht, ob der MAX232 bei irgendwelchen Fehlern sowas produzieren könnte, glaub' eher nicht.
Very strange, geht alles ein wenig in ein esoterisches Bereich, da ist dann ALLES möglich
EDIT: sollte das wirklich was helfen, dann solltest du einen anderen Quartz versuchen
-
Danke für einen Tipp!
Ich habe es mal getestet:
$Baud=38400
UBRR = 24
Dann kam folgendes raus:
Code:
"@@ @@@ @@@ @@@0@@@ @@@ @ @@ø
Habe dann mal bissl mit der UBRR Einstellung rum gespielt und bei UBRR=22
hat es dann Funktioniert.
Und das kann jetzt am Quarz liegen?
//EDIT
Hab das mal mit einer hören Baudrate probiert aber da geht es gar nicht.
-
Wenn man das Bit setzt für "Double-Speed" UCSRA (das Bit heißt U2X), hast du höhere Zahlen, da geht es vielleicht besser einzustellen
(dein normalwert wäre dann UBRR=47 für 38400)
(--> Mega-Datasheet)
Aber immerhin, das Ganze zeigt, daß der Quartz nicht genau schwingt.
Ist wohl besser, du probierst einen anderen, das ist ja kein Leben, weil ja so auch kein Timer mehr genau ist.
Also, viel Spaß !
-
Man sollte eventuell man mit 2 Stoppbits probieren. Mit nur einem Stopbit kann es ziehmlich lange dauern um den Empfänger wieder syncron zu kriegen. Wenn der Enpfänger schlecht ist, kann es sogar passieren, das der Empfänger das komplettte stoppbit abwartet und dann aus dem Takt kommt wenn der Sender nur etwas schneller ist.
Bei den hohen Baudraten müssen auch die Pegelwandler und Kabel dafür geeignet sein. Eigentlich sollten die Tolleranzen von Quarzen bei weitem nicht so groß sein, das es bei der UART probleme geben kann. Das müßte schon versehnetlich ein föllig falscher Quarz (z.B. 13 MHz sein). Im Prinzip könnte die UART Frequenzfehler bis fast 10 % vertragen. Der wird aber Aufgeteilt für den Sender, Empfänger (Frequenz und Quatisierung) und Unsicherheiten durch die Treiber und Kabel.
Könnte es sein der M32 gar nicht mit dem Quarz läuft, sondern immer nich den internen RC Oszillator nimmt ?
-
hm also ich verstehe leider nciht viel von bascom, aber ich hatte etwa denselben effekt als ich mit 8N2 gesendet habe das terminal aber nur auf 8N1 eingestellt war, bis zu ner gewissen geschwindigkeit hat der COM Port das noch gefressen, aber manchmal isser ausm takt gekommen, vor allem wenn die baudrate hoch war