SPI protokolü okuma ( acc sens)

Başlatan xfrieyt, 03 Şubat 2014, 17:26:52

xfrieyt

Arkadaşlar merhaba. Benim sorum şu :" elimde spi protokolü ile okumam gereken acc ve gyro sensör var . (ımu değil.iki farklı sensör ). yani her sensör için 3 eksen den toplam 6 bilgi almam lazım.(1 sensörü okuyacak bilgi yeter ) ccs te bir çok protokolü biliyorum ama bu konu eksik kaldı hep .Gözümü korkuttular . Bu konu için nereye çalışmam lazım ve elinde ufak bi kod örneği olan var mı acaba?

sadogan

Alıntı yapılan: xfrieyt - 03 Şubat 2014, 17:26:52
Bu konu için nereye çalışmam lazım ve elinde ufak bi kod örneği olan var mı acaba?
Ufak bir kod örnegi
#include <18F4520.h> 
#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP 
#use delay(clock=4000000) 
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS) 

#define SPI_MODE_0  (SPI_L_TO_H | SPI_XMIT_L_TO_H) 
#define SPI_MODE_1  (SPI_L_TO_H) 
#define SPI_MODE_2  (SPI_H_TO_L) 
#define SPI_MODE_3  (SPI_H_TO_L | SPI_XMIT_L_TO_H) 

#define ADS7843_CS  PIN_C2 

#define ADS7843_MODE  0x90    
void ads7843_read_XY(unsigned int16 &_X,unsigned int16 &_Y)
{
   output_low(ADS7843_CS);
   delay_us(2);
   delay_cycles(2);
   spi_write(0x90);
   delay_us(2);      
   delay_cycles(2);
   make8(_X,1) = spi_read(0); 
   make8(_X,0) = spi_read(0);
   _X>>=4;
  
   spi_write(0xd0);
   delay_us(2); 
   delay_cycles(2);     
   make8(_Y,1) = spi_read(0); 
   make8(_Y,0) = spi_read(0);
   _Y>>=4;   
   output_high(ADS7843_CS); 

}
//---------------------------------------- 
int16 ads7843_read(int8 mode) 
{ 
int8 lsb, msb; 
int16 retval; 

output_low(ADS7843_CS);
delay_us(2);
spi_write(0xd0);


delay_us(2);        
msb = spi_read(0); 
lsb = spi_read(0); 


output_high(ADS7843_CS); 

retval = make16(msb, lsb);  
retval >>= 4;     
return(retval); 
} 

//-------------------------------------- 
void ads7843_spi_init(void) 
{ 
output_high(ADS7843_CS);   
setup_spi(SPI_MASTER | SPI_MODE_0 | SPI_CLK_DIV_64);
delay_ms(10); 
} 

//====================================== 

void main(void) 
{ 
int16 result; 

ads7843_spi_init(); 

while(TRUE) 
  { 
   result = ads7843_read(ADS7843_MODE); 
   printf("%LX \n\r", result); 
   delay_ms(500); 
  } 

}

xfrieyt

Teşekkür ederim . Emeğine sağlık.  Inceleyeyim hemen