PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MPU6050 mit Atmega32



Kreata
10.04.2013, 23:45
Guten Abend liebe Roboternetz-Gemeinde,

ich habe hier ein MPU6050 (genauer: ein 10DOF von drotek).
Hat jemand diesen schon erfolgreich mit einem Atmega32 ausgelesen bekommen?
Irgendwie komme ich da nicht weiter und finde auch nur Code für Arduino-Plattformen.
Vielleicht kann mir jemand hier seinen Code posten?
Man muss das Rad ja nicht immer wieder neu erfinden und ich wäre der Person sehr dankbar :)
Hier haben ja schon einige mit dem Sensor gearbeitet.

Liebe Grüße,
Kreata.

Che Guevara
11.04.2013, 10:25
Hi,

ich verwende auch einen MPU60x0, lese ihn aber mit einem ATXMega32A4 aus. Wenn du den ATMega32 mit 5V betreibst, brauchst du einen Pegelwandler.
Als erstes müsstest du uns natürlich verraten, in welcher Sprache zu Programmieren möchtest, sonst wirds schwer mit dem Code posten.
Es gibt auch genug Beispiele im Inet, wo man sehr schön sieht, wie man den Sensor auslesen kann / soll / muss ;)

Gruß
Chris

Kreata
11.04.2013, 13:11
Hallo!
Auf dem 10DOF ist ein 3,3V Spannungsregler drauf.
Ich programmiere in C und habe zwar 'C-Code' dafür gefunden, aber die arbeiteten alle mit der Arduino lib und diese will ich nicht benutzen.
Im Grund genommen kann man ja einfach diese Funktionen durch eigene ersetzen, aber ich weiß nie genau was diese machen.

Che Guevara
11.04.2013, 13:32
Hi,

ok, dann kannst du dir das ja schonmal ersparen!
Im Prinzip findest du alle wichtigen Infos im DB, das wird dir keiner abnehmen ;)
Der Ablauf sieht in etwa so aus:
- Sensor initialisieren (Power-Managment, Full-Scale-Range, DLPF, CLK-Source, etc..)
(- Offset bestimmen)
- Sensor auslesen: Slave-Write-Adresse senden, auszulesendes Register senden, Rep-Start, Slave-Read-Adresse senden, Daten einlesen, Stop

Gruß
Chris

BastelWastel
11.04.2013, 15:10
Ich hatte meine MPU mal am Raspberry..auch mit C (ohne fremd libs)..
Ich kann dir die files gerne zukommen lassen, aber da das mein 'Einstiegsprojekt' in C war..weiss ich nicht ob du da nicht direkt Augenkrebs beim lesen bekommst ;)

Gruss, Andreas

Kreata
11.04.2013, 18:59
Gerne, immer her damit :)
Klar würde ich es schaffen, Che, nur erspart mir der fertige Code locker 4-7 Tage programmieren & debuggen.
Dafür gibt es ja fertige Libs :)

Che Guevara
11.04.2013, 19:41
Hi,

also die paar Zeilen Code programmier ich in <10 Minuten!
Aber jetzt passts ja eh :)

Gruß
Chris

Kreata
12.04.2013, 08:06
also die paar Zeilen Code programmier ich in <10 Minuten!
Interessant. Dann zeig mal her.

BastelWastel
12.04.2013, 11:30
Ich bin allerdings erst Montag Abend wieder zuhause.

Che Guevara
12.04.2013, 15:26
Hi,

also erstmal, ich progge in Bascom, deswegen wirds dir nicht viel helfen, der Ablauf sollte aber 1:1 der gleiche sein.

Initialisieren:


Sub Init_mpu()


'--- (25) Sample Rate Divider = 1 ---
I2cstart #2 'start condition
I2cwbyte Mpuaddw , #2 'write adress of MPU-6050
I2cwbyte 25 , #2 'Register 25 Sample Rate Divider (1..8 kHz)
I2cwbyte &B00000000 , #2 'Divider set to 1 (soll)
I2cstop #2 'stop condition

