Probleme mit SPI-Schnittstelle
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 */