ATmega, automatische Baudratenanpassung

18/09/2009 - 15:39 von Stefan Brröring | Report spam
Hallo,

vieleicht erinnert sich ja jemand an den alten 8052AH Basic. Bei dem
Ding wurde nach dem Start die Baudrate des angeschlossenen Terminals
automatisch erkannt und der Prozessor antwortete entsprechend.

Dazu musste man als erstes Zeichen soweit ich mich erinnere ein <space>,
d.h. char 32, bzw. #20H senden und der Timer für die Baudrate wurde dann
passend eingestellt.

Hat jemand ein Codeschnipsel für eine àhnliche Lösung mit dem ATmega8?
Möglichst GCC, also WINAVR.

Hintergrund: Ich möchte mit einem ATmega8 ohne Quarz, also mit internem
8MHz Oszillator über die serielle Schnittstelle kommunizieren. Um
Baudratenfehler auszugleichen, soll sich der ATmega8 an den PC anpassen.

Gruß

Stefan DF9BI
 

Lesen sie die antworten

#1 j
18/09/2009 - 16:30 | Warnen spam
Stefan Brröring wrote:

Hat jemand ein Codeschnipsel für eine àhnliche Lösung mit dem ATmega8?
Möglichst GCC, also WINAVR.



Du könntest zu avrfreaks.net gehen und dort Cliff Lawson (der
Mega-Poster in diesem Forum schlechthin) fragen, er hat mal irgendwann
geschrieben, dass er ein Autobauding auf der Basis eines initial
gesendeten <CR> implementiert hat.

Aber:

Hintergrund: Ich möchte mit einem ATmega8 ohne Quarz, also mit internem
8MHz Oszillator über die serielle Schnittstelle kommunizieren. Um
Baudratenfehler auszugleichen, soll sich der ATmega8 an den PC anpassen.



*Das* wird dir mit einem einzelnen Zeichen als Referenz schlecht
gelingen. Cliffs Autobauding war wohl eher in dem Sinne, wie ein
klassisches Modem arbeitet, also dass man 9600 Bd von 19200 Bd
unterscheidet. Du müsstest ja bei dir live den RC-Oszillator
nachkalibrieren.

Das wàre, wenn ich das recht überschaue, höchstens machbar, indem du
eine (exemplarabhàngige) Kalibriertabelle in den EEPROM legst, aus der
die relative Änderung der Frequenz in Abhàngigkeit von den OSCCAL-
Werten hervorgeht. Diese könntest du dann benutzen, um aus der beim
initialen Zeichen gemessenen Bitzeit abzuleiten, welchen neuen Wert
von OSCCAL man jetzt programmieren müsste, damit die Taktfrequenz den
Sollwert erreicht.
cheers, J"org .-.-. --... ...-- -.. . DL8DTL

http://www.sax.de/~joerg/ NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)

Ähnliche fragen