- 12V Akku mit 280 Ah bauen         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: mpu 6050 mit Bascom auswerten

  1. #21
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi,

    also die #2 bedeutet, dass die Peripherie verwendet wird, die als #2 deklariert wurde. Das ist allerdings nur für XMega-AVRs gültig (im Hinblick auf TWI), weil normale Megas nur eine TWI haben und somit die #2 komplett entfällt.
    Das Grundprogramm ist weder richtig noch falsch, es passt einfach nicht zu deiner Aufgabenstellung. Du müsstest TMP_Gyro... als Overlay definieren.
    Außerdem weiß ich nicht, ob die Slave-Adressen richtig sind, aber da du diese ja schon angepasst hast, gehe ich davon aus, dass du das DB gelesen hast und entsprechend deiner Anschlussbelegung die Adresse richtig gewählt hast.
    Deine Print-Ausgabe ist auch falsch bzw. unsinnig, da du als Mensch wohl nur schlecht die zwei Bytes (high & low) in sekundenschnelle zu einem int16 zusammensetzen kannst... Außerdem ist die Syntax falsch, aber da wird Bascom wohl sowieso meckern.
    Am besten schreibst du erstmal ein compilierfähiges Grundprogramm (Controller-Def, Quarz, Mainloop) und fügst dann die relevaten Codeteile (zum Auslesen & Initialiseren des MPU) hinzu.
    Und du solltest noch die passende Lib für die I2C Kommunikation einfügen.

    Gruß
    Chris

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    also die #2 bedeutet, dass die Peripherie verwendet wird, die als #2 deklariert wurde. Das ist allerdings nur für XMega-AVRs gültig (im Hinblick auf TWI), weil normale Megas nur eine TWI haben und somit die #2 komplett entfällt.
    Dann lösche ich die einfach

    Das Grundprogramm ist weder richtig noch falsch, es passt einfach nicht zu deiner Aufgabenstellung.
    Warum ? Ich mit diesem Prog erst einmal nur sehen, ob ich der mpu überhaupt richtig Daten entnehmen kann (ob ich mit I2C alles richtig gemacht habe usw. )

    Du müsstest TMP_Gyro... als Overlay definieren.
    Warum ?

    Außerdem weiß ich nicht, ob die Slave-Adressen richtig sind, aber da du diese ja schon angepasst hast, gehe ich davon aus, dass du das DB gelesen hast und entsprechend deiner Anschlussbelegung die Adresse richtig gewählt hast.
    Also im Datenblatt steht bei AD0 = 0 (gnd) Adresse : 1101000 Das macht fürs schreiben also &HD0 und fürs lesen &HD1 ,oder ??

    Deine Print-Ausgabe ist auch falsch bzw. unsinnig, da du als Mensch wohl nur schlecht die zwei Bytes (high & low) in sekundenschnelle zu einem int16 zusammensetzen kannst...
    Naja, dass soll ja nur zum testen sein

    Außerdem ist die Syntax falsch, aber da wird Bascom wohl sowieso meckern.
    Warum falsch ? Bei mir hat Bascom nicht gemeckert ...

    Am besten schreibst du erstmal ein compilierfähiges Grundprogramm (Controller-Def, Quarz, Mainloop) und fügst dann die relevaten Codeteile (zum Auslesen & Initialiseren des MPU) hinzu.
    Ok. Hier:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 200
    $swstack = 200
    $framesize = 400
    
    
    Config Portd.7 = Output
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config Twi = 100000
    
    Declare Sub Read_gyro
    Declare Sub Read_acc
    
    Dim Tmp_gyrox(2) As Byte
    Dim Tmp_gyroy(2) As Byte
    Dim Tmp_gyroz(2) As Byte
    
    Dim Tmp_accx(2) As Byte
    Dim Tmp_accy(2) As Byte
    Dim Tmp_accz(2) As Byte
    
    
    Sound Portd.7 , 400 , 450
    Sound Portd.7 , 400 , 250
    Sound Portd.7 , 400 , 450
    Wait 2
    
    
    I2cinit
    
    
    '--- (25) Sample Rate Divider = 1 ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 25                                              'Register 25 Sample Rate Divider (1..8 kHz)
       I2cwbyte &B00000000                                      'Divider set to 1   (soll)
       I2cstop                                                  'stop condition
    
       '--- (26) DLPF = 42/44 Hz ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 26                                              'Register 26 DLPF_CFG (digital lowpass filter) Configuration
       I2cwbyte &B00000011                                      'Bits 0..2 = 011 (3) - ACC:44Hz, 4.9ms; Gyro:42Hz, 4.8ms
       I2cstop                                                  'stop condition
    
       '--- (27) Gyro Full Range = +-2000°/s ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 27                                              'Register 27 Gyro Configuration
       I2cwbyte &B00011000                                      'Bits 3+4 = 11 - Full Scale Range: +/-2000°/s
       I2cstop                                                  'stop condition
    
       '--- (28) ACC Full Range = +-2g ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 28                                              'Register 28 ACC Configuration
       I2cwbyte &B00000000                                      'Bits 3+4 = 00 - Full Scale Range: +/-2g / No High Pass Filter
       I2cstop                                                  'stop condition
    
       '--- (107) Power Management 1 ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 107                                             'Register 107 Power Management 1
       I2cwbyte &B00001011                                      'No Reset / No Sleep / No Cycle / Temp_Sens: Dis / Clock Source: Z-Gyro
       I2cstop
    
    
    Do
      Call Read_gyro
      Print "Tmp_gyrox(2) :" ; Tmp_gyrox(2)
      Print "Tmp_gyrox(1) :" ; Tmp_gyrox(1)
    
      Waitms 20
    
      Print "Tmp_gyroy(2) :" ; Tmp_gyroy(2)
      Print "Tmp_gyroy(1) :" ; Tmp_gyroy(1)
    
      Waitms 20
    
      Print "Tmp_gyroz(2) :" ; Tmp_gyroz(2)
      Print "Tmp_gyroz(1) :" ; Tmp_gyroz(1)
    
      Waitms 100
    
    
    
    
      Call Read_acc
    
      Print "Tmp_accx(2) :" ; Tmp_accx(2)
      Print "Tmp_accx(1) :" ; Tmp_accx(1)
    
      Waitms 20
    
      Print "Tmp_accy(2) :" ; Tmp_accy(2)
      Print "Tmp_accy(1) :" ; Tmp_accy(1)
    
      Waitms 20
    
      Print "Tmp_accz(2) :" ; Tmp_accz(2)
      Print "Tmp_accz(1) :" ; Tmp_accz(1)
    
      Wait 1
    
    Loop
    
    End
    
    
    
    
    Sub Read_gyro()
    
       I2cstart
       I2cwbyte &HD0
       I2cwbyte 67
       I2crepstart
       I2cwbyte &HD1
    
       I2crbyte Tmp_gyrox(2) , Ack
       I2crbyte Tmp_gyrox(1) , Ack
    
       I2crbyte Tmp_gyroy(2) , Ack
       I2crbyte Tmp_gyroy(1) , Ack
    
       I2crbyte Tmp_gyroz(2) , Ack
       I2crbyte Tmp_gyroz(1) , Nack
    
       I2cstop
    
    
       'Gyrox = Gx
       'Gyroy = 0 - Gy
       'Gyroz = 0 - Gz
    
    End Sub
    
    
    Sub Read_acc()
    
    
       I2cstart
       I2cwbyte &HD0
       I2cwbyte 59
       I2crepstart
       I2cwbyte &HD1
    
       I2crbyte Tmp_accx(2) , Ack
       I2crbyte Tmp_accx(1) , Ack
    
       I2crbyte Tmp_accy(2) , Ack
       I2crbyte Tmp_accy(1) , Ack
    
       I2crbyte Tmp_accz(2) , Ack
       I2crbyte Tmp_accz(1) , Nack
    
       I2cstop
    
       'Accx = Ax
       'Accy = Ay
       'Accz = Az
    
    
    End Sub
    Und du solltest noch die passende Lib für die I2C Kommunikation einfügen.
    Habe ich noch nie gemacht und es hat trotzdem funktioniert. Muss ich das machen ?

    Eine Frage an dich : sind die Grundeinstellungen von dir zum init für die mpu richtig ??

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Hallo, ich habe jetzt ein funktionierendes Programm:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 200
    $swstack = 200
    $framesize = 400
    
    
    Config Portd.7 = Output
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config Twi = 100000
    
    Declare Sub Read_gyro
    Declare Sub Read_acc
    
    
    
    Dim Tmp_gyrox(2) As Byte
    Dim Tmp_gyroy(2) As Byte
    Dim Tmp_gyroz(2) As Byte
    
    Dim Tmp_accx(2) As Byte
    Dim Tmp_accy(2) As Byte
    Dim Tmp_accz(2) As Byte
    
    Dim Gyrox As Integer
    Dim Gyroy As Integer
    Dim Gyroz As Integer
    
    Dim Accx As Integer
    Dim Accy As Integer
    Dim Accz As Integer
    
    
    Sound Portd.7 , 400 , 450
    Sound Portd.7 , 400 , 250
    Sound Portd.7 , 400 , 450
    Wait 2
    
    
    Print "Hallo"
    Waitms 20
    
    
    I2cinit
    
    
    '--- (25) Sample Rate Divider = 1 ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 25                                              'Register 25 Sample Rate Divider (1..8 kHz)
       I2cwbyte &B00000000                                      'Divider set to 1   (soll)
       I2cstop                                                  'stop condition
    
       '--- (26) DLPF = 42/44 Hz ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 26                                              'Register 26 DLPF_CFG (digital lowpass filter) Configuration
       I2cwbyte &B00000011                                      'Bits 0..2 = 011 (3) - ACC:44Hz, 4.9ms; Gyro:42Hz, 4.8ms
       I2cstop                                                  'stop condition
    
       '--- (27) Gyro Full Range = +-2000°/s ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 27                                              'Register 27 Gyro Configuration
       I2cwbyte &B00011000                                      'Bits 3+4 = 11 - Full Scale Range: +/-2000°/s
       I2cstop                                                  'stop condition
    
       '--- (28) ACC Full Range = +-2g ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 28                                              'Register 28 ACC Configuration
       I2cwbyte &B00000000                                      'Bits 3+4 = 00 - Full Scale Range: +/-2g / No High Pass Filter
       I2cstop                                                  'stop condition
    
       '--- (107) Power Management 1 ---
       I2cstart                                                 'start condition
       I2cwbyte &HD0                                            'write adress of MPU-6050
       I2cwbyte 107                                             'Register 107 Power Management 1
       I2cwbyte &B00001011                                      'No Reset / No Sleep / No Cycle / Temp_Sens: Dis / Clock Source: Z-Gyro
       I2cstop
    
    
    Do
      Call Read_gyro
    
      Gyrox = Tmp_gyrox(1) + Tmp_gyrox(2)
      Gyroy = Tmp_gyroy(1) + Tmp_gyroy(2)
      Gyroz = Tmp_gyroz(1) + Tmp_gyroz(2)
    
      Print "Gyrox :" ; Gyrox
      Waitms 20
    
      Print "Gyroy :" ; Gyroy
      Waitms 20
    
      Print "Gyroz :" ; Gyroz
      Print
      Waitms 100
    
    
    
    
    
      Call Read_acc
    
      Accx = Tmp_accx(1) + Tmp_accx(2)
      Accy = Tmp_accy(1) + Tmp_accy(2)
      Accz = Tmp_accz(1) + Tmp_accz(2)
    
      Print "Accx :" ; Accx
      Waitms 20
    
      Print "Accy :" ; Accy
      Waitms 20
    
      Print "Accz :" ; Accz
      Print
      Print
      Print
      Wait 1
    Loop
    End
    
    
    
    
    
    Sub Read_gyro()
    
       I2cstart
    
       I2cwbyte &HD0
       I2cwbyte 67
       I2crepstart
       I2cwbyte &HD1
    
       I2crbyte Tmp_gyrox(2) , Ack
       I2crbyte Tmp_gyrox(1) , Ack
    
       I2crbyte Tmp_gyroy(2) , Ack
       I2crbyte Tmp_gyroy(1) , Ack
    
       I2crbyte Tmp_gyroz(2) , Ack
       I2crbyte Tmp_gyroz(1) , Nack
    
       I2cstop
    
    End Sub
    
    
    
    
    
    
    Sub Read_acc()
    
       I2cstart
    
       I2cwbyte &HD0
       I2cwbyte 59
       I2crepstart
       I2cwbyte &HD1
    
       I2crbyte Tmp_accx(2) , Ack
       I2crbyte Tmp_accx(1) , Ack
    
       I2crbyte Tmp_accy(2) , Ack
       I2crbyte Tmp_accy(1) , Ack
    
       I2crbyte Tmp_accz(2) , Ack
       I2crbyte Tmp_accz(1) , Nack
    
       I2cstop
    
    End Sub
    Doch bekomme ich nur sinnlose Werte. Wie kann ich denn richtige Ergebnisse bekommen ? Soll ich mehrere Messungen machen und diese dann mitteln oder was ?

    Kennt jemand ein Programm, dass die Daten graphisch darstellen kann ??

  4. #24
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    wie gesagt, du musst die Tmp-Variablen als Overlay definieren. Alternativ könntest du auch sowas machen (nach dem auslesen der TMPs):
    Code:
    gyrox = tmp_gyrox(1) * 256
    gyrox = gyrox + tmp_gyrox(2)
    Ein Programm zum graphischen Darstellen von versch. Daten könntest du dir selbst in z.b. vb.net schreiben, da ist die Syntax sehr ähnlich zu Bascom

    Gruß
    Chris

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Was genau soll mir das : gyrox = tmp_gyrox(1) * 256 gyrox = gyrox + tmp_gyrox(2) bringen ? (kenne mich nicht so gut aus)

    Ein Programm zum graphischen Darstellen von versch. Daten könntest du dir selbst in z.b. vb.net schreiben, da ist die Syntax sehr ähnlich zu Bascom
    Ja, das versuche ich schon den ganzen Abend, doch bekomme ich es nicht hin. Ich schaffe es zwar die Seriellen Danten in einem Text-Feld darzustellen, aber nicht die Daten anders z.B. graphisch (ich habe es mit Progress Bar versucht, wusste aber nicht welche Einstellungen) ....

    Was würdest du denn als Ding nehmen um es als Objekt darzustellen (auch mit Progress Bar, oder würdest du es ganz anders angehen ) ...

    Ich hoffe du kannst mir weiterhelfen
    Der Einsteiger

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    also wie gesagt, lies das DB, dann sollten keine weiteren solchen Fragen auftauchen Hier gehts speziell um die Register 67 & 68 (diese beiden sollten genügen).
    Ich hab mir ein Programm geschrieben, das die Daten binär empfängt und anschließend in einer Picturebox mittels drawline darstellt. Das ist wesentlich übersichtlicher als Progressbars und man kann den zeitlichen Ablauf besser einsehen.

    Gruß
    Chris

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    So, habe jetzt mal das gemacht, was in Post 24 als Code gezeigt wurde. Doch bekomme ich nur solche Werte für den Gyrox (ich habe es bis jetzt auch nur mit dem getestet ). Dazu muss ich noch sagen: ICH habe die mpu dabei NULL bewegt..... ist doch komisch, oder ?

    0
    -11522
    -16642
    -12034
    -15874
    -11778
    -11010
    -21506
    -13570
    -15106
    -7682
    -15106
    -14338
    -13826
    -9474
    -12034
    -17666

    Zur graphischen Darstellung : nach einigen youtube Tutorials habe ich nun endlich herausgefunden, wie ich eine Linie in einer PictureBox mache. Doch weiß ich nicht wie ich das Feld (PictureBox) so anpasse, dass 1: x0 y0 unten links sein soll und 2: wie ich große Werte oder auch Minuswerte darstellen soll, da ja mein MC den z.B. Gyrox Wert direkt an den PC sendet ?????
    Könnt ihr mir bitte helfen

  8. #28
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2012
    Beiträge
    511
    Habe noch mal eine Frage : Warum bekomme ich beim Acc x solche Werte :
    1275
    8443
    -12038
    251
    3323
    14587
    -774
    2299
    -1798
    -30469
    -2822
    11515

    Warum sind die so unterschiedlich, obwohl ich den Sensor gar nicht bewege ??

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied Avatar von da_miez3
    Registriert seit
    24.02.2012
    Ort
    Ilmenau
    Alter
    36
    Beiträge
    198
    Bist du weitergekommen mit dem Sensor? Hab mir jetzt den gleichen gekauft und stehe vor dem selben Problem

  10. #30
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    also irgendwie komme ich mir veralbert vor, wenn ich mehrmals die Lösung poste und es immer wieder nicht umgesetzt wird und dann gefragt wird, warums nicht funktioniert...
    DEFINIERE TMP_GYROX(2) ALS OVERLAY DER VARIABLE GYROX!
    Wie im Post #24 geschrieben, könnte man auch SOWAS machen:
    Code:
    gyrox = tmp_gyrox(1) * 256
    gyrox = gyrox + tmp_gyrox(2)
    Das SOWAS deutet darauf hin, dass dies keine exakte Lösung darstellt, sondern lediglich einen Lösungsweg --> Evtl. mal das probieren:
    Code:
    gyrox = tmp_gyrox(2) * 256
    gyrox = gyrox + tmp_gyrox(1)
    Sollte funktionieren, wenn nicht gibts irgendwo anders noch nen Fehler.

    Gruß
    Chris

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Suche Hilfe zu IMU ITG/MPU 6050 - GY521
    Von HannoHupmann im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 29.08.2013, 18:37
  2. Mpu-6050
    Von inka im Forum Robby RP6
    Antworten: 12
    Letzter Beitrag: 29.05.2013, 09:41
  3. Problem mit MPU-6050
    Von ni.c im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 06.04.2012, 11:53
  4. Verkaufe Invensense MPU-6050 neu unbenutzt
    Von superkato im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 16.03.2012, 17:03
  5. Bitmuster auswerten mit Bascom??
    Von michaelF im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 03.08.2004, 05:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad