www.mikrocontroller.net

Forum: PC-Programmierung Probleme mit serieller Schnittstelle


Autor: Lienen0102 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Gemeinde,
ich habe ein Problem mit meiner seriellen Schnittstelle und/oder mit dem 
Programm.
Ich möchte das eingefügte Programm nutzen, um Daten aus einer Wärmpumpe 
zu übertragen.
Wenn ich jetzt einen normalen Pc verwende, übertragt er mir die Daten 
auch einwandfrei. Nun besteht bei einem gewöhnlichen Pc jedoch das 
Problem, dass dieser eindeutig zu viel Strom verbraucht. Also möchte ich 
das ganze mit einer NSLU2 realisieren. Debian habe ich auch schon 
"draufgeflasht".
Die Wärmpumpe war einerseits mit der seriellen Schnittstelle verbunden, 
die sich intern befindet (über einen Pegel-converter) und beim x. 
Versuch auch über einen Serial-USB Adapter. Beide Ergebnisse brachten 
nur ein Timeout.
Könnt ihr mir sagen, wo das Problem liegt?

P.S.: Das Programm sollte sich eigentlich im Anhang befinden.

Gruß,
Lienen

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus gen.c:
  r = select(fd+1, &inFds, NULL, NULL, &t);

  if (r == 1)
  {
    l=read (fd, b, 1);

Ich denke, Deine Prüfung des Rückkehrwerts (r) ist falsch.  Zunächst 
solltest Du einmal getrennt auf -1 testen, um Fehlermeldungen 
abzufangen.  Timeout ist es nur, wenn 0 zurückgegeben wird; Du meldest 
aber Timeout bei allen Werten != 1.

Dann aber sagt der Rückkehrwert (r) (wenn kein Fehler aufgetreten ist) 
aus, wie viele Bits in allen drei Sets (also auch denen, an denen Du 
nicht interessiert bist und die NULL sind) gesetzt sind.  Da Du zum 
Lesen und Schreiben geöffnet hast, sind das mindestens mal schon 2 Bits, 
also würde ich 2 erwarten und auf > 0 prüfen.

EDIT:  Streiche den letzten Absatz; ich habe gerade nachgeschaut und mit 
NULL übergebene Sets zählen nicht.  Dennoch würde ich anders auf Fehler 
testen und Fehler nicht dem Timeout zuschlagen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Beide Ergebnisse brachten nur ein Timeout.

Bei dir sind alle Rückgabewerte außer 1 ein Timeout. Vielleicht gibt es 
aber auch irgendeinen Fehler, den du deshalb nicht bemerkst. Teste mal, 
ob der Rückgabewert -1 ist und lass dir dann die Fehlermeldung ausgeben.
Übrigens: Wozu dienen diese Massen an stty-Aufrufen?

Autor: Christian L. (christianlienen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Bemühungen :)
Das Problem hat sich jedoch selbst aus der Welt geschafft.
Ich habe nochmal alle Verweise auf die Serielle Schnittstelle überprüft 
und musste feststellen, dass nicht alle auf ttyUSB0, sondern ein Punkt 
noch auf dem Ursprünglichen ttyS0 eingestellt war.
Trotzdem Danke!

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.