PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Baudrate und Frequenz



Spurius
03.02.2005, 11:19
Hallo,
ich hab ne Frage zur seriellen Kommunikation, und zwar, kann ich mit 16Mhz AVR-Takt z.B. mit 9600 Baud senden oder geht das nicht?
Bisher hats so einigermaßen mit 38400? Baud bei 16 Mhz geklappt, nur ne niedrigere Senderate wäre mir lieber.
Gruß
Spurius

PicNick
03.02.2005, 11:46
Würde sagen, langsamer geht immer. CAVE: ganz listige Kompiler drehen beim Ändern der Baudrate auch an der Einstellung Start - Bits - Stop
'rum, hab' ich gehört. 8N1 ist das Übliche. mfg

Spurius
03.02.2005, 12:35
Hm, wie meinst du das mit den Compilern? Also bei mir hat das nicht funktioniert, einfach ne niedrigere Baud anzugeben.

PicNick
03.02.2005, 13:07
Nicht böse sein, ich muß das fragen: Hast Du deinem terminal auch erzählt, daß du die Baudrate änderst ?
Welchen Compiler verwendest du, bzw. wie gibst du die Baudrate an ?
mfg

JanB
05.02.2005, 20:01
Hallo,
kann ich mit 16Mhz AVR-Takt z.B. mit 9600 Baud senden oder geht das nicht? Na klar, kein Thema.
Ein Blick in das Handbuch deines AVR-Chips hilft da Wunder.
Beim AtMega-8 zum Beispiel ist die Formel für
den Wert der UBBR-Register: ubbr=(fosc / (baudrate * 16))-1
fosc ist in deinem Fall 16MHz.

für 9600 Baud ergibt sich damit der Wert 103,
der in das Register UBBRL eingetragen werden muss.
dann noch eine 0 in das UBBR-Register, und ab sofort
läuft der USART mit 9600 Baud.

Gruß Jan

Spurius
05.02.2005, 20:49
Hey cool, danke!

Spurius
17.02.2005, 14:25
Also, habs ausprobiert und es klappt.
UBRRL=103
UBBRH=0
Nun würde mich noch interessieren, wie du darauf kommst? Ich hab mir jetzt mal das Datenblatt angeschaut, wo steht, dass man ubbrl mit dem wert füllen soll? und wo, dass man ubbrh eine 0 verpassen soll?
Und warum nimmst du die formel für die asynchrone Kommunikation?

JanB
17.02.2005, 15:26
Hallo,

wo steht, dass man ubbrl mit dem wert füllen soll? und wo, dass man ubbrh eine 0 verpassen soll?
auf Seite 133 stehen die Formeln für die Berechnung der Wertes für das Register UBBR.
Und darunter steht das dieses Register 12-Bit weit ist,
und aus den 8-Bit-Registern UBBRL und UBBRH besteht.
wie sollte man auch in ein einzelnes 8-Bit Register Werte > 255 eintragen ?
und bei 103 ist halt das obere Byte 0, bei 12 Bit.
Also trägt man 0 ein.
Warum sollte das dort stehen ? Bei anderen (niedrigen) Baudraten
kommt da ja auch was anderes rein.


Und warum nimmst du die formel für die asynchrone Kommunikation?
Da der USART fast nur für RS-232 Schnittstellen benutzt wird,
bevorzuge ich die Formel für die asynchrone Übertragungsart,
da es sich bei der RSR232 um eine asynchrone Übertragung handelt.

Schöne Grüße... Jan