www.mikrocontroller.net

Forum: PC-Programmierung Debian Sarge und RS232/ttyS0 = Verzweiflung!


Autor: Peter Ganser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hiiilfeeeeeee!

Ich dreh langsam ab hier! Ich benutzte Debian Sarge und versuche
RS232/ttyS0 - Daten vom Mikrokontroller einzulesen - funktioniert auch
ganz super (wie schon bei DOS und W98)...

DOCH stellt euch vor aus der RS232 wird von der PC-Seite etwas zum MC
gesendet!!!! Mein gcc-Programm öffnet das ttyS0-Device mit "fopen"
und dem Attribut "nur lesen"... und ich schreibe (vom PC) auch
nichts. Habe es auch schon mit "open()" versucht - das selbe
Ergebnis. Fragt mich nicht WAS da rauskommt, es dauert auf jeden Fall
ca. 5x so lange wie mein Zeichen(vom MC) und sieht nach einer 2-fachen
Wiederholung aus...

Gibts da draussen irgendeinen Linux-Freak dem das was sagt? Ich bin neu
bei Linux/Debian und wäre für jede Idee unglaublich dankbar. Habe sogar
schon mit "stty" rumexperimentiert weil ich dachte es wird ein
Softwarehandshake (XON/XOFF) gesendet, doch das wars wohl auch nicht.
Mir fällt echt nix mehr ein... heul *schnüff*

Ambodenzerstörtpeter

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmh
wie schnell ist denn
echo hallo > /dev/ttys1??

ueebr den umweg kannst du auch daten ueber die rs232 senden

Autor: Peter Ganser (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
???????? wie schnell???? Die Schnittstelle ist momentan auf 38.4kb
eingestellt und "hallo" wird völlig problemlos gesendet. (auf
/dev/ttyS0 weil /dev/ttyS1 habe ich nicht).

Doch mein Problem ist ja das "automatische" und ungewollte senden von
irgendwas beim ordnungsgemässem Empfang vom Daten. Wenn ich gewollt
Daten vom PC sende werden diese übrigens auch übertragen - mit der
ungewollten Übertragung von ???? Man kann sich vorstellen, dass man
damit Probleme hat einem Mikrocontroller etwas mitzuteilen.

Ich hänge noch ein Miniprogramm an bei dem der Fehler? schon
auftritt...
Peter

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter

Du koenntest erst mal probieren herauszubekommen was da gesendet
wird,in dem der Mikrocontroller das ganze zurücksendet.
möglicherweise ist ein serielles Terminal aktiv (sollte in
/etc/inittab
stehen)
probiere doch mal den Port lesend und schreibend zu öffnen ("r+")
sollte da noch ein Programm sein was zugreift sollte das scheitern
zur not kannst du ein fflush machen.
Zur Portabilität würde es sich empfehlen genau anzugeben ob Text oder
Binaermodus erwünscht ist,wenn ich mich recht entsinne behandeln das
Linux und Windows unterschiedlich.

Autor: Peter Ganser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Wolfram!

Vielen Dank für deine Anregungen:
Das was da von Debian gesendet wird ist nicht "decodierbar". Wenn
sieht es eher nach 9600Baud wie eingestellte 38400B aus... und auch
dann ist es nicht "lesbar". Klingt blöd, doch ich kann dir nicht
erklären was ich da auf dem Oszilloskop sehe.. sieht schon
einigermassen synchronisiert aus, und meisst wird der selbe "Wert"
übertragen, doch die Anzahl schwankt und ist nicht synchron mit meinen
Mikrocontroller-Daten (Hahahah - hört sich wirklich sehr fachmännisch
an grins *dem Wahnsinn nahe*)

In /etc/inittab ist kein Terminal aktiv

Text/Binärmodus -> Nach meinem bisherigen Wissensstand gibt es bei
Linux nur Binärdateien. Doch auch alle Kombinationen "r+" "r+b"
"w+".... ändern nichts.

Auch fflush ändert nichts...

Trotzdem Danke und ein schönes Wochende!
Peter

Autor: Lanius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht wird eine serielle Maus gesucht?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter
Serielle Schnittstelle öffnet mit z.B mit:

fd = open("/dev/ttyS0", O_RDWR)

nichts mit fopen und "r+".
Dann muss die serielle Schnittstelle konfiguriert werden:

struct termios term_attr;
term_attr.c_cflag = B38400 | CS8  | CLOCAL | CREAD;
term_attr.c_iflag = 0;
term_attr.c_oflag = 0;
term_attr.c_lflag = 0;
tcsetattr(fd, TCSAFLUSH, &term_attr);

Jetzt kann geschrieben und gelesen werden:

write(fd,senddata_buffer,8);//8byte geschrieben
read(fd,revdata_buffer,8);//8byte gelesen

Dann serielle Schnittstelle schleissen:

close(fd);


Mann sollte auch alles mit if überprüfen, aber hier habe ich das
weggelassen.Dieser Code funktioniert schon, ob wohl da noch die
Funktion select(..) fiehl, damit kannst du dich später auseinander
setzen.

Ansonsten, diesen Code benutze ich momentan zu Komunikation zwischen
MCU<->PC:
http://www1.kielnet.net/home/marc.in/pc-oszillosko...

Ein zimmlich genaue beschreibung wie man unter Linux (posix) auf
serielle Schnittstelle zugreift findest du hier:
http://www.easysw.com/~mike/serial/serial.html

Leider Englisch, dann gleich Online-Wörterbuch dazu:
http://dict.tu-chemnitz.de/

Autor: Peter Ganser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Lanius und besonders Martin!

vielen Dank für eure Antworten! Ich habe meinen Fehler gefunden! Ich
musste mit "stty -F /dev/ttyS0 -echo" ein Echo?!? deaktivieren. Da
ich - um Betriebssystemrumwursteleien meinerseits auszuschliessen -
Sarge neu installierte, müsste dieses "echo-Problem" jedoch bei jedem
auftreten der Daten über die Seriellen Schnittstellen einliest...
zumindest bei Debian Sarge.

Und auch mit open(), denn damit habe ich es auch schon probiert.

Puh - endlich kanns mit dem Seismographen WEITERgehen!

Viiiieeeelen Dank an alle und ich wünsche euch ein schönes
Wochenende!!!

Peter

Autor: Peter Ganser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja Martin,

um auf dein "transfer.h" zugreifen zu können müsste ich mich über
KielNet einwählen - von einem anderen Provider aus klappts nicht...
Peter

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>um auf dein "transfer.h".....
Ich denke das lag an der Berechtigung, die war falsch gesetzt.

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.