mikrocontroller.net

Forum: PC-Programmierung Serielle Schnittstelle


Autor: Christian Woltz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein Programm in C geschrieben welches mir Datenpakete die an
der seriellen Schnittstelle ankommen auswertet.
Nun habe ich das Problem das ab und zu eine 0 gelesen wird, die aber
nicht vorhanden ist bzw. sein soll.

Ich finde da keinen Fehler,
anbei mal die Lese Funktion villeicht findet von euch den Fehler ...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du nen Wackler am Kabel? RS232 ist da immer sehr empfindlich, das
Prellen eines Kontaktes reicht oft schon für solche Effekte aus.

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Null mal den DCB vor der benutzung. Es könnte sein, dass dir da noch
irgendein Müll drinsteht, der dir ungewollte FUnktionen aktiviert

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder besser schau dir den DCB an den du benutzt, wenn Fehler bei der
Übertragung auftreten kann ein Füllzeichen eingestellt werden, das
statt des Fehlers eingefügt wird. Im übrigen solltest du überprüfen was
die Funktionen zurückliefern, das können nämlich Fehler ,ala kann
Comport nicht öffnen...

Autor: Christian Woltz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was mich halt irritiert ist, das es nur eine 0 ist und nur ab und zu.
Einen Wackler kann ich ausschliesen, werde es aber nochmal testen
sicher ist sicher ...

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Wolfram schon sagte hast du evtl eine Funktion aktiviert, die die
Fehlerhafte Bytes (z.b Parity Fehler, denn das hast du ja aktiviert)
mit einem bestimmten, einstellbaren Fehlermarker ersetzt. In deinem
Fall wäre das dann die 0. Um das auszuschiessen, sollte man ALLE
Datenstrukturen, die man nicht vollständig ausfüllt vor der benutzung
auf 0 setzten

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder den Fehler für die fehlerhafte Übertragung finden, bei 19200 und in
1. Test und du siehst jetzt schon Fehler da wird es nicht sehr schön
Daten zu übertragen. Wenn es ein Mikrocontroller ist, der an den PC
sendet, würde ich sagen du bist einer der versucht mit keinem
Baudratenquarz zu arbeiten sondern mit internen Oszillator. Das
funktioniert aber es kommen dann halt so alle 5..20 Zeichen ein
Fehler,
besonders wenn man nur mit 1 Stopbit arbeitet.
Bei der Schnittstelleninitialisierung solltest du noch die Puffergröße
festlegen und wenn du auf Geschwindigkeit kommen willst, lies die Daten
im Block und nicht einzeln.

Autor: Andreas Sag ich nicht (andreash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir Dein Programm nicht im Detail angesehen sondern nur kurz
mit dem was ich vor längerer Zeit mal gemacht habe verglichen.

Bei mir ist es so: SetCommState(iCommId,&fDCB)
Bei Dir aber dagegen: SetCommState(&iCommId,&fDCB)

Ausserdem würde ich nicht eingabe zurückgeben sondern auch überprüfen
ob tatsächlich ein Zeichen gekommen ist (dwRead).

Weiss nicht ob einer der beiden der Fehler ist.

Grüße
Andreas

Autor: Christian Woltz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also dwRead liefert immer ne 1... Also werden Zeichen auch gelesen .

Ein Error Char hab ich ja auch nicht definiert. Von daher dürfte das
auch nicht sein, oder ist evt. Standart ?

Wie kann ich den Puffer eigentlich vergrößern ?

@ Wolfram
Meinst Du es wäre besser anstelle eines Bytes z.b. gleich 10 zu lesen ?
Hätte halt den Vorteil das die Funktion nur jedes 1o. mal aufgerufen
wird und damit 'Zeit' spart.

Gruss

Christian

Autor: Christian Woltz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
habe den Puffer vergrößert nun klappt es. Ausserdem habe ich in der
Initialisierung folgendes eingefügt:
dcb.fAbortOnError = 1;
um sicher zu gehen das er bei einem Fehler auch abricht und nicht sonst
was veranstaltet ....

Danke für eure Hilfe und Hinweise ;-)))

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.