UART am PC

Gast #61992
Lesenswert?
• ▲
▼
Die Frage passt jetzt nicht 100%ig hier rein, aber trotzdem:

Ich versuche mit meinem AVR über UART zu kommunizieren. Der AVR
arbeitet einwandfrei das habe ich mit einem Terminalprogramm getestet.

Wenn ich jetzt jedoch Daten aus meinem Delphi-Programm sende,
funktioniert es nicht. Die Daten können irgendwann nicht übertragen
werden, wenn die Daten etwas größer sind (zum Beispiel ein String)
Ich gebe jedes Zeichen des Strings einzeln ins UART:
WriteFile(Hcom, S[I], 1, test,nil);
text ist irgedwann <> 1, es können also keine Daten mehr übertragen
werden.

Wie kann ich mit der WinAPI erkennen, ob das UART bereit fürs Daten
senden ist?
Gast #61993
Lesenswert?
• ▲
▼
Mit WaitCommEvent kannst Du relativ einfach feststellen ob der
Sendepuffer lehr ist. Aber wieso sendest Du jedes Byte einzeln?

WriteFile(HCom,S,Anzahl,test,nil) sendet Dir doch auch den ganzen
Puffer auf einmal.

Steffen
Gast #61994
Lesenswert?
• ▲
▼
ich verwende die komponente SerialPortNG. Warscheinlich ist das
einfacher als sich selbst um alles kümmern zu müssen.

kann den link raussuchen, aber müsste recht schnell auf der delphi
super page poland zu finden sein
Gast #61995
Lesenswert?
• ▲
▼
Dann verstehe ich aber nicht, warum Du mit WriteFile die Daten
rausschickst. Stellt die Komponente da keine Funktionen zur Verfügung?

So wild ist das Senden und Empfangen über die serielle Schnittstelle
nicht. Das machen im Prinzip alles die Windows API Funktionen.

Schau dir mal folgende Funktionen an:

CreateFile, SetupComm, SetCommMask, EscapeCommFunction

Nach Einmaliger Initialisierung kannst Du mit WriteFile Daten schreiben
und mit Readfile Daten lesen.

Steffen
Gast #61997
Lesenswert?
• ▲
▼
Ich verwende immer folgende Einstellungen:

CommTimeouts.ReadIntervalTimeout:=4;
CommTimeouts.ReadTotalTimeoutMultiplier:=1;
CommTimeouts.ReadTotalTimeoutConstant:=10;
CommTimeouts.WriteTotalTimeoutMultiplier:=10;
CommTimeouts.WriteTotalTimeoutconstant:=100;
SetCommTimeouts(m2,CommTimeouts);

Wenn die Schnittstelle mit FILE_FLAG_WRITE_THROUGH geöffnet wird, dann
sind die Werte wenn ich mich recht erinnere fast egal.

Steffen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren