Hallo, ich habe einen 6D Bewegungssensor (LSM330) den ich mit einem USB-I2C-Interface am PC angeschlossen habe. Die Aufgabe ist die Sensordaten mit Scilab auszuwerten und in einer schönen Grafik anzuzeigen. (3D Plot mit allen Achsen, jede Achse einzeln, ...) Mein Problem ist die Kommunikation zwischen Sensor und PC. Ich bekomme keine Daten, die ich anzeigen lassen könnte. (Die "Serial Communication Toolbox" für Scilab habe ich bereits runtergeladen) Es müsste irgendwie so funktionieren: h=openserial(...) writeserial(h,...) readserial(h,...) closeserial(h) Zur Initialisierung muss ich für den Beschleunigungssensor "S30 20 77 P" und für den Drehratensensor "SD4 20 0F P" schicken. Um Daten zu empfangen frage ich mit "S30 A8 R 06 P" bzw. "SD4 A8 R 06 P" ab. Könnt ihr mir weiterhelfen wie ich es schaffe überhaupt mal Daten zu bekommen? Bis jetzt steht unter "h" ein String mit dem Namen "file3b50348" Danke! Grüße Max
Hallo Max, es ist immer schwierig mit solchen Tools, wenn so wenige Infos in deren Beschreibung stehen. Wahrscheinlich müssen noch diverse Pausen eingefügt werden, oder auch der Status abgefragt werden: http://stackoverflow.com/questions/13710539/serial-communication-with-scilab-in-linux Ich würde es unter Windows mal mit Realterm versuchen, dort müsstest Du dann auch sehen, was gemeldet wird: http://realterm.sourceforge.net/realterm_from_scilab.html Gruß Marvol
Ich würde auch mal erst mit Hterm schauen, was zurückkommt, wenn es angesprochen wird, ob überhaupt eine Reaktion erfolgt. Das Datenblatt http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00059856.pdf beschreibt auf Seite 32-34 die I2C-Schnittstelle. Dazu kommt hier auch noch ein USB/I2C-Wandler, zu dem auch erst mal Info gebraucht wird, um etwas dazu zu sagen. Wie heißt der oder wo gibts Informationen? Das "S" am Anfang, "R" in der Mitte und "P" am Ende eines Strings scheint dazu zu gehören, der Sensor selbst oder I2C hat solche Texte nicht.
:
Bearbeitet durch User
Hallo, danke für eure schnelle Antwort! Mit HTerm funktioniert es schon ganz gut. Ich Verbinde mich über den Port COM7. Dann aktiviere ich erst den Beschleunigungs- und dann den Gyrosensor: S30 20 77 P und SD4 20 0F P. Um dann die aktuellen Werte der Sensoren abzufragen sende ich für den Beschleunigungssensor S30 A8 R 06 P und für den Gyro SD4 A8 R 06. Als Antwort bekomme ich dann jeweils 6 Byte. Low-X-Achse, High-X-Achse, Low-Y-Achse, usw... Kann mir vielleicht jemand erklären wie man auf die Befehle kommt? In der Beschreibung steht dass mit S30 20 77 P der Sensor aktiviert wird und die gewünschte Datenrate bzw. Achsen ausgewählt werden. S30 20 77 P bedeutet 0DR=400 Hz alle Achsen aktiv. Im Anhang ist die Registertabelle. Muss ja irgendwie was damit zu tun haben... "S" initiiert Start-Ereignis auf I2C-Bus "P" initiiert Stopp-Ereignis auf I2C-Bus "R" Byteanzahl Grüße!
Hab folgendes rausgefunden: S30 ist die Adresse vom Beschleunigungssensor 20 ist das Register in das wir 77 schreiben. Binär entspricht das 0111 0111. Das entspricht X, Y und Z enable und einer Frequenz von 400 Hz (ODR). Dann ist jetzt die Frage wie ich das über SciLab schicken bzw. empfangen kann.
So geht's! Zumindest die einmalige Abfrage der Daten: clc;clear; //Serial Port COM7 öffnen p=openserial(7,"115200"); xpause(5000); //Aktivierung ACC mit 400Hz, alle 3 Achsen initacc = writeserial(p,ascii(83)+ascii(51)+ascii(48)+ascii(50)+ascii(48)+ascii(55 )+ascii(55)+ascii(80)); xpause(50000); //Aktivierung GYRO mit 95Hz, alle 3 Achsen initgyro = writeserial(p,ascii(83)+ascii(68)+ascii(52)+ascii(50)+ascii(48)+ascii(48 )+ascii(70)+ascii(80)); xpause(50000); //ACC-Daten anfragen, 6 Byte askacc = writeserial(p,ascii(83)+ascii(51)+ascii(48)+ascii(65)+ascii(56)+ascii(82 )+ascii(48)+ascii(54)+ascii(80)); xpause(50000); //ACC-Daten auslesen, Low-X, High-X, Low-Y, High-Y, Low-Z, High-Z acc = readserial(p); xpause(50000); //GYRO-Daten anfragen, 6 Byte askgyro = writeserial(p,ascii(83)+ascii(68)+ascii(52)+ascii(65)+ascii(56)+ascii(82 )+ascii(48)+ascii(54)+ascii(80)); xpause(50000); //GYRO-Daten auslesen, Low-X, High-X, Low-Y, High-Y, Low-Z, High-Z gyro = readserial(p); xpause(50000); closeserial(p);
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.