Forum: Mikrocontroller und Digitale Elektronik Baudratenproblem bei 16Mhz Quarz


von Basti (Gast)


Lesenswert?

Hallo,

ich hab ein merkwürdiges Problem und wollte mal fragen ob jemand schon 
ähnliches durch hat...

Ich habe ein Atmega168 auf meinem STK500 stecken und betreibe ihn mit 
einem 16MHz Quarz... die Freqenz passt soweit...
Das ganze wird mit einem USB-Serialadapter verbunden... später im 
Projekt wird das selbe durch ein FTI232 getan...
Ich benutzte die UART Lib von Peter Fleury, die bisher immer 
funktionierte.

Laut diesem Rechner: 
http://www.gjlay.de/helferlein/avr-uart-rechner.html

Könnte ich die Baudraten 38.4k, 76.8k und 250k benutzen...

Die erste Baudrate funktioniert tadellos, nur leider ist sie für meine 
Anwendung zu langsam.
Die letzte (250k) funktioniert beim Empfangen von Daten vom µC ohne 
Probleme, aber wenn ich was sende, kommt nur Müll an?!
Und die Baudrate mit 76.8k funktioniert anschneiend überhaupt nicht... 
da kommt nicht mal ein Zeichen an... und die wäre genau die richtige für 
mich...

Achso und 115.2k hab ich auch testweise probiert... aber bei 3% Fehler 
kommen immer mal wieder das falsche Bytes durch... (klar)

Ich versteh einfach nicht, warum es bei 76.8k zu solchen Problemen 
kommt, wenn sich alle anderen Baudraten wie erwartet verhalten (bis auf 
das senden mit 250k). Liegt es etwa an dem USB-Serial Wandler?

MfG

Basti

von Michael K. (mmike)


Lesenswert?

Baudratenquarz nutzen. Z.B. 14.745600 MHz

Grüße,
Michael

von g457 (Gast)


Lesenswert?

..oder 18.432 wenns auch etwas schneller sein darf

von (prx) A. K. (prx)


Lesenswert?

Wäre die Frage, welche Baudraten der PC-Adapter unterstützt. 76800 ist 
keine klassische PC-Baudrate.

von Basti (Gast)


Lesenswert?

könnte man tun...
Ich verwende nur gern die 16MHz weil ich dann einen Timerinterrupt aller 
1,02ms Aufrufen kann und das ziemlich nützlich für mich ist...
deswegen wollte ich erstmal nicht den Quarz wechseln und das eher als 
letzte Möglichkeit ansehen.
Außerdem würde das das Phänomen mit den 76.8k nicht erklären...

von Glaskugel (Gast)


Lesenswert?

Situation

1. Es ist unbekannt, für welche Baudraten und Genauigkeiten der 
USB-Seriell-Adapter spezifiziert ist.
2. Unabhängig davon, ist Typ und Hersteller des USB-Seriell-Adapters 
unbekannt, so das kein Vergleich mit den Erfahrungen von anderen möglich 
ist.

von Anja (Gast)


Lesenswert?

Basti schrieb:
> Das ganze wird mit einem USB-Serialadapter verbunden... später im
> Projekt wird das selbe durch ein FTI232 getan...

Basti schrieb:
> Die letzte (250k) funktioniert beim Empfangen von Daten vom µC ohne
> Probleme, aber wenn ich was sende, kommt nur Müll an?!

Da stellt sich für mich die Frage: kann dein RS232-Treiber überhaupt die 
hohe Baudrate? bzw. wie lang ist Dein Kabel?

Basti schrieb:
> Achso und 115.2k hab ich auch testweise probiert... aber bei 3% Fehler
> kommen immer mal wieder das falsche Bytes durch... (klar)

Ich komme (mit Bit Baudratenverdoppelung gesetzt) nur auf 2,1% Fehler.

Bei 57600 Baud würdest Du mit Baudratenverdoppelung unter 1% Fehler 
haben.

Gruß Anja

von Falk B. (falk)


Lesenswert?


von Basti (Gast)


Lesenswert?

http://www.delock.de/produkte/gruppen/USB+Adapter/Delock_USB_11_Seriell_Adapter_61392.html

Dieser...

Kann da leider keine Informationen finden, welche Baudraten das Teil 
unterstützt und welche nicht...

Nächste Woche sollte meine Platine kommen, dann werde ich die 76.8k 
nochmal mit dem FT232 probieren und wenns nicht is, dann muss ich halt 
zum Baudraten Quarz greifen

von Anja (Gast)


Lesenswert?

Basti schrieb:
> Kann da leider keine Informationen finden, welche Baudraten das Teil
> unterstützt und welche nicht...

Du wirst doch beim Anstöpseln des Adapters sehen welcher Treiber 
aktiviert wird. Laut Download ist es ein PL2303.

Warum testest Du das ganze nicht mit einem USB-Adapter mit FTDI.
z.B. dem hier?

http://www.reichelt.de/?ACTION=3;ARTICLE=78847;PROVID=2402

Gruß Anja

von g457 (Gast)


Lesenswert?

