In einem Projekt verwende ich einen Gyrochip vom Typ MPU6050 zusammen mit einem Wemos D1 Mini (ESP8266) unter der Arduino-IDE. Bei gefühlt jedem 3. Turn-Around kommt der MPU6050 nicht "in die Hufe", d.h. ich erhalte aus der Begin-Methode einen Rückgabewert von 4. Auch das mehrfache Wiederholen der Begin-Methode in einem While-Loop bringt nix, es hilft nur das stromlos Machen für mehrere Sekunden, oftmals auch das nicht beim ersten Mal. Wenn es dannn einmal läuft, läuft es stunden- oder tagelang, es muss also ein spzielles Start- bzw. Init-Problem sein. Ich verwende die folgende Lib: https://github.com/rfetick/MPU6050_light Pullup-Widerstände von 4k habe ich auch schon ausprobiert, ohne Änderung. Hat jemand eine Idee, wie das Problem zu lösen wäre? Danke für Tips.
Meine Methode wäre Oszilloskop und Logic Analyzer. Mit dem Oszi schauen, wie es um die Signalqualität bestellt ist. Mit dem LA schauen, ob alles konform zum Datenblatt abläuft.
Der Rückgabewert von MPU6050::begin wird ja durch den ersten writeData Zugriff bestimmt. Der wiederum von wire->endTransmission. Sprich du müsstest dir Mal anschauen was der genaue Returnwert ist und dann Mal hier schauen: https://www.arduino.cc/en/Reference/WireEndTransmission Hast du einen Logic Analyzer? Wie sieht der Aufbau aus? Was für Pullups hast du genau ausprobiert? Wie lange ist das I2C Kabel? Wie sieht die Versorgungsspannung aus? Edit: Überlesen dass du >Rückgabewert von 4 geschrieben hattest --> Other Error. Entweder schauen was das bedeutet, oder wie oben beschrieben Mal die Signale/Daten anschauen.
:
Bearbeitet durch User
Details später, soviel vorab: Es ist ein Aufbau auf dem Steckbrett, dutzende Male auf- und abgebaut, Kabellängen um die 4cm. Pullups: 4k-Winderstände nach Plus 5V und 3,3V (macht keinen Unterschied). Signale am Oszi sehen "sauber" aus, also quasi ideale Rechteckform ...
Frank E. schrieb: > Aufbau auf dem Steckbrett Schließ den Sensor Mal direkt an. Spannung UND Daten. Nur um das Steckbrett auszuschließen. Frank E. schrieb: > 4k-Winderstände nach Plus 5V und 3,3V (macht keinen Unterschied). 5V war dann halt gegen die Spezifikation des Sensors. Wenn du nur die Datenleitungen nach 5V gepullt hast verstößt du gegen:
1 | Voltage Level (CLKIN, AUX_DA, AD0, FSYNC, INT, |
2 | SCL, SDA) -0.5V to VDD + 0.5V |
Wenn du VDD UND die Datenleitungen auf 5V gelegt hast, dann gegen die Versorgungsspannungsvorgaben:
1 | VDD POWER SUPPLY |
2 | Operating Voltages 2.375 3.46 V |
Hallo, ich habe einen Lochrasteraufbau mit diesem Sensor, allerdings an ATmega in C und ich hatte selten einen I2C-Bus-Teilnehmer, der so gut läuft, wie dieser. Die weitere Ausbaustufe sendet die Daten über einen RFM69 zu einer anderen Schaltung mit Empfänger und Display. Die Schaltung läuft mit 5V und 3,3V. mfG
N. M. schrieb: > Wie sieht die Versorgungsspannung aus? Im Datenblatt gibt es ein eigenes Kapitel "Recommended Power-on Procedure". Danach muss die Spannung in weniger als 3ms auf 90% ansteigen, und noch dazu "VDD and VLOGIC must be monotonic ramps". Der Chip scheint etwas sensibel zu sein. Dann braucht die interne PLL 10ms und der DMP ist sicherlich auch nicht gleich voll da. Diese Wartezeit wird im anderen Zusammenhang erwähnt (Setting this bit should be performed immediately after waiting for the time specified by the “Start-Up Time for Register Read/Write” in Section 6.3.), aber ich finde die Spec nicht. TLDR: evt. muss man nach dem Einschalten einfach eine halbe Sekunde warten.
Beitrag #6737653 wurde vom Autor gelöscht.
Bauform B. schrieb: > TLDR: evt. muss man nach dem Einschalten einfach eine halbe Sekunde > warten. Nach dem Einschalten warten ... klingt plausibel. Bisher warte ich nur nach begin() einige Zeit. Probiere ich ...
So, das Problem ist gelöst. Ursache war wohl tatsächlich die ungenügende Steilheit der Betriebspannung beim Einschalten. Ein Redesign der Schaltung hat doch noch einen Pin am ESP8266 freigespielt (für die SoftSerial zum GPS-Chip wird nur RX benötigt, TX ist somit frei). Das MPU6050-Breakout wird nun direkt aus einem Pin des ESP8266 mit Betriebsspannung versorgt. Es gibt nun einen Loop, der abhängig vom begin()-Rückgabewert ist und auch Vcc nochmal aus- und wieder einschaltet. Bei zahllosen Turn-Arrounds während der restlichen Programmierung gestern und heute wurde der Loop nur in seltenen Fällen zweimal durchlaufen, jedenfalls kam es bei der MPU6050 zu keinem dauerhaften Hänger mehr ... Zusätzliche Pullups sind übrigens nicht notwendig, eine genaue Betrachtung der Breakout-Platine ergab, dass da bereits 5k gegen Vcc drauf sind.
:
Bearbeitet durch User
Frank E. schrieb: > Wenn es dannn einmal läuft, läuft es stunden- oder tagelang, es muss > also ein spzielles Start- bzw. Init-Problem sein. Frank E. schrieb: > Ursache war wohl tatsächlich die ungenügende Steilheit der > Betriebspannung beim Einschalten Frank E. schrieb: > Details später, soviel vorab: Es ist ein Aufbau auf dem Steckbrett, > dutzende Male auf- und abgebaut, Kabellängen um die 4cm. Der Steckbrettaufbau als Universalverdächtiger war also nicht schuld, sondern die heimtückische zu langesame Aufwärtsrampe der zugeführten Betriebsspannung, welche durch sorgfältige Analyse als Ursache erkannt werden konnte. mfg
Ich hatte ein ähnliches Problem mit dem Teil. Der IC verträgt einfach normalen/langsamen Anlauf der Versorgung einfach nicht... Es muss wirklich schnell sein... Apropo, ich nehme an, dass es um ein Hobby-Projekt da geht. Wenn nicht und es um professionale Design geht, nun aufpassen. MPU-6050 wurde abgekündigt schon.
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.