Hallo Zusammen Ich habe einen AVR Atmega32 und möchte die serielle Schnittstelle benutzen. Dafür habe ich ein USB-Serial Adapter gekauft (pl2303). Auf Windows funktioniert dies mit dem Terminalprogramm von Br@y tadellos. Mit Linux habe ich noch ein bisschen Schwierigkeiten. Wie unten aufgelistet habe ich versucht die Treiber zu laden und der Adapter wird auch erkannt. Nur wird mir nicht der richtige Text angezeigt sondern irgend so ein Zeichengewirr... root@netbook:/home/usr# lsmod Module Size Used by pl2303 15910 0 usbserial 33694 1 pl2303 [ 1549.204162] usb 4-1: new full speed USB device using uhci_hcd and address 13 [ 1549.354791] usb 4-1: configuration #1 chosen from 1 choice [ 1549.357743] usbserial_generic 4-1:1.0: generic converter detected [ 1549.358126] usb 4-1: generic converter now attached to ttyUSB0 root@netbook:/home/usr# cat /dev/ttyUSB0 f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx��fx`f��� f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx��fx`f��� f~��`���x��fx��fx`f���f~��`���x��fx��fx`f��� sollte eigentlich heissen "Switch 2 pressed" ein par mal hintereinander. Hat irgend jemand eine Ahnung was hier das Problem ist? Vielen Dank für die Hilfe!! Grüsse AVR_noob
Für sowas nutze ich immer picocom: picocom /dev/ttyUSB0 -b baudrate Gruß Skriptkiddy
1 | usr@netbook:~$ picocom /dev/ttyUSB0 -b 9600 |
2 | picocom v1.4 |
3 | |
4 | port is : /dev/ttyUSB0 |
5 | flowcontrol : none |
6 | baudrate is : 9600 |
7 | parity is : none |
8 | databits are : 8 |
9 | escape is : C-a |
10 | noinit is : no |
11 | noreset is : no |
12 | nolock is : no |
13 | send_cmd is : ascii_xfr -s -v -l10 |
14 | receive_cmd is : rz -vv |
15 | |
16 | Terminal ready |
17 | f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx |
18 | �fx`f���f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`� |
19 | �x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx��fx`f�� |
20 | f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx |
21 | �fx`f��� |
Immer noch dasselbe, aber danke trotzdem! Habe echt keine Ahnung was das soll :)
ich denke schon. ist wie folgt initialisiert //Initialize the USART: UCSRB |= (1<<RXEN); //Receiver enable UCSRB |= (1<<TXEN); //Transmitter enable UCSRC |= ((1<<UCSZ0) | (1<<UCSZ1)); //8 Data Bits, 1 Stop Bit, Asynchronous UBRRH = 0; //Write UBRRH Register UBRRL = 103; //9600 Baud //Write UBRRL Register
Das ganze sollte eigentlich schon funktionieren, da es das auf windoof auch tut. ausprobieren tue ich dies so: @main if(!(PINA & (1<<0))) //if switch 2 pressed { UART_send("Switch 2 pressed"); } void UART_send(char *text) { while(*text) //End of string = 0 { while (!(UCSRA & (1<<UDRE))) // Wait until Buffer is empty - ready to send. { } UDR = *text; text++; } //Next line in the terminal: while (!(UCSRA & (1<<UDRE))) // Wait until Buffer is empty - ready to send. { } UDR = 0x0D; //Carriage Return while (!(UCSRA & (1<<UDRE))) // Wait until Buffer is empty - ready to send. { } UDR = 0x0A; //Line Feed }
> Habe echt keine Ahnung was das soll :)
Die Baudrate auf dem PC ist wesentlich höher als auf dem ATmega.
Vergleiche mal mit dem Oszi die Bitdauer beim Senden eines Zeichens vom
µC mit der vom PC.
>Vergleiche mal mit dem Oszi die Bitdauer beim Senden eines Zeichens vom
µC mit der vom PC.
Hab leider kein oszi.
>Die Baudrate auf dem PC ist wesentlich höher
Ist dies für euch klar, das einfach was mit der baudrate nicht stimmt?
weil auf win funktionierts ja und dort hab ich auch 9600 eingestellt...
nur wer will schon desswegen die ganze Zeit windows brauchen... Das muss auch auf linux gehen!!
Versuchs mal mit: picocom /dev/ttyUSB0 -b 1200 Gruß Skriptkiddy
usr@netbook:~$ picocom /dev/ttyUSB0 -b 1200 picocom v1.4 port is : /dev/ttyUSB0 flowcontrol : none baudrate is : 1200 parity is : none databits are : 8 escape is : C-a noinit is : no noreset is : no nolock is : no send_cmd is : ascii_xfr -s -v -l10 receive_cmd is : rz -vv Terminal ready f~��`���x��fx��fx`f���f~��`���x��fx��fx`f���f~��`���x��fx
Das sieht doch genau so aus. Das Setzen der Baudrate des USB-RS232 Wandlers klappt wohl nicht. Treiber kaputt?
>Das sieht doch genau so aus.
Ja das sehe ich auch :)
die treiber habe ich so geladen:
modprobe usbserial vendor=0x... product=0x....
modprobe pl2303
den pl2303 lädt es auch aber irgendwie verwendet es ihn nicht.
kann ich das bei usbserial irgend wie einstellen?
Gruss
..und jetzt versuchs noch mit 600 baud.. Wenn das nix bringt dann hift als nächstes ein Oszi. Oder ein Brutforceangriff. HTH
AVR_noob schrieb: > die treiber habe ich so geladen: > modprobe usbserial vendor=0x... product=0x.... > modprobe pl2303 Was für ein steinzeitliches Linux bzw. was für einen schrägen USB/Seriell Wandler hast du? Normalerweise erledigt das udev automatisch.
>..und jetzt versuchs noch mit 600 baud..
bringt nichts...
glaube es liegt wohl an den Treibern aber da ich nur glaube, hoffe ich
aufs forum ;)
>Was für ein steinzeitliches Linux bzw. was für einen schrägen USB/Seriell Wandler
hast du?
ubuntu 10.04 (weis ich sollet mal updaten aber so lange ist noch nicht
her)
pl 2303 von prolific
Gruss
AVR_noob schrieb: > ubuntu 10.04 (weis ich sollet mal updaten aber so lange ist noch nicht > her) 1 Jahr! (Ubuntu 11.04 ist akutell) Das ist in der Opensource-Welt ne halbe Ewigkeit.
gutgut ich update mal kurz und schau was sich dann tut... melde mich dann wieder falls es geht oder auch nicht. Gruss
Der.. > pl 2303 von prolific ..läuft hierzuworkstation (Debian) seit Jahren einwandfrei, daran (alleine) liegst also höchstwahrschenlich nicht. Irgendwo(tm) vermurskt Du was. Geh doch mal (auf AVR-Seite) alle Baudraten durch, z.B. so in der Art [pseudocode] UBRR = 1; while (1) { uart_send("ubbr: " +UBRR++); delayms(1000); } [/pseudocode] Übertragungsfehler wie oben liegen fast immer an einer falschen Baudrate, seis beim AVR oder beim PC. HTH
g457 schrieb: > Geh doch mal (auf AVR-Seite) alle Baudraten durch, z.B. so in der Art Wenn ich mich recht erinnere ist das UBRR ein 12 Bit Register. 4096 also etwas mehr als eine Stunde für sowas verschwenden? > Übertragungsfehler wie oben liegen fast immer an einer falschen > Baudrate, seis beim AVR oder beim PC. Aber nicht, wenn der String immer gleich aussieht, egal welche Baudrate am PC eingestellt wird.
>etwas mehr als eine Stunde für sowas verschwenden?
und was soll ich in dieser stunde deiner meinung nach tun?
Gruss
>> Übertragungsfehler wie oben liegen fast immer an einer falschen >> Baudrate, seis beim AVR oder beim PC. > Aber nicht, wenn der String immer gleich aussieht, egal welche Baudrate > am PC eingestellt wird. Dochebenschon, weil das Schluss nahe legt dass der TO die Baudrate am PC nicht richtig(tm) einstellt. Deswegen der Hinweis auf das durchchecken der Baudraten am ∗AVR∗ - weil dann trifft man irgendwann(tm) schon die richtige(tm) Einstellung sodass am PC (trotz möglicherweise vermurkster Konfiguration) was lesbares ankommt. Dann kann man weiter sehen. Und wenn einem eine läppische Stunde vollautomatische Fehlersuche zu lang sind dann drehe derjenige halt die Wartezeiten etwas runter. Nix für ungut.
Oder einen schnellen Vortest machen. Grob geschätzt stehen die Chancen nicht schlecht, dass er tatsächlich auf einer der üblichen Baudraten steht und nicht itrgendwo dazwischen Also: Ein Array mit den Konstanten für die üblichen Baudraten. 300, 600, 1200, 2400, 4800, 9600, 19200 (oder die Konstanten vom Compiler ausrechnen lassen, ist sowieso eleganter als da mit seltsamen Konstanten zu hantieren) und dann der Reihe nach alle durchprobieren. Wenn man dann vorher im Text auch noch die eingestellten Werte ausgibt, dann steht sogar im Klartext am Terminal, welche Baudrate funktioniert hat.
>HTH
Vielen Dank mit ubrr = 51 funktionierts.
Heist das jetzt, das ich eine baudrate von 19200 habe oder das mein
quarz keine 16MHz macht?
Gruss
AVR_noob schrieb: >>HTH > > Vielen Dank mit ubrr = 51 funktionierts. > Heist das jetzt, das ich eine baudrate von 19200 habe oder das mein > quarz keine 16MHz macht? > Wenns auf Windows funktioniert und auf Linux nicht, dann wird wohl kaum der AVR der Schuldige sein.
Vielen Dank euch allen!! Bis zum nächsten mal. Gruss AVR_noob
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.