> Kann da leider keine Informationen finden, welche Baudraten das Teil
> unterstützt und welche nicht... [..] 76.8k [..]

Der angebotene Treiber legt nahe dass da ein PL2303 drin ist. Der 
wiedrum kann laut Datenplatt keine 76k8.

Spar Dir die vergliche Liebesmüh und nimm einen Baudratenquartz.

von Basti (Gast)


Lesenswert?

Ja Anja du hast recht, ich sollte mal in einen neuen Adapter 
investieren... wenn ich immer den FT232R verbaue, dann sollte man auch 
mit einem solchen Adapter Debugen... das ergibt Sinn und deswegen liegt 
das Teil jetzt im Warenkorb... ;)


@G456 Danke für die Info... dann brauch ich mich nicht wundern...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Die so genannten "Baudratenquarze" sind auch nur die halbe Miete, da die
USB-Seriell-Umsetzer üblicherweise mit 48 MHz oder 96 MHz betrieben
werden, so dass letztendlich nur solche Baudraten exakt darstellbar
sind, die ganzzahlige Teiler von 3 MBaud (FTDI), 6 MBaud (PL2303X,
PL2303HX) oder 12 MBaud (PL2303HXD) sind. Die meisten Standardbaudraten
werden also auch von den USB-Chips nur näherungsweise erreicht, aller-
dings ist der Fehler wegen des hohen Grundtakts meist vernachlässigbar.

Für die gewünschten 76800 Baud ist der Fehler beim 16-MHz-AVR exakt
gleich groß wie bei den o.g. USB-Chips, so dass ein Baudratenquarz in
diesem Fall keine Verbesserung, sondern eher eine Verschlechterung
bringen würde.

Zusätzlich muss man aber beachten, dass auf PC-Seite durch das Betriebs-
system meist nur eine kleine Auswahl der mit dem USB-Chip theoretisch
möglichen Baudraten unterstützt wird. Bei Windows findet diese Ein-
schränkung in den Treibern, bei Linux im Betriebssystem-API statt. 76800
kBaud sind ohne Umgehung des Standard-APIs weder unter Windows noch
unter Linux möglich.

"Saubere" Baudraten für die Kommunikation zwischen einem 16-MHz-AVR mit
USB-Seriell-Umsetzer und einem Linux-PC sind 500 kBaud und 1 MBaud.
Solch hohe Baudraten setzen natürlich voraus, dass der USB-Chip direkt
auf der Mikrocontrollerplatine sitzt.

von Falk B. (falk)


Lesenswert?

@  Yalu X. (yalu) (Moderator)

>USB-Seriell-Umsetzer üblicherweise mit 48 MHz oder 96 MHz betrieben
>werden, so dass letztendlich nur solche Baudraten exakt darstellbar
>sind, die ganzzahlige Teiler von 3 MBaud (FTDI), 6 MBaud (PL2303X,
>PL2303HX) oder 12 MBaud (PL2303HXD) sind.

Klares Jain. FT232 & Co können gebrochenrationale Teilerverhältnisse, 
ähnlich dem  MSP430. Sprich, der FT232, kann Teilerfaktoren mit 1/8 Takt 
Auflösung. Damit sind auch mit 12MHz, was keine klassische 
Baudratenfrequenz ist, mit geringem Fehler die normalen Baudraten 
erzeugen.

MfG
Falk

von Basti (Gast)


Lesenswert?

Stimme ich Falk zu...

Hab heute folgendes App Note von FTI gelesen... (AN232B-05)

http://www.google.de/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http%3A%2F%2Fwww.ftdichip.com%2FDocuments%2FAppNotes%2FAN232B-05_BaudRates.pdf&rct=j&q=AN232B-05&ei=iLGYTYDmGM7esgaotbXICA&usg=AFQjCNHB1_lIQQiWhe3ljy5XDpxbie6dAQ&sig2=dzKJkWqNFhiQY9_JXiGmvA&cad=rja

Wenn ich das richtig verstanden habe, dann kann man gerade bei niedrigen 
Baudraten nahezu jede beliebige Baudrate unter 3% Fehler einstellen... 
hab mal nen Beispiel durchgerechnet...

Hm, obs Windows mit macht? Der Virtuelle Com Port treiber von FTI wird 
doch hoffentlich die funktionen des Chips nicht blockieren?!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Falk Brunner schrieb:
> FT232 & Co können gebrochenrationale Teilerverhältnisse, ähnlich dem
> MSP430.

Stimmt, danke für den Hinweis. Da ich an hohen Baudraten üblicherweise
nur 230,4 kBaud und 500 kBaud benutze und man bei diesen die gebrochenen
Teilverhältnisse nicht braucht, hatte ich bisher auch gar nicht den
Bedarf nach so einem Feature :)

Basti schrieb:
> Wenn ich das richtig verstanden habe, dann kann man gerade bei niedrigen
> Baudraten nahezu jede beliebige Baudrate unter 3% Fehler einstellen...

Nicht nur bei den niedrigen. Für alle Baudraten bis 1,54 MBaud beträgt
der Fehler maximal 3,03%, bis 115200 kBaud sogar weniger als 0,24%.

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.