Forum: PC-Programmierung stty minicom cat uart mega32-Problem


von Michael X. (migmicha)


Lesenswert?

Sorry, aber ich komme echt nicht weiter.
Auf dem Mega32 läuft ein Programm, welches im Sekundentakt abwechselnd 
"1" und "x" sendet. Das Hyperterminal mit Windows auf dem Zweitrechner 
zeigt das auch genau so an.
Nur mit Linux geht es nicht ganz so gut. :(

Einstellungen:
1
~$ stty -F /dev/ttyS0
2
speed 38400 baud; line = 0;
3
min = 1; time = 5;
4
ignbrk -brkint -icrnl -imaxbel
5
-opost -onlcr
6
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
1
~$ setserial /dev/ttyS0
2
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

Und das Ergebnis:
1
~$ cat /dev/ttyS0
2
���
Dieses Symbol � erscheint im Sekundentakt.

Mit minicom sieht es nicht anders aus, wobei mir "cat" erstmal lieber 
wäre. minicom finde ich kompliziert einzustellen, zur Not geht das aber 
auch.

Es ist offensichtlich eine falsche Einstellung, Daten kommen an, 
Hyperterminal mit anderem Betriebssystem geht.
Ich weiß nur nicht was falsch ist und wäre für Hilfe dankbar. :)

von yalu (Gast)


Lesenswert?

Was sind denn deine Einstellungen auf Mega32-Seite (Baudrate, Anzahl
Datenbits, Parität und Anzahl Stoppbits)?

Mit

  stty -aF /dev/ttyS0

bekommst du eine vollständige Anzeige aller auf Linux-Seite
eingestellten Schnittstelleparameter. Vielleicht kannst du einen
Unterschied finden.

Ansonsten:

  od /dev/ttyS0

zeigt die empfangenen Daten oktal an. Dann muss man nicht raten, was mit
dem � gemeint ist. Vielleicht lässt dies einen Rückschluss auf die
Fehlerursache zu.

von Michael X. (migmicha)


Lesenswert?

yalu wrote:
> Was sind denn deine Einstellungen auf Mega32-Seite (Baudrate, Anzahl
> Datenbits, Parität und Anzahl Stoppbits)?
>
Ich halte mich weitgehend an das Tutorial und habe sonst nichts am µC 
verändert.
Im Hyperterminal funktioniert:
Baudrate: 38400, 8 Datenbits, keine Parität, 1 Stopbit, keine 
Flußkontrolle
=> "8N1"


Vielleicht seht ihr das auf Anhieb besser, ich schaue mir das gerade an.
1
~$ stty -aF /dev/ttyS0
2
speed 38400 baud; rows 0; columns 0; line = 0;
3
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
4
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
5
flush = ^O; min = 1; time = 0;
6
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
7
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
8
-imaxbel -iutf8
9
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
10
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl
11
-echoke

> Ansonsten:
>
>   od /dev/ttyS0
>
1
~$ od /dev/ttyS0
2
0000000 176000 170034 000340 016374 160360 176000 170034 000340
3
0000020 016374 160360 176000 170034 000340 016374 160360 176000
4
0000040 170034 000340 016374 160360 176000 170034 000340 016374
5
0000060 160360 176000 170034 000340 016374 160360 176000 170034
6
0000100 000340 016374 160360 176000 170034 000340 016374 160360

von Michael X. (migmicha)


Lesenswert?

kaum macht man es richtig...
warum einfach, wenn es auch kompliziert geht
1
~$ sudo setserial /dev/ttyS0 baud_base 115200 spd_normal
"��" wird zu "1x" :-)

von yalu (Gast)


Lesenswert?

Ich wollte gerade posten, dass die Baudrate auf deinem PC um den Faktor
3 zu hoch, also auf 115200 Baud gesetzt ist. Das würde deinen Oktdump
erklären. Kann es sein, dass du vorher mit

  setserial /dev/ttyS0 spd_vhi

oder

  setserial /dev/ttyS0 baud_base 38400

o.ä. herumexperimentiert hast?

von Michael X. (migmicha)


Lesenswert?

yalu wrote:

>   setserial /dev/ttyS0 baud_base 38400
>
genau das
Ich dachte, dass man so die Baudrate verringert, offensichtlich 
passierte das jedoch nicht.
Die andere Option habe ich erst jetzt gefunden.

von Michael X. (migmicha)


Lesenswert?

Hi, ich nochmal :)
Ich habe gestern Abend und heute noch etwas experimentiert. Soweit 
klappt alles. Jedoch nervt es mich, dass mein Hauptrechner nur 1x COM 
besitzt und ich zum Üben auf den Zweitrechner ausweichen muß.
Allerdings hat der Hauptrechner noch einen IRDA-Anschluß mit RX und TX.
Ich habe es probiert und im Prinzip kommt etwas an, aber siehe oben, 
nichts vernünftiges, aber immer gleiche Oktalwerte.

Kennt sich jemand mit der Spezifikation aus und kann mir sagen, welche 
Baudrate, Wortlänge, Parität usw. funktionieren könnte?

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.