www.mikrocontroller.net

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


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tim S. (suxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sicher das du baudrate richtig eingestellt hast?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: GIO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.