Forum: Mikrocontroller und Digitale Elektronik [?] Atmega128 USART Baudrate erkennen


von BirgerT (Gast)


Lesenswert?

NIBO2 mit Mega128 @16MHz, UART0 über Serial-USB Wandler (UCOM-IR2X) mit 
PC und PuttyTel verbunden - ISP-Programmieren und serielle Kommunikation 
(600 - 38k4 Baud) funktionieren.

Ich würde im Mega128 gerne eine automatische 
Baudratenerkennung/-anpassung realisieren:
Standard Setup des Mega128 UART ist 19200,8,n,1

Terminal mit 19200 Baud -> alles i.O.
Terminal mit  9600 Baud -> UART meldet FE (Frameerror) - o.K. UART 
Baudrate ist zu verringern
Terminal mit 38400 Baud -> passiert nix, auch kein UART Error

Kennt jemand vielleicht eine Möglichkeit festzustellen, dass die 
Baudrate des UART erhöht werden muss, damit mit dem Terminal 
kommuniziert werden kann?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

BirgerT schrieb:
> Kennt jemand vielleicht eine Möglichkeit festzustellen, dass die
> Baudrate des UART erhöht werden muss, damit mit dem Terminal
> kommuniziert werden kann?

 A) Mit 230.4KB anfangen, bei UART error runtergehen.
 B) Synchbytes senden (0x55, 0xAA), bitzeiten auswerten.

von BirgerT (Gast)


Lesenswert?

Erstmal Danke für die 1. zeitnahe Antwort..

Habe in der Zwischenzeit Weiteres probiert - Fazit "Knoten in der Birne 
o. es geht nicht bis nur eingeschränkt".

Kurz zur Bedienung:
Nach dem Neustart des Controllers soll dieser ja nicht sofort mit dem 
Texten über den UART beginnen, sondern erst dann, wenn sich über den 
UART auch wirklich etwas tut. Bei mir sind's zwei Leerzeichen, die 
empfangen sein müssen, dann erst wird der Startscreen gesendet.

Workflow
Flashen mit Dude -> Dude gibt die Serielle wieder frei (und Programm im 
mega läuft los) -> PuTTYtel starten -> Doppelklick auf Config -> 1.x 
Leertaste -> UART-Settings werden im Sekundentakt gesendet -> 2.x 
Leertaste -> Startbild/-menu wird gesendet..

Also Baudraten von hoch nach niedrig durchschalten:
UART Initialisiert auf 38k4 und Terminal mit 9k6 gestartet.
- Leertaste -> FE -> UART init mit 28k8 (oder 14k4)
- Leertaste -> kein FE und auch kein Zeichen im UDR ;-(

Mit der Leertaste bekomme ich den FE nur, wenn das Verhältnis UART- und 
Terminal-Baudrate einer 2er-Potenz entspricht.

UART Initialisiert auf 38k4 und Terminal mit 9k6 gestartet.
- Leertaste -> FE -> UART init mit 19k2
- Leertaste -> FE -> UART init mit  9k6
- Leertaste -> UART sendet Parameterstring mit 9600

Beim UART1 wäre es vllt. einfacher zu realisieren, weil dort INT3 und 
INT4 verfügbar sind - kennt jemand dafür eine Lösung?

von U. M. (oeletronika)


Lesenswert?

Hallo,
das Problem wird praktisch dadurch gelöst, dass man erstmal vereinbarte 
Daten sendet und diese können nur mit der korrekten Baurate richtig 
gelesen werden.
Gruß Öletronika

von Georg G. (df2au)


Lesenswert?

Das erste Leerzeichen nicht per UART empfangen sondern stumpf die Zeiten 
der Bits zählen und daraus die Baudrate errechnen. 0x20 sind ja nun 
nicht so viele Flanken, dass man dafür viel RAM braucht.

: Bearbeitet durch User
von Atmega (Gast)


Lesenswert?


von Atmega (Gast)


Lesenswert?

Noch anschaulicher erklärt und sehr einfach umzusetzen:


http://www.ti.com.xx/xx/lit/an/slaa215/slaa215.pdf

xx durch cn ersetzen, Forum meldet sonst Spamverdacht

von BirgerT (Gast)


Lesenswert?

Ein Dank an Atmega für die Docs..So etwas habe ich nicht selber 
gefunden?!

Das von Renesas muss ich mir noch genauer ansehen (vom 1. April 2010?!);

und das von TI macht das gleiche, was bei mir gewissermaßen auch schon 
funktioniert.. beim Frameerror die Baudrate halbieren.

Nun gut - der USART0 ist als Debug-Ausgabe sowieso "fest" mit dem PC 
verbunden -> fixe Baudrate.

Btw. - Ich finde diesen o.a. nicai-Programmer voll praktisch für den 
ATmega128, weil mit einem Gerät kann man flashen, seriell Daten 
übertragen sowie RC5 IR senden und empfangen - und das ohne 
umzustöpseln; am Roboter habe ich mir die ISP-Schnittstelle und eine 
externe Spannungsversorgung auf 8-pol Westernbuchse gelegt - ein Stöpsel 
raus und der Roboter ist mobil, ein Stöpsel eingeklinkt, und schon isser 
wieder mit der Programmierumgebung verbunden - auf den Unterschied im 
Handling Pfostenstecker zu Westernstecker
brauche ich wohl nicht eingehen.

Beim USART1 als "mobile" Kommunikationsschnittstelle (XBEE) bin ich noch 
nicht - da werde ich dann aber die Timervarianten über Flankenwechsel 
versuchen..

Danke nochmal /BirgerT

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.