Forum: Mikrocontroller und Digitale Elektronik MMA7745 SPI Probleme AVR


von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

folgendes Problem: Ich versuche einen MMA7745 (Beschleunigungssensor von 
Freescale) per SPI@4MHz am ATMega32@16MHz zu betreiben.

Hier meine Schreibroutine / Initialisierungsroutine:
1
PORTB &= ~(1 << PB4);  // SS auf LOW w�hrend der �bertragung
2
3
SPDR  = 0b10101100;              // send address 0x16 Mode Control Register (Read/Write)
4
while (!(SPSR & (1<<SPIF)))      // wait until address is sent
5
    ;
6
x = SPDR;                // dummyread
7
SPDR  = 0b01001000;              // send data: 2g measurement range, measurement mode, no selftest
8
                                      //            SPI 4 wire mode, data ready output on INT1
9
while (!(SPSR & (1<<SPIF)))      // wait until data is sent
10
    ;
11
x = SPDR;                // get 8bit value of x axis
12
PORTB |= (1 << PB4);  // SS auf HIGH zum Beenden der �bertragung

.. und die Leseroutine:
1
acc_x = 0;
2
PORTB &= ~(1 << PB4);  // SS auf LOW w�hrend der �bertragung  
3
4
SPDR  = 0b00001100;              // send address 0x06 8 bits output value X (Read)
5
while (!(SPSR & (1<<SPIF)))      // wait until address is sent and reception complete
6
  ;  
7
x = SPDR; //dummy read
8
9
SPDR = 0x00;//Daten werden mit dem N�chsten Transfer gesendet
10
while (!(SPSR & (1<<SPIF)))//Warten bis Transfer abgeschlossen ist
11
  ;
12
PORTB |= (1 << PB4);
13
14
acc_x = SPDR; //Empfangene Daten Auslesen

Das Schreiben sieht auf dem Scope ganz gut aus.
Nur beim auslesen der Beschleunigungswerte sieht man seltsames.
Manchmal sind Daten vorhanden die schnell wechseln und über alle 16 SCK 
Takte verteilt sind, dann wieder gibts es über Sekunden hinweg ein 
festes Datum und zu guter letzt sieht man gar keine Aktivität mehr.

Ich habe hierzu einige ScopeScreenshots angehängt.
Weiß jemand was da falsch läuft?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hast du den richtigen SPI-Modus eingestellt?
Zeig doch auch mal ein Bild von der SDI-Leitung...

von Alex (Gast)


Lesenswert?

Ja der SPI Modus ist auf 0 eingestellt, das passt.
/CS kommt auch richtig, darauf trigger ich extern, daher sieht man es in 
den Screenshots nicht.
Das erste Bild zeigt die SDI Leitung.

von Alex (Gast)


Lesenswert?

hat keiner eine Idee?
Ich häng schon seit Tagen fest..

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.