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

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.