UART am PC

Gast #61992
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.