mikrocontroller.net

Forum: PC-Programmierung Timing Prob. bei USB-Übertragung


Autor: StartER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich nutze den FT245 USB Chip mit einem ATmega128. Senden und
empfangen klappt wunderbar, doch bei genauem Hinsehen, geht das ein
oder andere Byte verlohren. Meine Vermutung ist, dass der PC die Daten
nicht schnell genug einließt und dann das eine Byte von dem
darauffolgenden überschrieben wird!
Ich programmiere mit dem Borland C++ Builder und habe leider keinen
Plan, wie ich das Problem lösen kann. Ich lese Daten vom ComPort mit
dem Ereignis OnRxChar ein (ComPort1->Read(&a,1);).
Danke für Tipps und Lösungsvorschläge.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei sowas einfach einen Handshake-Mechanismus einführen. Also:
Mikrocontroller sendet meinetwegen 1024 Byte und wartet dann erst auf
ein Handshake des PC, bevor er die nächsten Daten sendet.

Autor: StartER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider bleibt bei meiner Anwendung keine Zeit auf ein Handshake zu
warten, da sonst mein µC anfallende Daten nicht vollständig aufnimmt,
verarbeitet und weiterleitet. Daten fallen alle 80µs an und die gesamte
Prozedur (Verarbeitung bis Versand) dauert etwa 70µs. Sollte ich nun
innerhalb der verbleibenden 10µs nicht den Handshake erhalten, verpasse
ich den nächsten Messwert - und das will ich nicht. Gibt doch bestimmt
auf der PC Seite eine möglichkeit, damit kein Byte verschluckt wird.
Gibts hier einen Borland C++ Builder Profi, der sich mit dem ComPort
auskennt?? Ich verwende zur Zeit die OnRxChar Funktion.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du auf der PC-Seite nicht einzelne Zeichen liest, sondern ganze
Blöcke, dann sollte das das Problem entschärfen.

Du solltest Dir bewusst sein, daß aufgrund der Struktur von USB der
Inhalt des FT245-internen FIFOs nur einmal pro Millisekunde an den PC
übertragen werden kann. Bei Deiner Datenrate sind das also etwa
120..130 Bytes pro Millisekunde.

Der Windows-Scheduler arbeitet üblicherweise mit einer Granularität von
10msec, mit Tricks lässt sie sich auf 1msec heruntersetzen. Für Deine
Anwendung bedeutet daß, daß Dein OnRxChar höchstens einmal pro
Millisekunde aufgerufen wird.
In Deinem OnRxChar-Handler solltest Du also bestimmen, wieviele
ungelesene Bytes im Puffer der Schnittstelle vorhanden sind, und diese
dann en bloc lesen.
Wie exakt dafür vorzugehen ist, kann ich Dir nicht sagen, weil ich BCB
(glücklicherweise) nicht näher kenne.


Dennoch viel Erfolg.

Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich hab da mal ne frage, kann mir jemand den source-code für den
zugriff unter borland c++ builder auf den ftdi ft245 chip senden, bzw.
hier im forum anhängen, da ich da keien plan habe wie...
das wäre super!

danke einstweilen

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, auch ich suche den Programm-Code für die Ansteuerung eines solchen
USB Bausteins FT245, leider habe ich bisher nicht das richtige
gefunden. Ich hoffe ihr könnt mir helfen.

Danke euch!
Mario

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja ich weiss nicht ob der Hinweis für deine Anwendung zu spät kommt,

aber wenn man statt Ft245 einen FT232 nimmt, kann man ca. alle 44uS ein
Byte an den PC senden. Zum Empfang taugen die meisten Terminalprogramme
(Hyperterm) ganz ohne Handshake. Treiber gibts von FTDI umsonst.

Nur dein MC muss die Daten dann seriell z.B. mit 230KBaud senden. Bei
mir läuft so ein Aufbau mit einem Mega88 ohne Datenverlust.

Grüße Robert

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.