Der MPU-6050 ist ein Sensor, der in 3 Achsen Beschleunigungen und Drehraten messen kann.
Die Kommunikation erfolgt über die I2C/TWI Schnittstelle.
Hier habe ich ein kleines Beispiel für den ersten Einstieg und Messung der Beschleunigung.
Das Programm konfiguriert den Sensor für die Inbetriebnahme, also Wahl der Taktquelle und Ausschalten des Sleep-Mode.
Die 3 Achsen werden per I2C ausgelesen und als Bandanzeige an PortA ausgegeben.
P.S.: Den Sensor gibt es übrigens für ca. 1,50 Euro beim freundlichen Ebay-Chinesen.
Alles anzeigen
MCU-6050.jpg
Die Kommunikation erfolgt über die I2C/TWI Schnittstelle.
Hier habe ich ein kleines Beispiel für den ersten Einstieg und Messung der Beschleunigung.
Das Programm konfiguriert den Sensor für die Inbetriebnahme, also Wahl der Taktquelle und Ausschalten des Sleep-Mode.
Die 3 Achsen werden per I2C ausgelesen und als Bandanzeige an PortA ausgegeben.
P.S.: Den Sensor gibt es übrigens für ca. 1,50 Euro beim freundlichen Ebay-Chinesen.
BASCOM-Quellcode
- 'Demo MEMS-Sensor MPU-6050 Beschleunigung auslesen
- 'Created with Bascom-AVR 2079 Michael Kinz 01/2017
- $regfile = "m32def.dat"
- $crystal = 8000000
- $hwstack = 32
- $swstack = 32
- $framesize = 24
- '-------- Init I2C --------
- $lib "I2C_TWI.LBX" 'Hardware I2C
- Config Scl = Portc.0
- Config Sda = Portc.1
- I2cinit
- Const W_addr = &HD0 'I2C Adresse MPU-6050
- Const R_addr = &HD1
- '-------- Init I/O ---------
- Ddra = 255 'Ausgang für Bandanzeige
- '--------- Init Variablen ------------
- Dim Register_adresse As Byte
- Dim Register(6) As Byte
- Dim Acc_x As Integer At Register(1) Overlay
- Dim Acc_y As Integer At Register(3) Overlay
- Dim Acc_z As Integer At Register(5) Overlay
- Dim Z As Byte 'Hilfsvariable für Forschleife
- Dim Temp As Integer 'Hilfsvariable zum Rechnen
- '---------- Init Sensor ---------
- Register_adresse = &H68 'Signalpath Reset
- I2cstart
- I2cwbyte W_addr
- I2cwbyte Register_adresse
- I2cwbyte &H07 'Reset Gyro + Acc + Temp
- I2cstop
- Waitms 10
- Register_adresse = &H6B 'Power Management Register
- I2cstart
- I2cwbyte W_addr
- I2cwbyte Register_adresse
- I2cwbyte &H01 'Sleep = 0, Clocksource X-Gyro
- I2cstop
- Waitms 10
- Do
- I2cstart
- I2cwbyte W_addr 'Adresse I2C schreiben
- Register_adresse = &H3B 'Registerbeginn Acceleration Daten
- I2cwbyte Register_adresse
- I2cstart
- I2cwbyte R_addr 'Adresse I2C lesen
- For Z = 1 To 6
- I2crbyte Register(z) , Ack
- Next
- I2crbyte Register(6) , Nack
- I2cstop
- Swap Acc_x 'die Register sind MSB first, AVR aber LSB first
- Swap Acc_y
- Swap Acc_z
- 'Ausgabe als Bandanzeige auf 8 LEDs an Port A
- Temp = Acc_y / 4096 'Reduzieren der Auflösung
- Select Case Temp
- Case 0 : Porta = &B00000000
- Case -1 : Porta = &B00010000
- Case -2 : Porta = &B00110000
- Case -3 : Porta = &B01110000
- Case Is < -3 : Porta = &B11110000
- Case 1 : Porta = &B00001000
- Case 2 : Porta = &B00001100
- Case 3 : Porta = &B00001110
- Case Is >= 4 : Porta = &B00001111
- End Select
- Loop
- End
MCU-6050.jpg
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Michael () aus folgendem Grund: Schreibfehler korrigiert