www.mikrocontroller.net

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


Autor: Gerald F. (schwedenpils)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rush ... (rush)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerald F. (schwedenpils)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.