debain 9 -> UART -> avr

OP #5459256
Lesenswert?

Hallo,

wahrscheinlich dumme Frage, aber ich habe jetzt schon mit Google alles 
gefunden aber leider ohne Erfolg. Ich will einem Mikrocontroller Zeichen 
per Seriell senden, per Minicom geht das auch. Aber mit...
1
echo "tuwas" > /dev/ttyUSB0

geht nix..
in Minicom Einstellung 19200 8n1 keine Flow Control..

Was ist da Falsch?
1
stty -a < /dev/ttyUSB0
2
speed 19200 baud; rows 0; columns 0; line = 0;
3
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
4
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
5
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 5;
6
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
7
ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
8
-iuclc -ixany -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
11
-echoctl -echoke -flusho -extproc

Gruß

Oliver
OP #5459285
Lesenswert?

Code im ATMEGA8:
1
ISR(USART_RXC_vect)
2
{
3
  rData = UDR;
4
  if (rData == '\r')
5
  {
6
    msg[count_char] = '\0';
7
    count_char = 0;
8
      uart_str_complete = 1;
9
  }
10
  else
11
  {
12
    msg[count_char] = rData;
13
    count_char++;
14
  }
15
   
16
}

in Main
1
if (uart_str_complete == 1)
2
      {
3
        
4
       if ( (msg[0] == '#') && (msg[1] == 'r'))
5
       {
6
       switch (msg[2])
7
          {
8
            case '1':
9
                                          ....


minicom -> Tippen: #r1[enter]

führt zum Erfolg.

echo "#r1" > /dev/ttyUSB0
oder
echo -n "#r1" > /dev/ttyUSB0
oder
echo -n -e "#r1\r\n" > /dev/ttyUSB0

leider nicht.

Gruß

Oliver
Gast #5459391
Lesenswert?

Der echo sendet ein \n, dein Code erwartet ein \r. Entweder deinen Code 
ändern, oder die output flags entsprechend setzen (OPOST ONLCR, s. man 
stty, insb. -NL). Die input flags sind für die Antworten. MMn ist es 
sinnvoller, den Code anzupassen.

Btw, man sieht das sehr häufig, dass Leute davon ausgehen, dass 
termio-settings über mehrere open/close hinweg erhalten bleiben. Das ist 
nicht garantiert! Auch werden einige Steuerleitungen beim close 
deaktiviert und evtl auch noch nicht gesendete Zeichen verworfen. Besser 
ist es, das Gerät einmal zu öffnen und dann alles mit dem einen 
Filehandle zu machen. Z.B. so:
1
#/bin/sh
2
exec 4<>/dev/ttyUSB0 # open tty once on fd 4
3

4
msg() { echo >&2 "*** $*"; }
5

6
msg "Setting up tty"
7
stty <&4 sane 19200 -echo -isig # sane includes inlcr opost onlcr
8

9
msg "Sending welcome"
10
echo >&4 "Hello World"
11

12
msg "Reading reply"
13
read <&4 a
14
msg "Got '$a'"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren