PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Soft-UART mit Standardtakt 1MHz



gorra
09.09.2008, 13:17
Hallo leute,

ich habe mal eine Frage zum Soft-UART. Und zwar brauche ich einen UART der mit einem Takt 1 MHz und einer Baudrate 1200 richtig sendet. Mit mit einen HW-UART ist es nicht um zu setzten, das ist mir klar, ausser mit einem Quarz. Allerdings soll der Controller mit Standardtakt laufen, aus mehreren Gründen.

Jetzt stellt sich mir die Frage, ob man den SW-Uart mit Standardtakt von 1MHz und einer Baudrate von 1200 Baud fehlerfrei betreiben kann?

Bin dankbar um jeden hilfreichen Beitrag

fhs
09.09.2008, 13:26
Hallo gorra,

das ist kein Problem: Bei 1200Bd hast Du bei F_CPU=1Mhz für jedes Bit >800 Takte zur Verfügung! Siehe Soft-UART (http://www.avrfreaks.net/index.php?func=viewItem&item_id=79&module=Freaks%20Tools). Ein Quarz ist aber trotzdem unbedingt zu empfehlen, es sei denn, Du kalibrierst den RC-Oszillator Deines Controllers -- aber das ist immer noch recht ungenau! Ein Soft-UART ist kein Rezept gegen das Ungenauigkeitsproblem des internen RC-Oszillators!

Gruß

Fred

uwegw
09.09.2008, 13:40
Mit einen HW-UART ist es nicht um zu setzten, das ist mir klar, ausser mit einem Quarz.
Wieso das? Es hängt alles von der Genauigkeit der Frequenz ab, und die ist ja gleich, egal ob HW oder SW. Es kann gehen, muss aber nicht. Je nach Temperatur und Kalibirierung...

gorra
09.09.2008, 14:38
Hallo uwe, hallo fred,

also habe ich das selben Probleme mit dem SW-UART wie mit dem HW-UART. Ohne einen Quarz werde ich den Uart nie stabile laufen lassen können?! selbst mit einer kalibrieung nicht. Sehe ich das richtig?

uwegw
09.09.2008, 14:46
Ein Quarz ist schon ratsam. Der interne Oszillator ist einfach zu ungenau. Manchmal geht es, manchmal aber auch nicht.

fhs
09.09.2008, 15:42
Wie ich schon in meinem ersten Posting geschrieben habe, sehe ich das genau wie uwegw. Meist klappt es ohne Quarz nicht.
Als Alternative kommen serielle Übertragungsmethoden infrage, bei denen der Takt separat übertragen wird (z.B. SPI). Die sind meist auch nicht viel schwieriger zu implementieren als UARTs und kommen auf jeden Fall ohne Quarz aus.

Gruß

Fred

gorra
09.09.2008, 16:06
das ist doch schon mal eine Alternative, allerdings hat man ein Problem, wenn man eine Übertragung per infrarot oder ähnliches durchführen will. Durch das Clocksignal und MISO-MOSI.

fhs
09.09.2008, 17:13
Wenn Du Dir eine robuste IR-Übertragung stricken willst, kannst Du das Machester-Protokoll (https://www.roboternetz.de/wissen/index.php/Manchester-_Codierung) als Basis nehmen, da das den Takt indirekt enthält.

Gruß

Fred

sternst
09.09.2008, 17:48
Wie ich schon in meinem ersten Posting geschrieben habe, sehe ich das genau wie uwegw.

Ich nicht. ;-)

Bei ungenauer Taktquelle hat ein SW-UART nämlich in der Tat Vorteile gegenüber einem HW-UART, ganz besonders, wenn man auch Herr über das Protokoll ist. Ein SW-UART kann sich nämlich laufend selber nachkalibrieren. Ein SW-UART kann sich damit nicht nur an beliebig ungenaue Taktquellen anpassen, sondern auch gleich automatisch an die von der Gegenstelle verwendete Baudrate.

Nur wenn man den SW-UART mit einem völlig starren Timing versieht, gelten die gleichen Anforderungen an die Taktquelle, wie beim HW-UART.

Besserwessi
09.09.2008, 19:39
Bei einigermaßen stabiler Spannung und Temperatur reicht nach eine Kalibrierung der interne RC Oszillator in der Regel für eine UART. Das trifft sowohl für HW als auch SW UART zu.
Bei den älteren Chips (z.B. AT90LS2313) war sogar die Kalibrierung ab Werk meistens ausreichend. Die neuen sind aber nicht mehr so gut abgeglichen und man wird meistens eine Kalibrierung brauchen. Mit einem Quarz ist man aber für ein paar Cents (und 2 Pins) auf der sicheren Seite, ganz ohne abgleich.

Wenn man das Protokoll etwas Tolleranter machen will, kann man kleinere Pakete und 2 Stopbits nehmen, z.B. 4 Datenbits und 2 Stopbits.
Das sorgt auch gleich für ein etwas ausgeglicheneres Taktverhältnis für die IR Übertragung. Die Daten muß man dann aber an der andernen Seite noch mal etwas umsortieren.