Baudratenproblem bei 16Mhz Quarz

Gast #2129937
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
Gast #2129959
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...
Gast #2129960
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.
Gast #2129964
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
Gast #2129982
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
Gast #2129987
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.
Gast #2130065
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...
Moderator #2130170
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.
#2130483
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
Gast #2130573
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?!
Moderator #2130675
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%.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren