Forum: Mikrocontroller und Digitale Elektronik debain 9 -> UART -> avr


von Oliver R. (roliver75)


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

von devzero (Gast)


Lesenswert?

Du sendest so ein newline mit, wie wertest du aus? Mit -n ist es ohne.

von Oliver R. (roliver75)


Lesenswert?

ja, in minicom sende ich ja auch das "enter" mit.
Habe aber schon beides getestet, geht mit -n und ohne nicht.

von devzero (Gast)


Lesenswert?

Auch wirklich nur \n oder gar \r\n? Wie testest Du mit dem AVR? 
Stringvergleich?

von Oliver R. (roliver75)


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

von Stefan F. (Gast)


Lesenswert?

Hast du das mal als root User probiert? Vor ein paar Monaten hatte ich 
das unter Debian 9 auf Anhieb hinbekommen. Ich musste nur die vorher die 
Baudrate mit stty einstellen.

von Oliver R. (roliver75)


Lesenswert?

Hallo,

ja, als root, speed 19200 sollte doch eingestellt sein.
Sollte später in script laufen.

Gruß

Oliver

von Harry L. (mysth)


Lesenswert?

CTS/RTS abgeschaltet?
Ansonsten CTS<->RTS brücken.

von devzero (Gast)


Lesenswert?

Schau dir inlcr bzw. igncr an. Dann einfach echo ohne -n und \r bzw \n 
gehampel.

Du wertest \r aus, was vermutlich nicht rausgeht..

von devzero (Gast)


Lesenswert?

Harry L. schrieb:
> CTS/RTS abgeschaltet?
> Ansonsten CTS<->RTS brücken.

Steht doch oben.
-crtscts

von Oliver R. (roliver75)


Lesenswert?

devzero schrieb:
> Schau dir inlcr bzw. igncr an. Dann einfach echo ohne -n und \r bzw \n
> gehampel.

Danke für den Tip, bei mir steht doch -igncr drin, aber egal. Verstehe 
jetzt nicht wie ich das \r sende.
Meine Lösung ist:
1
if ((rData == '\r') || (rData == '\n'))
Danke an "devzero"

Gruß Oliver

von foobar (Gast)


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'"

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.