-
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
-
Bascom macht schon manchmal seltsame Dinge, das stimmt.
Wenn es mystisch wird, is wohl am besten, das UART Kapitel kurz auswendig zu lernen und die Register zu Fuß zu setzen.
Wenn es wirklich bei "verdrehten" Werten im UBRR klappt, dann rückzurechen, was für ein Quartz das in etwa sein müßte. bzw. abzuleiten, wo der Hund begraben sein muß.
gewissermassen "CSI" für µC
-
ok danke an alle
Hab jetzt bissl rum gespielt aber leider ohne erfolg, im gegenteil.
Jetzt geht nicht mal mehr eine baudrate von 9600.
-
oje. dann zurück an den Start :-)
Irgendwas scheint mit der µC Taktrate und daher mit der Baudrate aber zu sein.
Theoretisch kann natürlich der PC auch was haben, ein kurzer Vergleich mit einem anderen wäre halt ideal.
Um die meiste Hardware zu checken (wirkt beruhigend) solltest du hinter dem MAX232, also vor dem µC, RX und TX überbrücken. (am µC die Pins auf Input stellen.
Wen du am Terminal was tippst, müßten die Zeichen durch diesen Loopback (Echo) tadellos wieder am Schirm auftauchen.
Ist es so, kannst du Fehler in der ganzen Verbindung ausschliessen.
Keinen noch so blöden Fehler solltest du von vornhinein ausschließen, es haben auch schon Pferde gekotzt.
-
So ich hab es jetzt endlich mal getestet.
Das Loopback hat Funktioniert.
Da ich so und so was bei Reichelt bestellen muss hole ich mir gleich einen neuen Quarz und dann teste ich nochmal.
-
Jetzt sind wir aber schon richtig gespannt.
Laß' hören, wie's weitergegangen ist, wir wollen ja auch was lernen.
-
Wenn es nur darum geht die baudrate etwas anzupassen um Fehler in der Quarzfrequenz auszugleichen, kann man auch die im Programm angegebene Quarzfrequenz etwas ändern. BASCOM wird dann die UBR werte entsprechend anpassen. Es ist aber absolut unnormal das ein Quarz so falsch schwingt das die UART aus dem Takt kommt. Das die Fehler von der Baudrate abhängen (trotz "magischer" Frequenz) spricht dafür, dass auch etwas mit der Signalqualität nicht ganz optimal ist. Wenn wirklich nur die Frequenz falsch ist, sollte es bei allen Baudraten gleiche Fehler geben.
-
Ich hab ich das Überbrücken nochmal getestet.
Dabei habe ich was fest gestellt und zwar funktioniert das Loopback nur bis eine Baudrate von 38400.
Dies finde ich nicht normal.
Also hat das ganze doch nicht mit dem Quarz zutun sondern mit der Leitung.
Was kann ich da zeit tun?
-
Naja, versuch den Loopback VOR dem Max232.
1 am PC-Com-Port
2 am Com Stecker Kabel von deinem Board
3 direkt beim Max232 (rausnehmen)
Je nachdem
Eventuell nochmal MAX232 Beschaltung checken.
Um schnell hi/low umzuschalten, werden die 12V, die der MAX ja selbst erzeugen muß, doch mehr belastet
EDIT: das Gefummel mit den Loopbacks zahlt sich aus, damit man den Fehler einkreisen kann.
PC<->COMport<->Stecker<->Kabel<->Stecker<->MAX232<->µC (+boardverdrahtung)
Statistisch gesehen, sind Fehler dort deutlich wahrscheinlicher als spinnende Quartze
-
Hab das jetzt alles mal getestet und wie es aussieht ist es der MAX232 der defekt ist. Zum Glück hab ich bei Reichelt gleich paar mitbestellt.
-
was für kondensatoren haste den angeschlossen kann es vll. sein das die ein wenig zu träge sind / zu groß / zu klein / keine Ahnung was noch
-
C1 und C2 sind mit einen 10µF Kondensator bestückt.
Kondensatoren sind noch in takt.
-
in der summe sind es ja 4 kondensatoren, versuchs mal kleiner, ich verwende 4.7µF laut datanblatt sollen es sogar nur 1µF sein, vll. liegt es daran
-
Etwas größere Kondensatoren (Elkos) sollten nichts ausmachen. Wenn das normale Elkos sind, könnte es helfen bei VCC, V+ und V- jeweils noch einen 100nF keramik Kondensator dazu zu haben. Sonst könnte auch einfach das Kabel etwas lang sein.
-
So hab jetzt den MAX232 gewechselt. Das Problem besteht weiterhin.
Die Kabel länge beträgt 1,2m.
Da muss ich wohl oder übel die Kondensatoren wechseln.
//EDIT
Ich habe mal Vs+ und Vs- nachgemessen:
Vs+ = 9,13V
Vs- = 9,71V
Finde ich bissl viel
-
Für den Leerlauf, oder wenig Last ist das normal. Ungewöhnlich ist, das Vs- betragsmäßig größer als Vs+ ist. Das sollte eigentlich nicht gehen, denn Vs- wird aus Vs+ hergestellt. Das könnte auf ein Masseproblem, oder Probeleme mit den Kondensatoren an V+ bzw. Vcc deuten.
-
So ich hab es alle 10µF Kondensatoren gehen 4,7µF Kondensatoren ausgetauschten.
Und siehe da ES GEHT!
Danke schööööönnnnnnnn an alle!!!