Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Baudrate Problem



xeno
30.04.2008, 17:09
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?

PicNick
30.04.2008, 18:05
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.

xeno
30.04.2008, 18:26
mhh hab hier mal ein test Programm:


$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:

34
254
9
32
25%
9
32
255
9
32
"55
9
32
255
9
32
255
9
35
256
9


Oder


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?

PicNick
01.05.2008, 13:58
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)

xeno
01.05.2008, 14:53
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.

PicNick
01.05.2008, 16:45
*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

xeno
01.05.2008, 18:22
Danke für einen Tipp!

Ich habe es mal getestet:

$Baud=38400
UBRR = 24

Dann kam folgendes raus:


"@@ @@@ @@@ @@@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.

PicNick
01.05.2008, 18:50
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ß !

Besserwessi
01.05.2008, 22:34
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 ?

Ceos
02.05.2008, 10:18
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

PicNick
02.05.2008, 10:25
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

xeno
02.05.2008, 18:49
ok danke an alle

Hab jetzt bissl rum gespielt aber leider ohne erfolg, im gegenteil.

Jetzt geht nicht mal mehr eine baudrate von 9600.

PicNick
03.05.2008, 15:19
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.

xeno
05.05.2008, 14:21
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.

PicNick
05.05.2008, 14:24
Jetzt sind wir aber schon richtig gespannt.
Laß' hören, wie's weitergegangen ist, wir wollen ja auch was lernen.

Besserwessi
05.05.2008, 17:48
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.

xeno
06.05.2008, 00:04
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?

PicNick
06.05.2008, 06:55
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

xeno
06.05.2008, 07:46
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.

Ceos
06.05.2008, 10:21
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

xeno
06.05.2008, 10:39
C1 und C2 sind mit einen 10µF Kondensator bestückt.

Kondensatoren sind noch in takt.

Ceos
06.05.2008, 19:39
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

Besserwessi
06.05.2008, 21:02
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.

xeno
07.05.2008, 14:54
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

Besserwessi
07.05.2008, 16:56
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.

xeno
07.05.2008, 17:59
So ich hab es alle 10µF Kondensatoren gehen 4,7µF Kondensatoren ausgetauschten.

Und siehe da ES GEHT!

Danke schööööönnnnnnnn an alle!!!