Gast
#430956
Guten Tag
Habe einen HÖHENSENSOR von INTERSEMA und komme irgendwie nicht weiter.
der Sensor läuft mit einer Clock Frequenz von 500KHZ.
So sieht meine SPI INIT aus.
#define alt_disable() PORTC &= ~(1<<1);
#define alt_enable() PORTC |= (1<<1);
void SPI_alt_on()
{
DDRB &=~(1<<SPI_DI);
DDRB |= (1<<SPI_Clock);
DDRB |= (1<<SPI_DO);
DDRC |= (1<<altcs); //PINC1
DDRA |= (1<<4); //Flash Atmel
DDRA |= (1<<3); //SD Card
DDRC |= (1<<0); //RTC
DDRB |= (1<<SPI_SS);
PORTC &= ~(1<<altcs); //ALT Sensor
PORTA|=(1<<4); //Flash Atmel
PORTA|=(1<<3); //SD Card
PORTC|=(1<<0); //RTC
SPCR= 0x0056;
SPSR = 0x0001; // 8-bit size
}
da der Sensor keinen CS Pin besitz ist laut hersteller ein Levelshifter
zu benutzen der die CS Leitung an den OE Pin verbindet und am Ausgang
des LEVELSHIFTERS geht es zu MISO des AVR und am EINGANG geht es zum
Sensor.
Wenn der PIN CS des AVR auf Height geht geht der OE pin auf Masse und
der LEVELSHIFTER ist an diesen Port aktiv.Wenn der CS Pin auf Low geht
dann sit der OE pin offen und der LEVELSHIFTER Port ist disable der AVR
empfängt nichts vom Sensor. So laut hersteller.
Ist meine Initialisierung richtig???
nun schreibe ich an den SPI WORD1.
void read_word1()
{
char word11,word12,word1;
alt_enable();
Write_SPI(0x1d);
Write_SPI(0x50);
read_SPI();
Write_SPI(0); //DUMMY
word11=read_SPI();
Write_SPI(0); //DUMMY
word12=read_SPI();
alt_disable();
word1=word11<<8 & word12;
printf("Word1 %d\r",word1);
}
unsigned char read_SPI()
{
while(!(SPSR & (1<<SPIF)));
return (SPDR);
}
void Write_SPI(unsigned char data)
{SPDR=data;
while(!(SPSR & (1<<SPIF)));
}
ich bekomme als antwort 0.
habe ich ein verständiss Problem mit dem Datenbalatt???