PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RNControll Serielle Verbindung mit linux



totix800
04.07.2010, 13:41
Hi,

ich spiele gerade ein bisschen mit einem RNControl Board herum und würde damit gerne über die RS232 Schnittstelle mit meinem Computer kommunizieren. Da mein Computer keine Seriellen Anschlüsse mehr hat, benutze ich einen mySmartUSB. Als Beispielprogramm hab ich jetzt erst mal das C Example aus dem Artikelbereich verwendet, da dort ja auch Informationen wie die Batteriespannung oder die Sensoren ja über die serielle Schnittstelle übermittelt werden.
Wenn ich das ganze anschließe wird mir auch wie gewünscht das Device /dev/ttyUSB0 angezeigt und ich kann mit cat darauf auch sehen, dass Daten übertragen werden. Ich bekomme aber nur wirres Zeug übermittelt:

user@laptop:~$ cat /dev/ttyUSB0
��<k0C��<k0C��<k0C���k C��<i0C��<k0C���i0C���{0C���i0C��i�<+2C�

���i��i�<+2C�

���i��i�<+2C�


Ich hab mir gedacht, dass das wahrscheinlich daran liegt, dass die Baudrate falsch eingestellt ist. Ich habe sie mit dem Befehl stty -F /dev/ttyUSB0 speed 9600 umgestellt, es ändert sich aber nichts.
Ich habe gerade erst angefangen mich mit dem ganzen zu beschäftigen, habe also wenig Ahnung davon, also auch nicht von Stop Bits und Asyncroner Übertragung und wie das eingestellt wird.
Ich hab natürlich gegoogled aber sie wirklich fündig bin ich nicht geworden, liegt aber wohl auch damit zusammen, dass die meisten Erklärungen die ich gefunden habe für Windows waren.
Könnte mir jemand sagen, wie ich meine RS232 Schnittstelle am Computer richtig konfiguriere, oder zumindest einen Verweis auf einen Artikel in dem das beschrieben wird?

Danke schonmal.
Gruß
toti

just4fun
05.07.2010, 00:00
Hi totix800,

willkommen im Board. Schau dir mal das (von meiner Website) an, vielleicht hilft es dir weiter: http://www.direcs.de/doxygen/direcsSerial_8cpp_source.html

Dort die Methoden

openAtmelPort
readAtmelPort
writeAtmelPort

Den Rest erstmal nicht (wird anderweitig genutzt)! Bei Fragen, frag!

Gruß, just4fun

totix800
05.07.2010, 20:48
HI;

danke für die Antwort. Das ganze ist ja schonmal ein anschauliches Beispiel, wie so eine Kommunikation aussehen kann, aber welche Baudrate das RNControl Board braucht, dein Beispiel ist ja durch Parameter variabel und hilft mir da jetzt leider noch nicht.

Gruß
toti

just4fun
06.07.2010, 17:31
Sorry, den Teil hatte ich überlesen. Ich nutze dieses Board: http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=64&products_id=162
Also einen Atmega 2560.

Und das/der braucht 9600, 8N1

Gruß just4fun

totix800
06.07.2010, 17:35
Hi,

Ich hab den specs vom RNControl auch irgendwo was von 8N1 gelesen, sind damit die stopbits gemeint und kann das weglassen dazu führen, dass ich dann solche falschen daten bekomme? Ich weiss leider immer noch nicht wie ich die stopbits bei linux einstelle...

Gruß
toti

just4fun
06.07.2010, 19:01
Das bedeutet 8 Datenbits, Keine (No) Parity, 1 Stop-Bit. Diese Einstellung ist in jedem Fall erforderlich und geht wie folgt (siehe auch mein Link, daher hier die Zeilennummern):


00025 #include <errno.h>
00026 #include <fcntl.h>
00027 #include <math.h>
00028 #include <stdio.h>
00029 #include <stdlib.h>
00030 #include <string.h>
00031 #include <termios.h>
00032 #include <unistd.h>
00033 #include <sys/types.h>
00034 #include <sys/ioctl.h>
00035 #include <sys/stat.h>
00036 #include <sys/time.h>

00045 #include <linux/serial.h>

00050 #define READ_TIMEOUT 250000 /* less than 1e6 */

00037 struct termios options;


00072 // Get current port settings
00073 tcgetattr(mDev_fd, &options);
00074
00075 // this setting is needed for Mac OS! But works under Linux, too!
00076 options.c_cflag |= CLOCAL;
00077
00078 // 8N1
00079 options.c_cflag &= ~PARENB; // Parity = N
00080 options.c_cflag &= ~CSTOPB; // 1 Stop Bit
00081 options.c_cflag &= ~CSIZE; // hm, wofür ist das eigentlich?
00082 options.c_cflag |= CS8; // 8 Datenbits

// Da man in der Regel kein Hardware-Flow-Control hat / nutzt, ist es auch wichtig, dieses für den seriellen Port abzuschalten:

00084 // Disable hardware flow control:
00085 options.c_cflag &= ~CRTSCTS;

00167 // Cause the new options to take effect immediately.
00168 tcsetattr(mDev_fd, TCSANOW, &options);

totix800
06.07.2010, 19:29
Hi,

Ok, dann weiss ich schonmal wofür das steht. Ich müsste aber wissen wie man das ganze mit den Boardmitteln von Linux also wohl mit stty einstellt....

Gruß
toti

just4fun
06.07.2010, 19:55
sry:

man stty

totix800
06.07.2010, 20:07
mhhh, die manpage hilft mir leider nicht so recht weiter, deswegen hatte ich gehofft, dass mir jemand vielleicht ein Beispiel geben könnte...

Gruß
toti

just4fun
06.07.2010, 20:31
Verstehe. Aber laut Doku http://linux.die.net/man/1/stty müsste es nicht wie folgt gehen?

stty -F /dev/ttyUSB0 speed 9600 cs8 -cstopb -parenb

totix800
07.07.2010, 21:45
Hi,

konnte es leider erst jetzt ausprobieren. Es funktioniert leider nicht. Ich hab das ganze auch mal mit Minicom probiert, und bekomme auhc nur sehr komsiche zeichen.


Welcome to minicom 2.4

OPTIONS: I18n
Compiled on Jan 25 2010, 06:49:09.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

W)j�='����/-1/��w-1-='�坿��/-1/��w-1-='�兿/-1/��w-1-='�噿��/-1/��w-1-='�嗿�:呿1/ :必 :必 :必 必

