Forum: PC-Programmierung /dev/ttyS1 Probleme mit Baudrate


von Michael J. (jogibaer)


Lesenswert?

Hallo,

ich habe da ein Problem, wo ich nicht weiterkomme.

Ich benutze einen AVR Mikrokontroller zum Senden von Daten
auf die serielle Schnittstelle meines Linux PC's.

Zuerst stellte ich im AVR eine Baudrate von 1200 ein, aber unter Linux
bekomme ich per

>cat /dev/ttyS1

keine Daten angezeigt. Die Schnittstelle habe ich mit

>stty 1200 cs8 -parenb -crtscts -echo -F /dev/ttyS1

konfiguriert.
Da auch auf dem Rechner W2K drauf ist, konnte ich feststellen, daß
jedenfalls bei Hyperterminal die Zeichen bei eingestellten 1200 Baud
korrekt ankommen.

Unter Linux ändert sich die Interruptanzahl der Schnittstelle
(grep serial /proc/interrupts), aber es werden keine Zeichen
angezeigt.

Jetzt habe ich die Baudrate des AVR's auf 115000 erhöht, und plötzlich
erhalte ich auch unter Linux die korrekten Zeichen, obwohl die Baudrate
unter Linux per stty immer noch bei 1200 steht .

Wieder Windows gebootet, und unter Hyperterminal sind es auch
115000 Baud, wo die Zeichen korrekt ankommen.

Jetzt habe ich mal unter Linux die Baudrate abgeändert, und schon
funktioniert es nicht mehr -> meine Einstellungen werden anscheinend
übernommen .

Warum muß ich unter Linux 1200 Baud einstellen, damit eine Baudrate von
115000 Baud empfangen wird ????

Der AVR läuft definitiv mit externem Quarz bei 16Mhz.

echt ratlos

Jogibär

von Thomas (Gast)


Lesenswert?

Also ich habe bei mir unter Linux die Einstellungen für die serielle
folgendermaßen vorgenommen:

stty ospeed 1200 ispeed 1200 -crtscts -parenb cs8 < /dev/ttyS0

Ich weiß nicht ob es einen Unterschied macht die Einstellugnen mittels
der -F Option einzustellen. Bei mir funktioniert es jedenfalls so.
Ob die Einstellungen übernommen wurden kann man sich auch mit:

stty -a < /dev/ttyS0

anzeigen lassen.
Probleme treten auf, wenn noch andere Programme im Hintergrund laufen
die auf die serielle Schnittstelle zugreifen. Das "Mitlauschen"
mittels cat hat bei mir nicht funktioniert.

von Thomas (Gast)


Lesenswert?

Mit dem -F Schalter funktioniert es auch, die hast es nur in der
falschen Reihenfolge benutzt.
Mit:

stty  -F /dev/ttyS1 1200 cs8 -parenb -crtscts -echo

funktioniert die Einstellung der Schnittstelle ebenfalls.

PS:
Eigentlich ist die Standardantwort auf Linuxfragen ja:
RTFM ;-)

von Jogibär (Gast)


Lesenswert?

Hallo,

weder noch.

Bei meinem Laptop funktioniert es wie gewünscht mit meinen
Einstellungen.
Die Ursache scheint zu sein, daß in meinem PC eine serielle
Schnittstellenkarte eingebaut ist.
Wie ich im Internet gelesen habe, kann es sein, daß diese karte mit
einer anderen Frequenz arbeitet, als es Linux annimmt.
Deshalb muß man irgendwie Linux sagen, welchen Teiler er nehmen soll.
Ich weiß aber nicht, ob dies was mit setserial DIVISOR zu tun hat.

Jogibär

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.