Forum: Mikrocontroller und Digitale Elektronik Frage zu dieser SPI Kommunikation mit einen ALTIMETER Sensor


von Hans Peter (Gast)


Angehängte Dateien:

Lesenswert?

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???



von Hans Peter (Gast)


Lesenswert?

Ich habe es soweit geschafft das mir jetzut über SPI die Daten 
rübergschickt werden.

nur wie bekomme ich diese zusammen

Word 1.8Bit MSB und Word 2. 8 Bit LSB.


Laut Datenblatt

Word1=MSB Word1 << 8 & LSB Word1.

wenn ich das mache kommt bei mir immer 0 raus.

Word1=73 << 8 & 128;
Word1=0;

wie bringe ich die MSB und LSB zusammen.

Im Beispiel

MSB=196
LSB=250
Word1=50426

Kann mir da einer weiterhelfen????

Danke

von Hans Peter (Gast)


Lesenswert?

Habs rausgefunden

MSB=196;
LSB=250;

Word1=(MSB<<8)+250;
Word1=50426;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.