mikrocontroller.net

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


Autor: Michael X. (migmicha)
Datum:

Bewertung
0 lesenswert
nicht 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:
~$ stty -F /dev/ttyS0
speed 38400 baud; line = 0;
min = 1; time = 5;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
~$ setserial /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

Und das Ergebnis:
~$ cat /dev/ttyS0
���
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. :)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael X. (migmicha)
Datum:

Bewertung
0 lesenswert
nicht 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.
~$ stty -aF /dev/ttyS0
speed 38400 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
-imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl
-echoke


> Ansonsten:
>
>   od /dev/ttyS0
>
~$ od /dev/ttyS0
0000000 176000 170034 000340 016374 160360 176000 170034 000340
0000020 016374 160360 176000 170034 000340 016374 160360 176000
0000040 170034 000340 016374 160360 176000 170034 000340 016374
0000060 160360 176000 170034 000340 016374 160360 176000 170034
0000100 000340 016374 160360 176000 170034 000340 016374 160360

Autor: Michael X. (migmicha)
Datum:

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael X. (migmicha)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael X. (migmicha)
Datum:

Bewertung
0 lesenswert
nicht 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?

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.