Hi und hallo,
ich versuche mich gerade daran einen Sensor per SPI anzusprechen. Leider funktioniert es bis jetzt noch
nicht.
Der Chip-Select Pin funktioniert. Das habe ich messen können.
Das Ganze läuft zwar durch, aber es steht hinterher nur Müll in der Variable "daten". Ich habe das Gefühl, dass die Kommunikation erst gar nicht anspringt.
Ich habe es zwar nicht richtig messen können, aber anscheinend läuft die Clock des SPI nicht an.
Wäre klasse, wenn mir da jemand weiter helfen könnte. Vielleicht gibt es ja schon einen fehler bei der Initialisierung des SPI.
Vielen Dank schon einmal!
Hier einmal die Teile meines Codes:
Die Kommunikation mit dem Sensor soll dann wie folgt laufen:Code:#define SPI_PIN PINB #define SPI_DDR DDRB #define SPI_PORT PORTB #define MISO 3 #define MOSI 2 #define Clock 1 #define SS 0 CS_PIN PINE void SPI(void) { SPI_PORT_DDR &=~(1<<MISO); // miso auf input SPI_PORT_DDR |= (1<<Clock); // clock auf output SPI_PORT_DDR |= (1<<MOSI); // mosi auf output SPI_PORT_DDR |= (1<<SS); // wird nicht gebraucht, ss auf output CS_PIN |= (1<<PE2); // chip selet auf high SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); }
Code:#include <avr\io.h> #include <stdlib.h> #include <avr/interrupt.h> int main(void) { cli(); Ports(); SPI(); sei(); CS_PIN &= ~(1<<CS_TEMP); // CS auf LOW _delay_us(10); // kurz warten SPDR= 0x10; // Daten senden while(!(SPSR & (1<<SPIF))); daten= (SPDR<<8) & 0x3FFF; // Ersten 8 Bit als MSBs ablegen SPDR= 0x01; while(!(SPSR & (1<<SPIF))); daten+= SPDR; // Letzten 8 Bit dazu addieren CS_PIN |= (1<<PE2); // cs High while(1) { ..... } }/* main */







Zitieren


Lesezeichen