Problem mit SCA3000 Beschleunigungssensor und SPI

OP #1995469
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
#1995715
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

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