Forum: Mikrocontroller und Digitale Elektronik FTDI FT 232BM und ATmega32/128 - Hohe Baudrate?


von Alexander Zaech (Gast)


Lesenswert?

Hallo zusammen,

ich habe einen FT232BM mit einem ATmega32 (und auch ATmega128)
"verheiratet". Die Signale RX und TX des FT-Chips wurden mit den
ATmega RX und TX Pins verschaltet (gekreutzt - Null-Modem). Die Signale
#RTS und #CTS wurden am FT-Chip ueberbrueckt. Soweit so gut. Der ATmega
laeuft mit 16MHz und soll eine Baudrate von 1MBaud zusammenbringen.
Laut Datenblatt von FTDI und Atmel fuer beide Chips kein Problem.

Nun mein Problem: Welchen Wert muss ich ins UBBR Register schreiben und
welche Baudrate soll ich beim FTDI Chip einstellen um eine max.
Uebertragungsgeschwindigkeit zu erreichen. Es gibt bei dem FTDI-Chip
auch die Moeglichkeit non-Standard Baudraten zu verwenden.
(Ich verwende nicht den VCP sondern die FTD2XX.dll - MS Visual C++)

Ich freue mich ueber jeden Hinweis der mir Hilft!

Schon jetzt vielen Dank

Mit freundlichen Gruessen
AlexZ

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Ich bezweifle dass du ohne Hardware-Handshake 1MBaud hinbekommst.

Wolf

von Alexander Zäch (Gast)


Lesenswert?

Hallo Wolf,

OK, Hardware-Handshake soll nicht das Problem sein. Freie Ports habe
ich noch und meine UART-Lib kann's auch. Aber es löst leider nicht das
eigentliche Problem...

Mit freundlichen Gruessen
AlexZ

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Hallo Alex,
Such dir mal das Tool avrcalc auf avrfreaks.net/Google. Damit kannst du
dir die UBRR Werte komfortabel ausrechnen lassen.

Grüße
Wolf

von Stefan Kleinwort (Gast)


Lesenswert?

Warum soll Software-Handshake ein Problem sein? Einen Eingangspuffer
vorsehen und das XOFF senden, wenn im Puffer noch 32 Bytes (Hausnummer)
Restplatz ist. Dann sollte das gehen.

Stefan

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Hallo Stefan,
An sich ist Software-Handshake kein Problem, aber die 1Mbit Daten die
der OP übertragen wollte müssen ja auch verarbeitet werden.
Und wenn er laufend "xofft" sinkt die Netto-Datenrate.

Grüße
Wolf

von Stefan Kleinwort (Gast)


Lesenswert?

Kommt natürlich auf die Applikation drauf an. In den meisten Fällen gibt
es ja eine Hauptrichtung, in die die Daten fliessen. In die andere
Richtung gehen meist nur Statussignale etc., mit wesentlich weniger
Bandbreite. In diesem Fall schränkt Software-HS nicht die Übertragung
ein.
Soll die Übertragungskapazität in beiden Richtungen ausgelastet werden,
dann sieht es natürlich anders aus.

Was man bei SW-HS auch beachten muss: Sollen XON-XOFF-Signale gesendet
werden, dann ist der Übertragungsweg nicht mehr uneingeschränkt
binärtauglich. D.h. Datenbytes, die XON oder XOFF entsprechen, müssen
gesondert kodiert werden.

Stefan

von Alexander Zaech (Gast)


Lesenswert?

Hallo zusammen,

bei meiner Anwendung faellt leider Software-Handshake aus. Alle Ascii
Zeichen (0-255) sind leider schon Bestandteil des Datenstroms
(Binaerdaten). Ich presoenlich glaube nicht das ich ein Problem ohne
Handshake, egal ob Hard- oder Software, bekommen werde. Mein Uart
arbeitet mit einem Sende/Empfangs Buffer von je 128 Byte. Ausserdem ist
nur immer eine Richtung voll ausgelastet.

Wolf: Danke fuer den Tipp mit "avrcalc". Werde ich mir mal anschauen.


Vielen Dank an alle

Mit freundlichen Gruessen
AlexZ

von Alexander Zaech (Gast)


Lesenswert?

Hallo zusammen,
Hallo Wolf,

ich habe mir mal das Tool "avrcalc" angeschaut. Es waehre schon ganz
gut aber es berechnet nur bis 115k Baudrate richtig. Wenn Du mal in die
Spec des ATmega128 auf Seite 193-196 schaust, wirst Du Beispiele fuer
das UBBR finden. Bei 16MHz (S. 169) ist bei U2X=0 und UBBR=0 eine
Baudrate von 1Mbit moeglich. Vielleicht kann ich auch die Tabelle nicht
richtig lesen? Nur, was muss ich mit dem FTDI Chip machen um diese
Baudrate auch bei ihm einzustellen.

Mir ist klar, dass es sich nicht um eine Standard Baudrate handelt aber
es sollte (?) doch moeglich sein auch dem FTDI Chip zu sagen das er mit
1Mbit arbeitet. Welche Baudrate bekomme ich wenn ich ins UBBR=0
schreibe (16MHZ)?? Ist das exakt 1M bps oder etwas mehr oder weniger?

Vielen Dank

Mit freundlichen Gruessen
AlexZ

PS: Ich werde einfach mal mit Oszi mir den Datenstrom bei UBBR=0
anschauen...

von Torsten (Gast)


Lesenswert?

Die UBBR Werte stehen doch im Datenblatt??? beim AtMega 16 waren das
wohl UBBRL = 1 und UBBRH = 1. Weiss es aber nicht mehr genau. Beim
Kapitel USART ist auf jeden Fall die gesuchte Übersicht enthalten.

MfG

von Alexander Zäch (Gast)


Lesenswert?

Hallo Torsten,

wie schon im Beitrag zuvor: Die Übersicht in der Spec ist ja auch nicht
das Problem. Wie man die Übersicht liest ist auch nicht das Problem.
Fakt ist, die Angaben in dieser Übersicht sind etwas unklar wenn man
sich die Werte für UBBR bei 0,5M bps udn 1M bps anschaut. Wie schon
gesagt: Dies sind keine Standard Baudraten!! Windows kann sowas
garnicht! ABER ein FTDI Chip sollte das können. Aber wie ????

Vielen Dank

Mit freundlichen Gruessen
AlexZ

von Wolf-Ruediger Juergens (Gast)


Lesenswert?

Hallo Alex,
Hast du denn kein Datenblatt vom FT Chip? Da sollte doch so etwas drin
stehen.

Grüße
Wolf

von Alexander Zäch (Gast)


Lesenswert?

Hallo Wolf,

natürlich habe ich eine Spec des FTDI-Chips. Die hab ich auch gelesen.
Nur wird da von einer Baudrate z.B. von 921600 Baud gesprochen. Wie sag
ich DAS meinem ATmega?

Na, war einen Versuch wert. Ich dachte, jemand hat sicherlich schon mal
das gleiche Problem gehabt. Trotzdem, vielleicht gibt es ja doch noch
jemanden der die max. Übertragungsgeschwindigkeit des USART's mit
einem FTDI Chip geschaft hat. 19,2K sind ja kein Problem :-))

Vielen Dank an alle...

Mit freundlichen Grüßen
AlexZ

von Peter D. (peda)


Lesenswert?

Wenn der FTDI nur 921600 Baud kann, dann nimm doch für den AVR ein
Standardquarz 14,7456MHz, dann hauts wieder hin.


Peter

von Alexander Zäch (Gast)


Lesenswert?

Hallo Peter,

vielen Dank für Deine Antwort. Wenn ich fragen darf: Wie kommst Du auf
die Frequenz/Baudrate.

Mit freundlichen Grüßen
AlexZ

von Peter D. (peda)


Lesenswert?

Schau Dir doch mal bei Farnell oder so die Quarze an.
Da sind viele "krumme" Werte mit bei, die aber meistens Vielfache von
115200 sind, genauso wie 921600.


Peter

von Mark Hämmerling (Gast)


Lesenswert?

Salut,

alles davon ist in den Datenblättern zu finden. UBRR sollte 0 sein
(XTAL/16/BAUD-1 imho) und den FTDI kann man ganz bestimmt auch unter
Windows zu non-standard Baudraten bewegen. Schließlich wird sich das
Merkmal, das sogar im Datenblatt steht, nicht nur auf den nicht von
FTDI selbst entwickelten Linux-Treiber beziehen. So geht es unter
Linux: http://hrabia.ibib.waw.pl/~winnie/baudrate.html
Afair ist die Baud-Basis beim FT232 3MHz, also sollte ein Teiler von 2
(= 3-1) eingestellt werden. Aber sicherlich sagst Du dem Treiber die
Baudrate direkt, und der rechnet das dann in den Teiler um - so wie es
auch der Linux-Treiber macht.

Gruß,
Mark

von Alexander Zäch (Gast)


Lesenswert?

Hallo Mark,

das kling mal richtig gut. Sobald ich Zeit habe werde ich es gleich mal
testen. Schon jetzt vielen Dank.

Mit freundlichen Grüßen
AlexZ

von Alexander Zaech (Gast)


Lesenswert?

Hallo zusammen,

die Loesung zu meinem Problem war greifbar nahe:
Im Datenblatt des ATmega32/128, bei USART gib es eine Berechnungsformel
fuer die Baudrate und den UBBR Wert. Nach dieser Formel wird bei einem
UBBR Wert von 0 eine Baudrate von 1Mbit/s erreicht ( @ 16MHz). Der FTDI
232MB Chip kann ueber die FTD2XX.DLL angesprochen werden. Mit dem
Befehl FT_SetBaudRate kann einfach 1Mbit/s eingestellt werden. Da es
sich hierbei um eine nicht Standard Baudrate handelt berechnet der FTDI
Treiber automatisch die richtigen Teilerverhaeltnise. Das alles ist
auch in der Application Note von FTDI "Configuring FT232BM Baud
Rates" beschriben.

Jedenfalls arbeitet mein ATmega32 mit 1Mbit/s USART zusammen mit dem
FT232BM herforragend. Wie das ganze aber mit einem Virtual Com Port
funktioniert kann ich leider nicht testen. Die FTD2XX.DLL ist einfach
besser in eigene Programme einzubinden.

An alle nochmal vielen Dank.

Mit freundlichen Gruessen
AlexZ

von Alexander Zaech (Gast)


Lesenswert?

Servus,

ahhh... ist eigentlich alles schon von Mark gesagt worden.

Thanks Mark

Mit freundlichen Gruessen
AlexZ

von Steffen (Gast)


Lesenswert?

Die maximale Datenübertragungsrate des FT232BM liegt bei 3MBit/s. Die
lassen sich aber nur mit der Treiber-DLL realisieren. Über den
virtuellen COM-Port sind nur die Standard-Baudraten nutzbar

von Stefan Kleinwort (Gast)


Lesenswert?

Laut Aussage von einem FTDI-Entwickler auf der Messe lassen sich auch
bei Verwendung der virtuellen COM-Ports beliebige Baudraten verwenden.
Es muss eine Einstellmöglichkeit geben, mit der jeder
Virtual-COM-Port-Baudrate eine Einstellung zugewiesen werden kann.
Damit sollte es möglich sein, z.B. im Virtual-COM-Port 19200
einzustellen und den FTDI bei dieser Einstellung real mit 1Mbaud
übertragen zu lassen.

Wie gesagt, habe ich selber noch nicht ausprobiert. Es könnte aber
interessant für Programme sein, die mit dem mc kommunizieren sollen,
aber nur sehr lahme Baudraten können.

Stefan

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.