Hallo, ich möchte mit stty eine serielle Schnittstelle konfigurieren um Bytes mit einem Microcontroller auszutauschen. ( 8 Datenbits, 1 Stoppbit, Parity: keine, also 8N1) Schon beim setzen der Baudrate erscheint eine Fehlermeldung, aus der ich nicht schlau werde. Google hilft mir hier auch nicht viel weiter. linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600 stty: /dev/ttyUSB0: Unpassender IOCTL (I/O-Control) für das Gerät linux-u98m:/home/chris # Kann jemand helfen?
Hast Du die erforderlichen Rechte für das Gerät? crw-rw-rw- 1 root dialout 188, 0 Mai 7 13:37 /dev/ttyUSB0 crw-rw-rw- 1 root dialout 188, 1 Mai 7 13:37 /dev/ttyUSB1 bei mir funktioniert es ohne Fehlermeldung. mfG
Ja das Gerät hat root - Rechte linux-u98m:/home/chris # ls -l /dev/ttyUSB* -rw-rw-rw- 1 root root 0 7. Mai 13:05 /dev/ttyUSB0 linux-u98m:/home/chris #
Bist du sicher, du hast den richtigen Stick erwischt? Schauen, ob beim einstecken ein /dev/serial/by-id/xyz erscheint. Sollte ein Link auf /dev/ttyUSB0 sein. Meist findet Google etwas, wenn du nach der Id suchst. Mit lsusb bekommst du eine Id in der Art 1058:10b8 .
Jetzt funktionierts. Wenn ich mir jetzt allerdings die gesendeten Daten vom µC ansehen möchte, erscheint nix sinnvolles... linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600 linux-u98m:/home/chris # stty -F /dev/ttyUSB0 raw linux-u98m:/home/chris # cat < /dev/ttyUSB0 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z [1]+ Angehalten cat < /dev/ttyUSB0 linux-u98m:/home/chris # cat < /dev/ttyUSB0 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z [2]+ Angehalten cat < /dev/ttyUSB0 linux-u98m:/home/chris # Der Contoller sendet 0.
Die Ziffer "0" oder alle Bits auf 0? "@" ist binär 01000000. Rs232 sendet umgekehrt, also 0000001. Da liegt erst mal die Vermutung nahe, dein MC sendet doppelt so schnell und die 1 ist das Startbit. Wenn du kein Oszilloskop hast, musst du wohl verschiedene Bitmuster senden, aus denen sich erahnen lässt, was da nicht zusammen passt.
Der Controller ist auf 9600 Baud eingestellt. #define F_CPU 16000000 #define MaxInput 2 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile unsigned int i = 0; int main(void) { TIMSK0 |= (1<<TOIE0); TCCR0A = 0b00000000; TCCR0B = 0b00000101; UBRR0 = 103; //9600 Baud at 16MHz UCSR0C = 0b00000110; UCSR0B |= (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0); //Pullup für RX PORTD |= ( 1<<0 ); sei(); while (1) { while (!(UCSR0A & (1<<UDRE0))) {} UDR0 = i; _delay_ms(200); } return 0; } ISR(USART_RX_vect) { i = UDR0; } ISR(TIMER0_OVF_vect) { Startcondition=1; }
Fuse falsch eingestellt und der Controller läuft mit internen 8 MHz?
0x4E schrieb: > Ja das Gerät hat root - Rechte Du meinst das Gerät benötigt Root-Rechte. Und diese Root-Rechte hat der User Chris auch?
0x4E schrieb: > Ja das Gerät hat root - Rechte > > linux-u98m:/home/chris # ls -l /dev/ttyUSB* > -rw-rw-rw- 1 root root 0 7. Mai 13:05 /dev/ttyUSB0 > linux-u98m:/home/chris # Das sieht aus, als ob das eine reguläre Datei ist und kein Gerät! mfG
Das sieht schon sehr nach falscher Baudrate aus. Aber dein Code ist offenbar nicht echt, denn der dürfte so nicht durch den Compiler gehen, denn diese Variable: > Startcondition=1; ist nirgends definiert. 0x4E schrieb: > linux-u98m:/home/chris # stty -F /dev/ttyUSB0 9600 > linux-u98m:/home/chris # stty -F /dev/ttyUSB0 raw > linux-u98m:/home/chris # cat < /dev/ttyUSB0 > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z > [1]+ Angehalten cat < /dev/ttyUSB0 > linux-u98m:/home/chris # cat < /dev/ttyUSB0 > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@^Z > [2]+ Angehalten cat < /dev/ttyUSB0 > linux-u98m:/home/chris # Du solltest dir angewöhnen, die Programme zu beenden und nicht nur zu suspendieren. Du hast hier am Ende zwei angehaltene cat-Prozesse, die darauf warten, dass du sie weiterlaufen lässt. Das könnte übrigens auch zu Fehlern führen, wenn du angehaltene Prozesse hast, die die Schnittstelle noch offen haben und du parallel dazu neue startest, die die gleiche Schnittstelle öffnen. Abbrechen tut man eine Programm mit Ctrl+C, nicht mit Ctrl+Z. Und beim cat kannst du übrigens das < weglassen. uiop schrieb: > 0x4E schrieb: >> Ja das Gerät hat root - Rechte > Du meinst das Gerät benötigt Root-Rechte. > Und diese Root-Rechte hat der User Chris auch? Root-Rechte hat nur root. Deshalb heißen sie ja so. Wie man aber sieht, haben alle Lese- und Schreibberechtigung, nicht nur root. R. M. schrieb: > Das sieht aus, als ob das eine reguläre Datei ist und kein Gerät! Allerdings, und zwar eine leere Datei. Dass da Daten rauskommen, kann also nicht sein.
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.