Forum: Mikrocontroller und Digitale Elektronik String-Übertragung über USB (Borland C++)


von Horst P. (luke_duke)


Lesenswert?

Schönen guten Tach,

ich bin gerade dabei, für die Kommunikation zwischen einem PC und einem 
ATmega128 eine grafische Oberfläche zu basteln. Die Kommunikation an 
sich läuft über String-Vergleiche und funktioniert mit einer 
Terminal-Software (Super-Terminal von Bray) einwandfrei.

Das Borland-C++-Programm verwendet die Komponente TComPort um Strings 
über einen USB-Port zu schicken oder zu empfangen. Im Prinzip 
funktioniert auch das.

Das Problem ist nun, daß nicht alle Strings vom ATmega vollständig 
ankommen. Es kann z.B. passieren, daß es zehn oder zwanzig Mal klappt 
und beim nächsten Versuch kommt nur ein Fragment der Nachricht an.


Hat jemand eine Idee woran es liegen könnte oder schonmal ein ähnliches 
Problem gehabt?


Danke für alle Antworten,
Nihil Baxter

von Marius (Gast)


Lesenswert?

das kann daran liegen, dass deine usb->seriell schnittstelle die strings 
fragmentweise raus schmeisst. Je nachdem was du da benutzt und wie es 
eingestellt ist kann es sein das die schnittstelle erst nach X bytes die 
Daten an deinen mega weiter gibt. Oder erst nach 0,X sekunden.

Eine möglichkeit wäre mal länger zu warten oder zu überprüfen ob das bei 
größeren Datenmengen auch passiert.

Wenn es so ist, dass deine USB schnittstelle nur alle X bytes was raus 
haut dann solltest du mal schauen ob es einen flush befehl auf PC seite 
gibt der dafür sorgt das die daten auch zum mega geschoben werden

von Horst P. (luke_duke)


Lesenswert?

Vielen Dank für die fixe Antwort. Ich werde mal sehen, ob ich den Fehler 
mit den Tips aufspüren kann.

von Horst Peter (Gast)


Lesenswert?

So. Falls es denn jemanden interessiert, ich habe das Problem lösen 
können.

Erstmal nochmal Dank an Marius. Die Hinweise haben tatsächlich geholfen.

Nachdem ich alle möglichen flush-Befehle ausprobiert habe, fiel mir dann 
doch auf, das es viel einfacher ist.

Ungeschickterweise habe ich immer ganze Strings geschickt. Der µC konnte 
die einzelnen Zeichen aber wohl nicht schnell genug verarbeiten. Daher 
wird jetzt alles mit kleinen Pausen einzeln gesendet.

Hätte man früher drauf kommen können. Oder müssen. Aber man kann ja 
nicht alles wissen.


http://www.nichtlustig.de/comics/full/040816.jpg

von Timo (Gast)


Lesenswert?

Hallo,
Ich schreibe gerade an einem ähnlichem Projekt mit einem AVR - 
Mikrocontroller. Ich
möchte dem Projekt nun eine serielle Schnittstelle geben. Den Controller
programmiere ich in 'C'.

Ich möchte über die serielle Schnittstelle (eigentlich USB -
Schnittstelle ... ist der FT232 drin ... Treiber sind auf dem Pc
installiert) Daten (z.B. Float-Werte) senden und diese Daten dann in
meinem C++ Programm verarbeiten z.B. inform einer Messwerttabelle,
Grafik etc.

Zum Erstellen der Software auf dem PC wird der Borland Builder 6
verwendet.

Nun habe ich mir es wie folgt vorgestellt:

Ich drücke auf einen Button "Lesen". Dann werden die Daten in einer
bestimmten Tastrate ausgelesen und in einem Array gespeichert.

Ich suche also nach einer "Funktion", welche es mir erlaubt den
seriellen Port auszulesen und nach einer Funktion die es mir erlaubt
über diese Werte zu senden.



Gruß Timo

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Vielleicht kann dir, das hier helfen. Ist aber für den Borland Builder 
5. Müsste aber klappen. Darin sind die wichtigsten Funktionen enthalten.

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.