Problem mit SPI

Gast #2627699
Lesenswert?

Hallo!

Ich habe ein kleines Problem mit dem SPI. Ich versuche ein L3G4200D 
Gyroskop auszulesen. Dazu verwende ich zunächst ein Register in dem eine 
ID gespeichert ist, damit ich immer einen satischen Wert habe und sehe, 
ob er das Richtige ausliest.
Eigentlich soll "D3" zurückgegeben werden. Leider kommt jedoch nur ein 
anderer Wert, der zwar jeweils der Bitfolge entspricht, allerdings um 
ein Bit nach Links oder Rechts verschoben ist. "D3" habe ich schon 
einmal aus ihm herausbekommen, allerdings nur als ich die an Phase und 
Polarität so gedreht habe, dass es nicht mit den Werten im Datenblatt 
übereinstimmt.

Hat jemand eine Idee?
Danke!
Angehängte Dateien:
Gast #2627963
Lesenswert?

Hallo,

vielleicht ist das DB falsch? Vielleicht sind Polarität und Phase 
invertiert angegeben, vielleicht auch invertiert im Mikrokontroller 
implementiert, so dass man anscheinend falsche  (in Wirklichkeit sind 
sie nur kontraintuitiv) Werte einstellen muss.
Gast #2627975
Lesenswert?

Ich habe gerade einen Blick ins DB geworfen. Laut DB ist die Clock 
idle-high. Das ist bei deinem Screenshot aber nicht der Fall. Oder ist 
es das Bild, wo es mit den falschen Einstellungen geklappt hat? 
Vielleicht Interpretiere ich das Oszi-Bild aber auch nur falsch.
Meine Interpration vom DB wäre, dass sowohl Polarität als auch Phase '1' 
sein müssten.
Gast #2634156
Lesenswert?

Hallo!

Ich denke es ist noch ein generelles Pronlem mit dem SPI. Ich nutze den 
MSP430F5438 und hier ist mal mein Code zur Config:
1
UCB3CTL1 |= UCSWRST;                                                          // reset UCB3 during setup
2
  UCB3CTL0 |= UCMST  + UCSYNC + UCMODE_2 + UCMSB + UCCKPL;                      // Data is changed on the first UCLK edge and captured on the following edge.
3
                                                                                // The inactive state is high
4
                                                                                // Master mode
5
                                                                                // 4-pin SPI with UCxSTE active low: Slave enabled when UCxSTE = 0
6
                                                                                // Synchronous mode
7
  UCB3CTL1 |= UCSSEL_2;            // Clocksource is SMCLK with 18MHz
8
  UCB3BR0   = 0x0F;                // Speed = SMCLK/4 = 4,5MHz
9
  P10DIR   |= 0xCB;              // P10.0+1+3 are outputs
10
  P10SEL   |= 0x0F;                // Peripheral function activated for Pin 10.0...10.3  
11
  
12
  UCB3CTL1 &= ~UCSWRST;            // restart UCB3
13
  
14
  __delay_cycles(100);

Damit lese ich nun das ID-Register eines ADXL345 aus, allerdings kommen 
auf dem MISO nur die aktuellen Lottozahlen (und beliebige andere, bei 
jedem auslesen) und nicht der Registerwert.

Clock und Phase sind für den ADXL richtig, auch das Timing habe ich 
überprüft.
Hatte jemand schon ähnliche "Symptome" auf seinem Bus? Woran lag es?
Moderator (Firma: Titel) Persönliche Seite #2634164
Lesenswert?

Sigfried schrieb:
> Leider kommt jedoch nur ein anderer Wert, der zwar jeweils der Bitfolge
> entspricht, allerdings um ein Bit nach Links oder Rechts verschoben ist.
Sigfried schrieb:
> Hatte jemand schon ähnliche "Symptome" auf seinem Bus?
Ja.
> Woran lag es?
Falscher SPI-Mode.

Es kann sogar ab&zu funktionieren. Es kann aber auch temperaturabhängig 
und natürlich baustein- und leitungsabhängig sein...

> Clock und Phase sind für den ADXL richtig, auch das Timing habe
> ich überprüft.
Mit dem Oszi?
> Achso, der Takt liegt bei 1.8 MHz
Wie sieht das Signal am Baustein aus? Überschwinger?
Gast #2635995
Lesenswert?

Die Modes habe ich schon alle durchprobiert. Ebenso wie verschiedene 
Taktraten. Das Timing habe ich mit dem Oszi überprüft.

Teilweise funktioniert das SPI, allerdings nur, wenn ich ein Byte 
abfrage, wenn ich mehrere Register auslesen oder beschreiben will, kommt 
es zu Fehlern...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren