Hallo,
Stimmt der SPI-Modus (Polarität + Phase)?
Ich denke doch. ich habe die SPI INitialisierung mal ein wenig überarbeitet:
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
Mein Aufruf sieht nun so aus:
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();
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.
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?
Lesezeichen