Hi Dirk,
im moment bin ich noch im urlaub, aber ab und zu mal auch online...
meinst Du ich könnte so in einer woche die m32 version testen? Ich weiss nicht, ob Du zum umprogrammieren umbauen musst, evtl. gehts auch so, dass ich teste?
Hi Dirk,
im moment bin ich noch im urlaub, aber ab und zu mal auch online...
meinst Du ich könnte so in einer woche die m32 version testen? Ich weiss nicht, ob Du zum umprogrammieren umbauen musst, evtl. gehts auch so, dass ich teste?
gruß inka
Hi inka,
die M32-Versionen sind schon fertig. Wenn du wieder zuhause bist, kann ich sie dir schicken.
Schönen Rest-Urlaub noch!
Gruß
Dirk
Hi Dirk,
danke für die wünsche und die files - freue mich schon drauf...
ende nächster woche melde ich mich von zuhause aus...
gruß inka
Hi Dirk,
treffen den meine annahmen/fragen:
zu? Oder habe ich damit nur einen an einer anderen stelle von mir gemachten fehler korrigiert?müsste in diesem fall in diesem displaypart nicht noch am anfang die zeile "readL3GD20();" hinzu? Und wie ist es mit dem "gyrotask"? Muss diese nicht auch aufgerufen werden? Oder zumindets "resetgyro"? Und an welcher stelle? In der while(true) schleife oder schon davor?
gruß inka
Hi inka,
im "calibration part" ist ja readL3GD20() zum Einlesen der Gyro-Daten und (optional, zuerst auskommentiert) normalizeL3GD20() zum Normalisieren drin.
Im "Display part" ist die task_GYRO() drin, diese Funktion enthält einen eigenen Programm-Teil zum Einlesen der Daten (anstelle von readL3GD20() ) und normalizeL3GD20() zum Normalisieren.
Somit gibt es in beiden Versionen einen Teil zum Einlesen der Daten und zum Normalisieren.
Beim "Display part" findet das Einlesen, Normalisieren und die Auswertung der Daten (mit der task_GYRO() ) nicht hinter der Kommentarzeile "// Display part:" statt, sondern DAVOR in diesem Bereich:
Code:#ifndef CALIBRATION task_I2CTWI(); task_GYRO(); #endif
Gruß
Dirk
Hi Dirk,
damit wir vom gleichen reden, hier die while schleife der demo_05_02 (im originalzustand in dem ich das runtergeladen habe):
ich finde im displaypart kein "task_gyro", nur fürs kalibrieren...Code:while(true) { #ifndef CALIBRATION task_I2CTWI(); task_GYRO(); #endif task_I2CTWI(); if(getStopwatch1() > 500) // 500ms { #ifdef CALIBRATION // GYRO calibration part: readL3GD20(); // Get sensor values //normalizeL3GD20(); setCursorPosLCD(0, 0); // line 1 writeStringLCD_P("X"); writeIntegerLCD(x_axisg, DEC); writeStringLCD_P(" "); setCursorPosLCD(0, 8); // line 1 pos 9 writeStringLCD_P("Y"); writeIntegerLCD(y_axisg, DEC); writeStringLCD_P(" "); setCursorPosLCD(1, 0); // line 2 writeStringLCD_P("Z"); writeIntegerLCD(z_axisg, DEC); writeStringLCD_P(" "); #else // Display part: setCursorPosLCD(0, 0); // line 1 writeStringLCD_P("X"); writeDoubleLCD(xdg, 6, 1); writeStringLCD_P(" "); setCursorPosLCD(0, 8); // line 1 pos 9 writeStringLCD_P("Y"); writeDoubleLCD(ydg, 6, 1); writeStringLCD_P(" "); setCursorPosLCD(1, 0); // line 2 writeStringLCD_P("Z"); writeDoubleLCD(zdg, 6, 1); writeStringLCD_P(" "); #endif setStopwatch1(0); } }
hier
müsste die zeile doch dabei sein, oder?Code:#endif task_I2CTWI(); if(getStopwatch1() > 500) // 500ms
das davor gehört doch zu kalibration?
gruß inka
Hi inka,
Das davor, also das hier:das davor gehört doch zu kalibration?
... gehört NICHT (#ifndef) zur Kalibrierung, sondern zur Anzeige.Code:#ifndef CALIBRATION task_I2CTWI(); task_GYRO(); #endif
Gruß
Dirk
@Dirk,
also die nochmalige kalibrierung des gyros mit der demo_05_02 ergab fast identische werte.
- wenn ich bei der demo 05_01 und der demo 05_02 nicht kalibrieren will, sondern die vom gyro gemessenen werte nur anzeigen will, muss ich in beiden fällen die zeile "#define CALIBRATION" auskommentieren. Stimmt?
- dann wird in der while(true) schleife der abschnitt zwischen "#ifdef CALIBRATION" und "else" übersprungen und nur das "display part" ausgeführt:
das stimmt doch auch, oder?Code:// Display part: setCursorPosLCD(0, 0); // line 1 writeStringLCD_P("X"); writeDoubleLCD(xdpsg, 6, 1); writeStringLCD_P(" "); setCursorPosLCD(0, 8); // line 1 pos 9 writeStringLCD_P("Y"); writeDoubleLCD(ydpsg, 6, 1); writeStringLCD_P(" "); setCursorPosLCD(1, 0); // line 2 writeStringLCD_P("Z"); writeDoubleLCD(zdpsg, 6, 1); writeStringLCD_P(" ");
- müsste in diesem fall in diesem displaypart nicht noch am anfang die zeile "readL3GD20();" hinzu? Und wie ist es mit dem "gyrotask"? Muss diese nicht auch aufgerufen werden? Oder zumindets "resetgyro"?
ich habe jetzt auf jeden fall in der demo_05_01 die zeile "readL3GD20();" hinzugefügt, die demo zeigt dann veränderungen in allen drei achsen an, je nachdem wie ich der robby drehe. Die im ruhezustand angezeigten werte der drei achsen (bei demo_05_01) sind natürlich nicht bei 0.0, weil ja der rest nicht kalibriert ist, aber der sensor reagiert immerhin...
dass sich die anzeige bei auskommentierterm define fürs kalibrieren überhaupt nicht rührte, hat mich schon sehr iritiert...
die demo_05_02 ist gut geeignet für die kalibrierung des gyros. Hast Du evtl. noch etwas womit man vergleichbar "einfach" den accelerator und magnetometer kalibrieren könnte? Ich weiss nicht ob man der minIMU irgendwie vorgaugeln kann dass sie gedreht wird und sie dann die min/max werte für die kalibrierung auf dem display ausgibt?
gruß inka
Hi inka,
Nein, die IMU muss schon real bewegt werden!Ich weiss nicht ob man der minIMU irgendwie vorgaugeln kann dass sie gedreht wird und sie dann die min/max werte für die kalibrierung auf dem display ausgibt?
Es gibt aber Kalibrierungs-Programme, die die Min/Max-Werte beim Drehen selbst "einsammeln" und ausgeben.
Ein Beispiel gab es glaube ich für die orangutan-Plattform. Geh mal suchen.
Gruß
Dirk
Lesezeichen