Forum: Mikrocontroller und Digitale Elektronik Bekomme MEMS Accelerometer nicht enabled


von JTAGice3 (Gast)


Lesenswert?

Hi,

bekomme meinen Sensor nicht zum laufen.
Um den Sensor zu starten muss man 2 Bytes per SPI übertragen.

Hier der link zur Beschreibung:
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00272379.pdf

Auf Seite 32 unter 9.1 2.Absatz steht, dass man lediglich den Wert 0x47 
in das CTRL_REG1 schreiben muss.
Wie man das macht, wird auf Seite 15 unter 4.2.3 im Timing Diagramm 
beschrieben.

Hier mein Code in gekürzter Form:


void SPI_MasterInit(void)
{
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);    //Set MOSI and SCK 
output, all others input
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);    /* Modus 0,Enable 
SPI, Master, set clock rate fck/128  */
}

void SPI_MasterTransmit(uint8_t adress, uint8_t data)
{
  DDR_SPI &= ~(1<<DD_SS);      //activate SS pin

  SPDR = adress ;          // Start transmission of adress
  while(!(SPSR & (1<<SPIF)))    // Wait for transmission complete
    ;
  SPDR = data ;            // Start transmission of data (register)
  while(!(SPSR & (1<<SPIF)))    // Wait for transmission complete
    ;

  DDR_SPI |= (1<<DD_SS);      //deactivate SS pin
}

int main(void)
{
  SPI_MasterInit();  //SPI initialization

  SPI_MasterTransmit(CTRL_REG1, 0x47);  //write protocol, CTR_REG


  return 0;
}


Wo liegt mein Fehler?

von Tim (Gast)


Lesenswert?

> Wo liegt mein Fehler?
1. Vollständiger Quellcode fehlt.
2. Falsches Datenblatt verlinkt.

> DDR_SPI &= ~(1<<DD_SS);      //activate SS pin

Was wolltest du hier machen?
SS von input auf output umschalten?

von spess53 (Gast)


Lesenswert?

Hi

Wie viele Threads willst du eigentlich noch aufmachen?

Beitrag "SPI SS pin active und passiv verhindert transmission complete"

Der stammt doch auch von dir:

Beitrag "Re: 3 Achsen MEMS Beschleunigungs Sensorkit"

>Wo liegt mein Fehler?

Du hast das Datenblatt nicht gelesen. Wenn im Mastermode der SS-Pin ein 
Eingang ist reicht dort ein L um die SPI in den Slavemode zu versetzen. 
Und dann kannst du Senden bis du schwarz wirst.

MfG Spess

von JTAGice3 (Gast)


Angehängte Dateien:

Lesenswert?

Tim schrieb:
>> Wo liegt mein Fehler?
> 1. Vollständiger Quellcode fehlt.
> 2. Falsches Datenblatt verlinkt.

Sorry wegen des falschen links.
Hier ist der vollständige code im Anhang.



>> DDR_SPI &= ~(1<<DD_SS);      //activate SS pin
>
> Was wolltest du hier machen?
> SS von input auf output umschalten?

Ich hatte das aus einem Codebeispiel übernommen, da ich dachte dass das 
so gehört.
http://www.ermicro.com/blog/?p=1050         File Name    : mcp23s17.c

von JTAGice3 (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
> Wie viele Threads willst du eigentlich noch aufmachen?

Sorry wollte niemanden verärgern.
Ich wollte lediglich Teilprobleme auf andere Threads auslagern.
Das werde ich zukünftig unterlassen.


> Du hast das Datenblatt nicht gelesen. Wenn im Mastermode der SS-Pin ein
> Eingang ist reicht dort ein L um die SPI in den Slavemode zu versetzen.
> Und dann kannst du Senden bis du schwarz wirst.

Habe jetzt deinen Hinsweis berücksichtigt, aber leider sendet der Sensor 
immer noch nicht. Der aktuelle Code volständige Code liegt jetzt bei.

von JTAGice3 (Gast)


Lesenswert?

Nachtrag zum Code


Beim schönformatieren ist versehentl. folgendes rausgeflogen:

#define F_CPU 1000000UL

von spess53 (Gast)


Lesenswert?

Hi

>Habe jetzt deinen Hinsweis berücksichtigt, aber leider sendet der Sensor
>immer noch nicht.

Vielleich solltest du mal den SS-Pin auf Ausgang schalten.

MfG Spess

von JTAGice3 (Gast)


Lesenswert?

spess53 schrieb:

> Vielleich solltest du mal den SS-Pin auf Ausgang schalten.


Hatte SS vor deinem Hinweis:

>Du hast das Datenblatt nicht gelesen. Wenn im Mastermode der SS-Pin ein
>Eingang ist reicht dort ein L um die SPI in den Slavemode zu versetzen.
>Und dann kannst du Senden bis du schwarz wirst.

schon als Ausgang, funktioniert ja leider auch nicht.

von spess53 (Gast)


Lesenswert?

Hi

>Hatte SS vor deinem Hinweis:

>>Du hast das Datenblatt nicht gelesen. Wenn im Mastermode der SS-Pin ein
>>Eingang ist reicht dort ein L um die SPI in den Slavemode zu versetzen.
>>Und dann kannst du Senden bis du schwarz wirst.

>schon als Ausgang, funktioniert ja leider auch nicht.

Das SS-Pin, vorausgesetzt es ist mit CS vom Slave verbunden, muss als 
Ausgang konfiguriert sein und vor einer Übertragung auf L gesetzt 
werden.

MfG Spess

von JTAGice3 (Gast)


Lesenswert?

Das gibts doch nicht.

Ich hatte MOSI und MISO miteinander vertauscht.

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.