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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.