atmega 328 und MPU 9150

OP #3939741
Lesenswert?
• ▲
▼
hey,
ich versuche schon seit einigen Tagen den MPU9150 von invensense mit dem 
atmega 328 anzusteuern.
Programmiert wird das Teil in Atmelstudio (neuste version).
Ich nutze den Arduino Bootloader und lade die Hexfile mit xloader auf 
den atmega.
Soweit so gut, ich bekomme aber immer konstante werte für alle achsen. 
Die Werte ändern sich nach jedem reset, bleiben dann aber konstant.

In den Tiefen des Internets habe ich einen funktionierenden Beispielcode 
für die Arduino IDE gefunden die mir die richtigen Werte liefert.

Der konstante Wert aus meinem Code stimmt ungefähr mit den Offsetwerten 
aus dem Beispielcode überein.

Daraus habe ich gefolgert, dass entweder kein neuer Wert in die Register 
des Sensors geladen wert(kann das sein? der beispiel code geht ja mit 
der selbe initalisierung), oder mit der i2c kommunikation läuft etwas 
schief

Ich habe die selben Einstellungen wie im Beispielcode verwenden.  Für 
die kommunikation nutze ich die i2c library von peter fleury.
ich habe die gesamten dateien angehängt hoffe es ist alles übersichtlich 
genug...
Hier der relevante teile des Codes:

while (1)
  {
    i2c_start_wait(MPU9150_ADDRESS);
    i2c_write(MPU9150_GYRO_XOUT_H);
    i2c_rep_start(MPU9150_ADDRESS | 1);
    int f = i2c_readAck() << 8 | i2c_readAck();


    sprintf(stest,"%i\n",f);
    uart_puts(stest);

  }

der sensor wird wie folgt initialisiert:


void imu_init(void)
{

  //WAKEUP
  i2c_start(MPU9150_ADDRESS);
  i2c_write(MPU9150_PWR_MGMT_1);
  i2c_write(0);
  i2c_stop();
  //INIT COMPASS
    //power down mode
  i2c_start(MPU9150_CMPS_ADDRESS);
  i2c_write(0x0A);
  i2c_write(0x00);
    //selftest
  i2c_rep_start(MPU9150_CMPS_ADDRESS);
  i2c_write(0x0A);
  i2c_write(0x0F);
    //power down mode
  i2c_rep_start(MPU9150_CMPS_ADDRESS);
  i2c_write(0x0A);
  i2c_write(0x00);
    //wait for data at slave0
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x24);
  i2c_write(0x40);
    //Set i2c address at slave0 at 0x0C
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x25);
  i2c_write(0x8C);
    //Set where reading at slave 0 starts
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x26);
  i2c_write(0x02);
    //set offset at start reading and enable
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x27);
  i2c_write(0x88);
    //set i2c address at slv1 at 0x0C
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x28);
  i2c_write(0x0C);
    //Set where reading at slave 1 starts
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x29);
  i2c_write(0x0A);
    //Enable at set length to 1
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x2A);
  i2c_write(0x81);
    //overvride register
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x64);
  i2c_write(0x01);
    //set delay rate
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x67);
  i2c_write(0x03);
    //wtf??
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x01);
  i2c_write(0x80);
    //set i2c slv4 delay
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x34);
  i2c_write(0x04);
    //override register
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x64);
  i2c_write(0x00);
    //clear usr setting
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x6A);
  i2c_write(0x00);
    //override register
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x64);
  i2c_write(0x01);
    //enable master i2c mode
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x6A);
  i2c_write(0x20);
    //disable slv4
  i2c_rep_start(MPU9150_ADDRESS);
  i2c_write(0x34);
  i2c_write(0x13);

  i2c_stop();
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.