Forum: Mikrocontroller und Digitale Elektronik FT232BM - totale verwirrung!


von Marius Schmidt (Gast)


Lesenswert?

Wisst ihr wo es anleitungen zum verwenden des chips gibt? Was sind die
default werte wenn man kein EEPROM benutzt (bezgl. Baud-rate, stop bits
und die anderen infos die windows haben will)?

Ich hab mir das datasheet mal angeschaut aber ich finde das ein wenig
dünn und verwirrend.

Danke,
Marius

von geloescht (Gast)


Lesenswert?

Dieser Beitrag wurde auf Wunsch des Autors geloescht.

von Marius Schmidt (Gast)


Lesenswert?

Ich hab gerade gesehen das das wohl von meiner programmierung abhängt...
ok.

Also was ich mich wirklich frage ist ob die Beschaltung von der AVR USB
entwicklungsplatine wirklich reicht (da ist nur RXD und TXD mit meinen
ATmega16 verbunden, und natürlich GND)

Kann mir mal jemand ein paar anfängertips geben? :)

Ich hab versucht das, was vom chip kommt, zu lesen aber da kommt nur
müll bei raus (irgendwelche zeichen, keine richtigen strings).

Ich hab einfach das UART ASM beispiel vom AVR-Tutorial auf den ATmega
geschrieben.

Btw ich hab kein EEPROM dran, ich hoffe mal das das kein Problem ist.

von Marius Schmidt (Gast)


Lesenswert?

oh man... wie peinlich!! :)

Ich habe vergessen die Taktfrequenz aus den sample von 4mhz auf 10mhz
um zu stellen doh

Jetzt geht es ohne probleme. Sorry und danke an alle die noch geholfen
hätten ;)

von Rufus T. Firefly (Gast)


Lesenswert?

Der FT232 ignoriert die Angaben zu Baudrate keineswegs, das macht nur
der parallele FT245.
Die Baudrate muss daher korrekt eingestellt werden, da sonst in der
Tat Müll 'rauskommt.

Er funktioniert auch ohne EEPROM.

Zur Verbindung mit einem AVR sind keine Pegelwandler oder gar Inverter
erforderlich; einfach nur die Sendedatenleitung mit der
Empfangsdatenleitung verbinden und umgekehrt.

Ein einfacher Test wäre der "Kurzschlusstest": RxD und TxD des FT232
werden miteinander verbunden. Werden mit einem Terminalprogramm (hier
tut's auch Hyperterminal) mit abgeschaltetem Hardwarehandshake (!)
Zeichen auf der Schnittstelle ausgegeben, müssen diese prompt als Echo
wieder empfangen werden, und zwar unabhängig von der eingestellten
Baudrate.

von Marius Schmidt (Gast)


Lesenswert?

hehe, danke für die info.

Also wie gesagt läuft es mitlerweile einigermaßen aber nur bis 38400
Baud. Geht das nicht irgendwie schneller?

Was ich momentan mache ist:

Das Beispiel aus dem tutorial mit 10 mhz anstatt 4 mhz und 57600 baud.

Dann hab ich mir bei FTDIchip.com ein VB beispiel runter geladen mit
dem ich den chip erkenne, die Baud rate auf 57600 setze und immer
fleißig auslese (256 bytes).

Wo kann da das problem liegen und was bekommt der FT232 maximal hin?

Würde mir handshaking weiter helfen (bzgl.
Übertragungsgeschwindigkeit)?

Mfg und nochmal Danke!
Marius

von Rufus T. Firefly (Gast)


Lesenswert?

Der FT232 ist vermutlich nicht das Problem, sondern die von Deinem AVR
verwendete Baudratenerzeugung. Die maximal erzielbare Baudrate des
FT232 liegt sehr deutlich jenseits von 38400 Baud (und steht im
Datenblatt); dank des recht großen Empfangsfifos ist auch ein
Datenverlust (der ja durch Verzicht auf das Hardwarehandshake möglich
ist) eher auszuschließen.

Wie beispielsweise erzeugst Du aus 10 MHz Takt die 57600 Baud? Was für
einen Teilerwert verwendest Du da und was ist die resultierende
tatsächliche Baudrate?

von Marius Schmidt (Gast)


Lesenswert?

ich habe total keine ahnung, das hier ist mein source code:

.include "m16def.inc"

.def temp = r16
.equ CLOCK = 10000000
.equ BAUD = 300
.equ UBRRVAL = CLOCK/(BAUD*16)-1

        ; Stackpointer initialisieren
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

        ; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp

        sbi UCSRB,TXEN                    ; TX aktivieren

loop:   ldi temp, 'l'
        rcall serout                      ; Unterprogramm aufrufen
        ldi temp, 'u'
        rcall serout                      ; Unterprogramm aufrufen
        ldi temp, 'p'
        rcall serout                      ; ...
        ldi temp, 'i'
        rcall serout
        ldi temp, 'n'
        rcall serout
        rjmp loop

serout:
        sbis UCSRA,UDRE                   ; Warten bis UDR für das
nächste
                                          ; Byte bereit ist
        rjmp serout
        out UDR, temp
        ret                               ; zurück zum Hauptprogramm

Also ist eine Baudrate von 57600 mit 10mhz nicht möglich oder wie? :(

von Marius Schmidt (Gast)


Lesenswert?

.equ BAUD = 57600

...sollte da eigentlich stehen... man die sonne tut mir nicht gut :P

von dds5 (Gast)


Lesenswert?

Ich tippe mal, dass die Baudrate leicht nebendran liegt.
Der Assembler führt nur Integer Arithmetik aus und berechnet aus ".equ
UBRRVAL = CLOCK/(BAUD*16)-1" an Stelle von 9,85 nur 9.
Damit bekommt man 62500 Baud.
Für hohe Baudraten bietet sich eine Frequenz von 11,0592MHz an, da sich
dann ganzzahlige Teilerfaktoren ergeben.

Dieter

von Rufus T. Firefly (Gast)


Lesenswert?

Sonne um 22:13? Auch schön.

Ja, auf genau dieses Problem der abweichenden Baudrate wollte ich
hinaus. Irgendwo in diesem Forum geistert auch eine Excel-Tabelle zur
Baudratenberechnung herum ...

von Marius Schmidt (Gast)


Lesenswert?

Danke dds5! Das war's!

Ich glaube es zwar selber noch nicht so ganz aber ich hab die
Übertragung jetzt auf 312500 baud hoch gezogen (UBRRVAL = 1). Kann das
wirklich sein? Also es scheint auf jeden fall zu funktionieren aber
irgendwie hab ich zweifel das der wirklich mit der geschwindigkeit
arbeitet (kann ich, da ich ein VB programm benutze natürlich nicht so
richtig einschätzen).

Echt super, danke danke! :)

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.