Eine Idee?

Gruß
toti

just4fun
08.07.2010, 12:41
Minicom keine schlechte Idee. Das habe ich auch meist genutzt.

Dazu zwei Fragen:
1. Ist Minicom richtig konfiguriert (9600,8N1, No Hardware Flow Control)?
2. Welches Beispiel aus dem Artikelbereich hast du genau genutzt bzw. wie sendest du die Daten?

Konkret zu 2. Sendet dein Atmel binäre Werte oder liegen die im Ascii-Bereich? Also z.B: Atmel sendet Wert 65 -> Minicom müsste ein "A" empfangen und anzeigen.

totix800
08.07.2010, 16:37
Hi,

ja das ist alles korrekt eingestellt. Ich verwende folgendes Tutorial:

http://www.rn-wissen.de/index.php/RN-Control_Demoprogramm_in_C

Gruß
toti

just4fun
08.07.2010, 20:53
Hm. okay.
Und nur um sicher zu gehen, Software-Flow-Control ist auch deaktiviert im minicom? Also alles so:


Willkommen zu minicom 2.3

Opti+-----------------------------------------------------------------------+
Über| A - Serieller Anschluss : /dev/ttyUSB0 |
Port| B - Pfad zur Lockdatei : /blabla |
| C - Programm zur Rufannahme : |
| D - Programm zum Wählen : |
| E - Bps/Par/Bits : 9600 8N1 |
| F - Hardware Flow Control : Nein |
| G - Software Flow Control : Nein |
| |
| Welchen Parameter möchten Sie ändern? |
+-----------------------------------------------------------------------+


Wenn ja, habe ich nicht viel mehr Ideen, da ich den mySmartUSB nicht im Detail kenne (Datenblatt nur mal überflogen). Also weiß ich nicht, was da so "zwischen" deinem Atmel und dem USB so abgeht... :-/

totix800
08.07.2010, 20:59
ja, das ist alles genauso eingestellt, aber die lustigen Zeichen gehen nicht weg :(

just4fun
08.07.2010, 21:14
Hm.
Damit ich das besser verstehe: Das RNControl Board ist wie genau mit dem PC verbunden? Über den Stecker HIER (http://www.rn-wissen.de/index.php/Bild:Rncontrol1.4diagramm.jpg) rechts oben im Bild und dann wie an den mySmartUSB? Alternativ könntest du das RNControl-Board mal über den RS232-Stecker oben mal direkt über einen Wandler wie diesen HIER (http://www.amazon.de/LogiLink-Adapter-USB-2-0-Seriell/dp/B0014I4W60/ref=sr_1_4?ie=UTF8&s=ce-de&qid=1278619957&sr=8-4) verbinden. Und dann mit minicom testen.

Auch sehe ich in der Doku des mySmartUSB "mit Hardware Handshake (RTS/CTS) (http://www.mikrocontroller.net/articles/RS-232#Flu.C3.9Fsteuerung)" steht. Hier musst du dann vermutlich eine der Flow Control wieder im minicom aktivieren. Aber das hast du bestimmt auch schon probiert...

totix800
08.07.2010, 21:47
Also die RS232 Stecker rechts oben am Board hab ich mit dem mySmartUSB folgendermaßen verbunden: Stecker: 7 -> TX, Stecker: 8 -> RX, Stecker: 10 -> Masse. Die kleinen Schalter sind folgendermaßen eingestellt: 1=on, 2=on, 3=off, 4=off. Wenn ich RX und TX mit einem Draht verbinde und spaßeshalber einmal echo test > /dev/ttyUSB0 mache, da bekomme ich das auch korrekt in minicom angezeigt.

Edit: Ja, den Hardware Handshake habe ich auch schonmal aktiviert...

just4fun
08.07.2010, 22:13
Äh, du weißt schon, dass du TX mit RX und umgekehrt verbinden musst?



RNControl TX -> 8 RxD PC (mySmartUSB MK2 Interface USB-UART-Bridge)
RNControl RX -> 7 TxD PC (mySmartUSB MK2 Interface USB-UART-Bridge)
Masse -> 10


Siehe auch http://www.lammertbies.nl/comm/cable/de_RS-232.html#null

totix800
09.07.2010, 06:03
Hi,

Ja , ich hab den wannenstecker am board einfach gedreht, daran liegt es nicht.

Gruß
Toti

just4fun
09.07.2010, 10:23
Das heißt, jetzt geht alles?

totix800
09.07.2010, 12:11
Nein, das heißt, ich hatte die die richtigen kontakte miteinander verbunden, aber es kommt immer noch nix vernünftiges an...

Gruß
Toti

just4fun
09.07.2010, 13:28
Okay, hatte ich falsch verstanden. Die DIP-Schalter scheinen ja auch richtig, gemäß Doku.

Dann weiß ich erst einmal nicht mehr weiter. Außer es mit einem anderen "einfachen" (anderen) USB-Seriell-Wandler einmal zu testen. wie oben beschrieben.