Hallo,
dass der Code ein wenig durcheinander ist, liegt nicht daran, dass es wild zusammenkopiert ist, sondern daran, dass ich das eine Menge rumprobiert habe und dabei die Ordnung habe schleifen lassen.
Ich habe das Ganze einmal aufgeräumt, siehe unten.
Das CS funktioniert sicher. erst ist der Pin HIGH, dann setze ich ihn auf LOW und dann wieder auf HIGH. Das habe ich mir mit dem Oszi angeschaut.
Ich habe einfach mal den SPI-Kram auskommentiert, ein delay zwischen Sensor-aktivieren und Sensor-deaktivieren eingefügt, CS am Oszi angeschaut und das springt eben wie gewünscht HIGH - LOW - HIGH.
Bei der Clock sehe ich aber leider nichts.
Ich habe das Gefühl, dass ich vor lauter Bäumen den Wald nicht mehr sehe.
SPI - Init:
Code aus der main:Code:#define SPI_PIN PINB #define SPI_DDR DDRB #define SPI_PORT PORTB #define SPI_MISO PB3 #define SPI_MOSI PB2 #define SPI_Clock PB1 #define SPI_SS PB0 SPI_DDR &=~(1<<SPI_MISO); // miso auf input SPI_DDR |= (1<<SPI_Clock); // clock auf output SPI_DDR |= (1<<SPI_MOSI); // mosi auf output SPI_DDR |= (1<<SPI_SS); // ss auf output PORTE |= (1<<PE2); // Sensor deaktivieren 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
Code:PORTE &= ~(1<<PE2); // Sensor aktivieren, CS -> LOW _delay_us(10); // wait SPDR= 0x10; while(!(SPSR & (1<<SPIF))); data= (SPDR<<8) & 0x3FFF; // 8 Bit auslesen SPDR= 0x01; while(!(SPSR & (1<<SPIF))); data+= SPDR; // Weitere 8 Bit auslesen _delay_us(10); // wait PORTE |= (1<<PE2); // Sensor deaktivieren







Zitieren

Lesezeichen