Hallo,
Ich denke doch. ich habe die SPI INitialisierung mal ein wenig überarbeitet:Stimmt der SPI-Modus (Polarität + Phase)?
Mein Aufruf sieht nun so aus:Code:void initSPI(void) // Initialisierung der SPI Schnittstelle { SPI_PORT_DDR &=~(1<<SPI_MISO); // miso auf input SPI_PORT_DDR |= (1<<SPI_Clock); // clock auf output SPI_PORT_DDR |= (1<<SPI_MOSI); // mosi auf output SPI_PORT_DDR |= (1<<SPI_SS); Disable(); SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPI2X)|(1<<SPR0)|(1<<SPR1)|(1<<CPOL)|(1<<CPHA); // SPI Enable // Master Select // f_clkio/64 // Leading Edge -> Falling // Trailing Edge -> Rising
Was ich sagen kann, ist, dass das CS funktioniert. Geht am Anfang auf High, zum Auslesen wird es dann eben LOW gesetzt und danach wieder High. Anscheinen läuft die Clock nicht.Code:volatile uint16_t data= 0; Enable(); _delay_us(10); SPDR= 0x10; while(!(SPSR & (1<<SPIF))); data= (SPDR<<8) & 0x3FFF; SPDR= 0x10; while(!(SPSR & (1<<SPIF))); data+= SPDR; _delay_us(10); Disable();
Der Code läuft aber so durch. Danach habe ich einfach noch Kontrollausgaben per LED auf meinem Board. Daher sehe ich, dass der komplette Code durchlaufen wird.
In der Variable data steht aber am Ende nur eine Null drin, wird der Variable am Anfang ja auch zugewiesen. Also ändert sich da nichts, d.h. der Sensor sendet keine Daten. Wie oben schon geschreiben, anscheinend läuft die Clock nicht, somit kann ja auch nichts empfangen werden.
Wie es scheint, läuft die Clock auch nicht, wenn ich MISO und MOSI direkt verbinde.
Hat jemand noch eine Idee, woran es liegen könnte?







Zitieren

Lesezeichen