'--- (26) DLPF = 42/44 Hz ---
I2cstart #2 'start condition
I2cwbyte Mpuaddw , #2 'write adress of MPU-6050
I2cwbyte 26 , #2 'Register 26 DLPF_CFG (digital lowpass filter) Configuration
I2cwbyte &B00000011 , #2 'Bits 0..2 = 011 (3) - ACC:44Hz, 4.9ms; Gyro:42Hz, 4.8ms
I2cstop #2 'stop condition

'--- (27) Gyro Full Range = +-2000°/s ---
I2cstart #2 'start condition
I2cwbyte Mpuaddw , #2 'write adress of MPU-6050
I2cwbyte 27 , #2 'Register 27 Gyro Configuration
I2cwbyte &B00011000 , #2 'Bits 3+4 = 11 - Full Scale Range: +/-2000°/s
I2cstop #2 'stop condition

'--- (28) ACC Full Range = +-2g ---
I2cstart #2 'start condition
I2cwbyte Mpuaddw , #2 'write adress of MPU-6050
I2cwbyte 28 , #2 'Register 28 ACC Configuration
I2cwbyte &B00000000 , #2 'Bits 3+4 = 00 - Full Scale Range: +/-2g / No High Pass Filter
I2cstop #2 'stop condition

'--- (107) Power Management 1 ---
I2cstart #2 'start condition
I2cwbyte Mpuaddw , #2 'write adress of MPU-6050
I2cwbyte 107 , #2 'Register 107 Power Management 1
I2cwbyte &B00001011 , #2 'No Reset / No Sleep / No Cycle / Temp_Sens: Dis / Clock Source: Z-Gyro
I2cstop #2


End Sub


Gyro auslesen:


Sub Read_gyro()


I2cstart #2
I2cwbyte Mpuaddw , #2
I2cwbyte 67 , #2
I2crepstart #2
I2cwbyte Mpuaddr , #2

I2crbyte Tmp_gyrox(2) , Ack , #2
I2crbyte Tmp_gyrox(1) , Ack , #2

I2crbyte Tmp_gyroy(2) , Ack , #2
I2crbyte Tmp_gyroy(1) , Ack , #2

I2crbyte Tmp_gyroz(2) , Ack , #2
I2crbyte Tmp_gyroz(1) , Nack , #2

I2cstop #2


Gyrox = Gx
Gyroy = 0 - Gy
Gyroz = 0 - Gz

End Sub


ACC auslesen:


Sub Read_acc()


I2cstart #2
I2cwbyte Mpuaddw , #2
I2cwbyte 59 , #2
I2crepstart #2
I2cwbyte Mpuaddr , #2

I2crbyte Tmp_accx(2) , Ack , #2
I2crbyte Tmp_accx(1) , Ack , #2

I2crbyte Tmp_accy(2) , Ack , #2
I2crbyte Tmp_accy(1) , Ack , #2

I2crbyte Tmp_accz(2) , Ack , #2
I2crbyte Tmp_accz(1) , Nack , #2

I2cstop #2

Accx = Ax
Accy = Ay
Accz = Az


End Sub


Gruß
Chris

BastelWastel
12.04.2013, 16:43
Klar, der Ablauf ist der selbe.
Wenn man in C seine Funktionen zum lesen/schreiben auf den i2c hat ist der Rest recht flott erledigt.

HannoHupmann
21.04.2013, 21:30
Ich hab mir das GY-521 Board geholt auf dem ja auch der MPU 6050 verbaut ist. Jetzt will ich den Sensor aber später mit meinem Propellerchip auslesen.... Doch erst mal will ich mir die Daten am PC kontinuierlich anzeigen lassen um testen zu können wie ich den Chip einstellen muss und wie die Daten überhaupt aussehen. Dazu möchte ich die Daten mit Matlab einlesen und ausgeben (das geht recht einfach so wie es aussieht).

Allerding fehlt mir noch eine "Referenz" / das Datenblatt wo die Register, Adressen und Co des GY-521 respektive des MPU 6050 zu finden sind. Irgendwie finde ich immer nur Referenzdatenblätter für irgendwelche Boards wo der Chip drauf ist.

malthy
21.04.2013, 23:03
Auf der invensense Seite zu dem Sensor (http://www.invensense.com/mems/gyro/mpu6050.html) ist u. a. das Datenblatt (http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A.pdf) und einiges andere, u.a. auch die Beschreibung der Register (http://www.invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf)verlinkt.

Gruß
Malte