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:

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);
}
Die Kommunikation mit dem Sensor soll dann wie folgt laufen:

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 */