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???
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.