 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 21.12.2014, 19:42 Titel: Raspberry Pi - Arduino - Freebasic Projekte |
|
|
Hi! Schon lange nicht mehr da gewesen, hab nu aber mal wieder ne Frage...
Ich setzte für verschiedene Projekte gerne einen Raspberry-Pi mit einem Arduino-Micro per USB angeschlossen ein.
Auf dem Raspberry-Pi läuft Raspbian mit einem Freebasic-Programm, dass die Steuerung und Kommunikation mit dem Arduino übernimmt.
Nur immer wenn ich versuche binäre Daten hin- und zurückzuschicken kommt es zu (für mich) unerklärlichen Hängern, die sich erst durch einen Reset des Arduinos wieder beheben lassen - bis die nächsten paar Bytes übertragen sind und wieder hängen bleibt.
Nun habe ich mir damit geholfen, dass ich Daten im Klartext zwischen dem Freebasic-Programm und Arduino Seriell übertrage. D.h. ich übertrage bei einer 32-Bit Zahl nicht die 4-Bytes sondern die Ziffern der Zahl einzeln.
Das Funktioniert zwar sehr gut, ist aber eher unprofessionell und braucht unnötig Bandbreite und damit auch Übertragungszeit.
Jetzt habe ich den Verdacht, dass der Serielle-Port (/dev/ttyACM0) irgendwie bestimmte Bytes als Steuerkommandos versteht und irgendwas macht, dass sich meinem Wissen entzieht.
Per Zufall bin ich auf die Seite http://playground.arduino.cc/Interfacing/LinuxTTY gestoßen und habe den Befehl stty -a < /dev/ttyUSB0 angepasst und ausgeführt:
Code: | root@raspberrypi:/home/pi# stty -a < /dev/ttyACM0
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke |
Bis auf "speed 9600 baut" habe ich keine Ahnung was diese kryptisch-anmutende Ausgabe zu sagen hat .. allerdings lässt sie mich vermuten, dass der Com-Port auf bestimmte Bytes reagiert.
Kann mir da einer etwas Licht ins Dunkel bringen?
Vielen Dank schon mal  |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 21.12.2014, 22:11 Titel: |
|
|
nun ... ein ACM ist regulär ein "modem"
das heist, das du Daten mit steuerkomandos übertragen bekommst ... sogenannte ESCAPE-SEQUENZEN (sind durch das ^ zu erkennen).
Wenn du einen Physische Schnitstelle nutzt (RS232), dann kannst du den Port auch anders öffnen (Open Com).
Wenn es ein USB-RS232 Adapter is, solltest du nach einem ttyUSB... suchen.
Das sind RAW Schnitstellen, die nicht von linux interpretiert werden.
ACM terminals sind steuerkommandobehaftete Terminals, mit deren Hilfe du z.B. ein 56K Modem steuern kannst (Auflegen, abheben, nr. wählen, daten übertragen usw.)
PS: Die Physische Serielle Schnitstelle unter Linux benennt sich mit ttyS...
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 21.12.2014, 23:40 Titel: |
|
|
Hi! Vielen Dank für die schnelle Antwort
Ein Modem wird aber doch über eine serielle "RAW" Schnittstelle gesteuert. Die Interpretation von AT-Kommandos werden doch im Modem vorgenommen und nicht von der Schnittstelle oder dem Schnittstellen-Treiber, oder hab ich da etwas Grundsätzliches nicht verstanden?
ein Device welches mit ttyS beginnt wird leider nicht gelistet:
Code: | root@raspberrypi:/home/pi# ls /dev
autofs fb0 loop1 mapper ppp ram14 ram9 stdin tty14 tty22 tty30 tty39 tty47 tty55 tty63 vc-cma vcs6 xconsole
block fd loop2 mem ptmx ram15 random stdout tty15 tty23 tty31 tty4 tty48 tty56 tty7 vchiq vcsa zero
btrfs-control full loop3 mmcblk0 pts ram2 raw tty tty16 tty24 tty32 tty40 tty49 tty57 tty8 vc-mem vcsa1
bus fuse loop4 mmcblk0p1 ram0 ram3 root tty0 tty17 tty25 tty33 tty41 tty5 tty58 tty9 vcs vcsa2
cachefiles hidraw0 loop5 mmcblk0p2 ram1 ram4 serial tty1 tty18 tty26 tty34 tty42 tty50 tty59 ttyACM0 vcs1 vcsa3
char input loop6 net ram10 ram5 shm tty10 tty19 tty27 tty35 tty43 tty51 tty6 ttyAMA0 vcs2 vcsa4
console kmsg loop7 network_latency ram11 ram6 snd tty11 tty2 tty28 tty36 tty44 tty52 tty60 ttyprintk vcs3 vcsa5
cpu_dma_latency log loop-control network_throughput ram12 ram7 sndstat tty12 tty20 tty29 tty37 tty45 tty53 tty61 uinput vcs4 vcsa6
disk loop0 MAKEDEV null ram13 ram8 stderr tty13 tty21 tty3 tty38 tty46 tty54 tty62 urandom vcs5 video0 |
ttyAMA0 kommt nicht in Frage - das ist die serielle Schnittstelle an der GPIO-Leiste des Raspberry PI.
Es gibt allerdings unter /dev/serial/.../usb-Arduino_LLC_Arduino_Micro-if00 noch SymLinks auf die ttyACM0 - was mir leider nicht weiterhilft
dmesg gibt beim Anstöpseln vom Arduino folgende Ausgabe:
Code: | [ 3.577791] usb 1-1.3: new full-speed USB device number 5 using dwc_otg
[ 3.720289] usb 1-1.3: New USB device found, idVendor=2341, idProduct=0037
[ 3.737640] usb 1-1.3: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[ 3.746533] usb 1-1.3: Product: Arduino Micro
[ 3.767644] usb 1-1.3: Manufacturer: Arduino LLC
[ 4.047637] udevd[156]: starting version 175
[ 5.854516] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
[ 6.155383] usbcore: registered new interface driver cdc_acm
[ 6.307946] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 6.444008] usb 1-1.3: USB disconnect, device number 5
[ 6.697773] usb 1-1.3: new full-speed USB device number 6 using dwc_otg
[ 6.842802] usb 1-1.3: New USB device found, idVendor=2341, idProduct=8037
[ 6.857665] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6.866567] usb 1-1.3: Product: Arduino Micro
[ 6.887841] usb 1-1.3: Manufacturer: Arduino LLC
[ 6.904655] cdc_acm 1-1.3:1.0: This device cannot do calls on its own. It is not a modem.
[ 6.927032] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
[ 6.960627] input: Arduino LLC Arduino Micro as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.2/input/input0
[ 6.990981] hid-generic 0003:2341:8037.0001: input,hidraw0: USB HID v1.01 Mouse [Arduino LLC Arduino Micro ] on usb-bcm2708_usb-1.3/input2 |
Kann man die Steuerkommandos dieses ACM-Device nicht irgendwie ausschalten, damit ich komplett Binär übertragen kann? |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 22.12.2014, 09:46 Titel: |
|
|
Sry, ich glaub da hast du was falsch verstanden.. Ich möchte den Port des Arduino benutzen, NICHT den seriellen Port des raspberry Pi .. Kann man das ACM device irgendwie so umstellen, dass es keine steuerkommandos interpretiert? Oder kann man ein anderes Kernel Modul laden dass ein RAW fähiges Gerät zur Verfügung stellt? |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|