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
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...
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.
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
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
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
> 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.
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...
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.
@ 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
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%.