Forum: Mikrocontroller und Digitale Elektronik MPU-6000 SPI initalisieren


von Michael (Gast)


Lesenswert?

Hallöchen

Mit diesem Theard werde ich mir wohl nicht viele Freunde machen... Hab 
ähnliche Theards gelesen die wenigen bis keine Antworten erhielten.
Dennoch benötige ich eure Hilfe.

Ich möchte eine MPU-6000 über SPI mit einem PIC16F887 betreiben.
Ein Rätsel ist mier woher die MPU weiss, welcher Bus (I2C oder SPI) 
verwendet werden soll. Zwar gibt es ein Register106 wo man umschalten 
kann, aber mit einem Bus muss ja gestartet werden, oder?

Aus meiner Verzweiflung habe ich einfach mal versucht dieses Register106 
auszulesen:

  - SPI_Write(11101010)MSB"1" = lesen
  - delay
  - SPI_Read(buffer)

Getan hat sich gar nix. SPI Clock hat 500kHz (mit KO gemessen).

Vielen Dank schon mal
Gruss Michael

Datenblätter:
http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A.pdf
http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf

von Thomas F. (tomasf)


Lesenswert?

Ich verstehe des Datenblatt so, dass SPI aktiv ist, sobald CS low ist. 
Falls Du das SPI für mehrere Geräte nutzt, sollte das IIC-Interface als 
erstes abgeschaltet werden.

von Michael (Gast)


Lesenswert?

DankeDanke
Achso ist das. Sollte soweit kein Problem sein, da ich nur diesen Slave 
habe und somit CS immer low ist.
Hab jetzt noch das Register106 auf SPI eingstellt und nochmals versucht 
zu lesen. Funktioniert noch nichts. Bin aber noch guter Dinge :-)
Werde mich nochmals melden. Mit Problemen oder mit guten Neuigkeiten. 
:-D

von bko (Gast)


Lesenswert?

>habe und somit CS immer low ist.
Vielleicht übernimmt der Chip die Daten nur auf der
steigenden /CS Flanke?

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hab den CS Pin jetzt auch im Programm:

  delay_ms(1000);              Genug Zeit um Chip hochzufahren
  RC1_bit = 0;                 /CS, SPI Mode aktivieren
  SPI1_Write(0b01101010);      Schreiben in Adresse 106
  SPI1_Write(0b00010000);      Daten in Adresse 106 schreiben, I2C aus
  SPI1_Write(0b11101010);      Lesen von Adresse 106
  delay_ms(1000);              Genug Zeit um Chip antworten zu lassen
  RC1_bit = 1;                 /CS, SPI Mode aktivieren

Lesen tut sich nichts sinnvolles. Auch am KO nichts gutes.
Schreiben sieht soweit gut aus, nur dass ich 4 Schreibblöcke auf dem KO 
sehe statt nur 3! Ist es möglich dass er Antwortet am im I2C Mode? Naja 
weil es auf der selben Leitung geschieht.

von Thomas F. (tomasf)


Lesenswert?

> Schreiben sieht soweit gut aus, nur dass ich 4 Schreibblöcke auf dem KO
> sehe statt nur 3! Ist es möglich dass er Antwortet am im I2C Mode? Naja
> weil es auf der selben Leitung geschieht.

starte das Programm doch mal ohne angeschlossenen Sensor, ob dann immer 
noch 4 Bytes sichtbar sind.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hab falsch gemessen. Sorry. Da ich 3mal Sende und 1mal Empfangen möchte. 
Sieht man auf der Taktleitung natürlich 4Blöcke.

Im Anghang die Bilder vom KO.

1.Bild: Blau: Clock
        Gelb: Send (vom PIC aus gesehen)
2.Bild: Blau: Read (vom PIC aus gesehen)
        Gelb: Send (vom PIC aus gesehen)
3.Bild: Blau: Read (vom PIC aus gesehen)
        Gelb: CS

Soweit ich sehe, stimmt die SPI Logik.
Scheint das nur so oder will die MPU zurücksenden aber bringt den Pegel 
nicht hoch? Hab den Pin bereits durchgemessen, weder Kurzschluss noch 
Niederohmig. Von einem Opendrain Ausgang steht ja nix. Hab mich genau an 
die Hardware vom Datenblatt gehalten.
Achja, ich habe die SPI Frequenz auf 125kHz gedrosselt.

von Michael (Gast)


Lesenswert?

Hi zusammen

Habe den Fehler, oder zumindest einen gefunden.
VDD war nicht angeschlossen -.- Der Draht war nur an das Zinn angelehnt 
und nicht richtig verlötet. Hab am Anfang alles durchgepiepst, da sahs 
gut aus.
Naja den Sensor kann ich mir wohl abschreiben. Da mein Studentenbudget 
etwas mager ist, wird das Projekt vorerst auf Eis gelegt. (in der 
Schweiz sind die Dinger richtig teuer ;-))

Trotzdem vielen Dank für eure Bemühungen

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
Noch kein Account? Hier anmelden.