Forum: Mikrocontroller und Digitale Elektronik Problem mit SCA3000 Beschleunigungssensor und SPI


von Gerald F. (schwedenpils)


Lesenswert?

Hallo,

ich möchte einen SCA3000-D01 Sensor über SPI an meinen ATmega32L
auslesen.
Ich habe mal folgenden Code geschrieben, ist da irgendwo ein Fehler den
ich nicht sehe und wie kann ich über den Spare Anschluss am STK500 Board
mein Programm beobachten um zu sehen wo es sich aufhängt.

Hier der Code

#include <avr/io.h>
#include <util/delay.h>    //Bibliothek für Verzögerung


int read_x_channel();
void SPI_MasterInit(void);

int main(void)
{

  int Wert;
  SPI_MasterInit();
  while(1)
  {
    Wert = read_x_channel();
    _delay_us(20);

  }


  return 0;
}

int read_x_channel()
{
short x1,x2;
int x3, xGes;

 PORTB = (0 << PB0);                   //SS auf low setzen
 SPDR = 0x05;                          //Befehl read X-Channel in SPDR
 while(!(SPSR & (1<<SPIF)));          //Warten bis Empfangsende
 x1 = SPDR;                            //Wert x1 aus DR wird gespeichert
 x3 = x1<<8;                            //x1 wird um 3 verschoben
 SPDR = 0x04;               //Dummybyte
 while(!(SPSR & (1<<SPIF)));           //s.o.
 x2 = SPDR;                 //Wert x2 aus DR wird gespeichert

 xGes = x3 + x2;            //Endwert wird berechnet
 PORTB = (1 << PB0);                   //SS auf highsetzen

 return (xGes);                //Endwert wird zurück gegeben
}

void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB |= (1<<PB2) | (1<<PB3) | (1<<PB5);

/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

Vielen Dank im Voraus
Gruß Gerald

von Rush .. (rush)


Lesenswert?

Also auf den ersten Blick sehe ich  nicht wirklich eine Stelle wo sich 
das Programm aufhängen könnte. Aber lass es doch mal im simulator laufen 
und schau mal ob es nicht zufällig in der while(!(SPSR & (1<<SPIF)));

stecken bliebt. schau auch mal im datenblatt ob es nicht eventuell
while(SPSR & (1<<SPIF));

heissen müsste.

Und noch was:
x3 = x1<<8;                            //x1 wird um 3 verschoben
hier schiebst du um 8 bit nach links. dann hast du, wenn x1=11111111 
ist, x3=1111111100000000.

das würde ich auf alle fälle mal kontrollieren, wobei es nicht für das 
hängen deines programms verantwortlich ist.

mfg konrad

von Gerald F. (schwedenpils)


Lesenswert?

Vielen Dank für deine schnelle Hilfe.

Ich habe gerade die SPI Leitungen vom Sensor getrennt und festgestellt 
das am CSB also am SS des Sensors 3,3Volt anliegen, das sollte doch 
nicht sein oder?

Gruß Gerald

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.