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.
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.
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.
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.
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.