mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART am PC


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was stelle ich am besten bei den Timeouts ein?
(SetCommTimeouts)

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.