Forum: Compiler & IDEs FTDI232 -> UART kein Zeichen korrekt


von Marc (Gast)


Lesenswert?

Hallo,
Ich versuche mit einem USB zu seriell Chip (FTDI232RL) meinen Controller 
anzusprechen.
Das Programm funktioniert einwandfrei wenn ich direkt über seriell auf 
den Controller gehe.
Ich verschicke im Programm ein "test".
Im Terminalprogramm erhalte ich aber immer  € Zeichen (in einem anderen 
Terminal Programm immer '\0'.
Wenn ich ein Zeichen reinschick empfängt der Controller immer den Wert 
255 als integer.
Rein Hardwaremäßig müsste eigentlich alles passen, wenn ich mit dem 
Terminalprogramm ein Zeichen sende wird im Controller der entsprechende 
Interrupt ausgelöst.

Fällt jemand dazu was ein?

von Tim S. (suxx)


Lesenswert?

sicher das du baudrate richtig eingestellt hast?

von Wolfram (Gast)


Lesenswert?

>Im Terminalprogramm erhalte ich aber immer  € Zeichen (in einem anderen
>Terminal Programm immer '\0'.
nimm ein anderes Terminalporgramm das Übertragungsfehler kennzeichnet 
z.B. H-Term
>Wenn ich ein Zeichen reinschick empfängt der Controller immer den Wert
>255 als integer.
das glaube ich nicht, solange deine Integer nicht 8Bit gross sind.
>Rein Hardwaremäßig müsste eigentlich alles passen, wenn ich mit dem
>Terminalprogramm ein Zeichen sende wird im Controller der entsprechende
>Interrupt ausgelöst.
weisst du das oder vermutest du es?
Anders gefragt benutzt du JTAG?

>Fällt jemand dazu was ein?
1.Der FTDI Chip oder die verdrahtung haben probleme.
2.Du benutzt ein Terminalprogramm das nicht mit hohen Portnummern 
zurechtkommt.
3.Du benutzt eine Taktfrequenz für den Mikrocontroller die sich nicht 
auf die Baudratenfrequenz ganzzahlig teilen läßt und deine serielle ist 
toleranter als der FTDI Chip.

Ich würde auf 1. tippen

von Marc (Gast)


Lesenswert?

Also, Baudrate müsste korrekt eingestellt sein.
Habs mit zwei Varianten versucht, einmal im Code berechnet und einmal 
direkt aus dem Datenblatt rausgelesen und eingetragen.
Bei 16Mhz und einer Baudrate von 9600 hab ich einen Fehler von 0,2%, das 
sollte eigtl gar nichts machen.
1. Also verdrahtung ist nach Vorgabe von FTDI und alles auf einer 
professionell verarbeiteten PLatine, sollte gehen. Auf den Chip selber 
kann ich zugreifen und er wird auch erkannt wenn ich ihn an einen USB 
Port anschließe.

2. Ich habe H-Term und ZOC probiert. Ich benutze COM3, also keinen hohen

3. siehe oben

Warum sollte der Wert nicht 255 sein? Ein Zeichen besteht doch aus 8 bit 
oder nicht?
Achja, ich benutz JTAG.

Kann im Augenblick leider nichts ausprobieren da ich wieder Probleme mit 
dem Portzugriff habe. Da werd ich noch wahnsinnig ;)

Ich meld mich wenns Fortschritte gibt.

Auf jedefall erstmal Danke für die Antworten!

von GIO (Gast)


Lesenswert?

So wie es aussieht benutzt du den virtuellen COM-Treiber.
Solltest dich mal mit nem Oszi dazwischen hängen und die Timings 
kontrollieren ...
Schon mal probiert über die FTD2XX.dll Zugriffe zu machen ?
Hier hast du jeden Zugriff wirklich selbst in der Hand ...
Funktioniert bei mir einwandfrei und sogar unter Visual Basic :-)
Ausserdem kannst du hier auch mehrere Devices an einen Compi 
anschliessen und diese über zB Seriennummern detectieren ...

Anbei ...

If FT_SetBaudRate(lngHandle, 9600) <> FT_OK Then ...

If FT_SetDataCharacteristics(lngHandle, FT_BITS_8, FT_STOP_BITS_1, 
FT_PARITY_NONE) <> FT_OK Then ...

If FT_SetFlowControl(lngHandle, FT_FLOW_NONE, 0, 0) <> FT_OK Then ....

If FT_SetRts(lngHandle) <> FT_OK Then ....

RS232_Outstr = " USB" & vbCrLf & " LOOPBACK" & vbCrLf & " OK"
ftStatus = FT_Write(lngHandle, RS232_Outstr, Len(RS232_Outstr), 
RS232_BytesWritten)

lg gio

von Marc (Gast)


Lesenswert?

Ok, Problem gefunden!

Hab das Program zuerst auf einen Atmega16 getestet und bin dann mit dem 
FTDI auf einen AT90CAN128 gegangen. Die UART Ini hab ich zwar angepasst, 
aber das Problem war das der AT90 eine Fuse hat die der Atmega16 nicht 
hat. Nämlich "Divide Clock by 8 internally".
Dadurch hat natürlich die Baudrate nicht gestimmt ;)

Vielen Dank für die Antworten!

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.