Bekomme MEMS Accelerometer nicht enabled

Gast #2784880
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?
Gast #2784903
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?
Gast #2784917
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
Gast #2785657
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
Angehängte Dateien:
Gast #2785662
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.
Gast #2785930
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.
Gast #2785957
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

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