786186278 发表于 2011-6-22 23:56:57

L3G4200D spi问题

我在使用SPI读写L3G4200D常出现以下两个问题,一是无法读出数据,二是读出的数据一直为一个不变的值。请教高手,有没有知道原因的,我已经整了好久。谢谢了.....我的初始化程序如下,现在很怀疑自己的初始化程序有问题:请高手看下,给点意见!
    SPIWrite(0x60);
    SPIWrite (0x4F);
    SPIWrite (0x00);
    SPIWrite (0x00);
    SPIWrite (0xD1);
    SPIWrite (0x00);
读L3G4200D如下
    do
    {
    SPIWrite(STATUS_REG | 0x80);
    Status = SPIRead();
    }
    while(Status & 0x08);
    if(Status & 0x80)
    return;
   
    SPIWrite(OUT_X_L | 0x80);
    Angular_Speed_XL = SPIRead();
    SPIWrite(OUT_X_H|0x80);
    Angular_Speed_XH=SPIRead();

Clinging 发表于 2011-6-23 09:19:29

http://ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4728727&bbs_page_no=1&bbs_id=1025

1L有代码,三线SPI模式

786186278 发表于 2011-6-23 13:45:32

回复【1楼】Clinging 哆拉C梦
-----------------------------------------------------------------------

我试了一下,结果值一直是在一个范围内变化,当我旋转陀螺仪时,也还是在那个范围内变化,这是为什么啊?我把初始化程序屏蔽了,结果还是那样。你知道可能是什么原因吗?

veryjc 发表于 2011-6-29 13:35:57

楼主你的问题解决了吗我碰到和你一样的问题 请指教

lihufang870919 发表于 2011-7-6 10:32:55

L3G4200D 原装现货,有需要请联系QQ:1612150952
LSM303DLH也有!

MrLCL 发表于 2012-1-7 23:31:38

回复【3楼】veryjc
-----------------------------------------------------------------------

/*******************************************************************/
/*
/*L3G4200D读寄存器
/*
/*******************************************************************/
uchar L3G_R(uchar add)
{
        uchar k,dat=0xFF;
        add |=0x80;       //写寄存器;地址不自动增加;
        CS=0;
          for(k=0;k<8;k++)   //将寄存器的地址写入L3G4200D中
                   {
                          SCK=0;
                          if((add << k) & 0x80)
                                  {
                                        SDI = 1;
                                  }
                           else
                                  {
                                        SDI= 0;
                                  }                                                                                                                    
                           SCK=1;
                   }
                   SDI=1;
          for(k=0;k<8;k++)//将目标寄存器的数据读出来
                      {
                          SCK=0;
                          dat=dat<<1;
                          if(SDO==1)dat++;
                          SCK=1;
                   }
   CS =1;
       SDI=1;
       SDI=1;
       return(dat);       
}
/*******************************************************************/
/*
/*L3G4200D写寄存器
/*
/*******************************************************************/
void L3G_W(uchar add,uchar dat)
{
        uchar k;
        add &=0x3F;       //写寄存器;地址不自动增加;
        CS   =0;
          for(k=0;k<8;k++)   //将寄存器的地址写入L3G4200D中
                   {
                          SCK=0;
                          if((add << k) & 0x80)
                                  {
                                        SDI = 1;
                                  }
                           else
                                  {
                                        SDI= 0;
                                  }                                                                                                                    
                           SCK=1;
                   }

          for(k=0;k<8;k++)   //将配置数据写入L3G4200D寄存器中
                   {
                          SCK=0;
                          if((dat << k) & 0x80)
                                  {
                                        SDI = 1;
                                  }
                           else
                                  {
                                        SDI= 0;
                                  }                                                                                                                    
                           SCK=1;
                   }
                   SDI=1;
                  
      CS =1;
          SDI=1;
          SDO=1;       
}

zibouv 发表于 2018-4-24 15:46:27

谢谢分享!
页: [1]
查看完整版本: L3G4200D spi问题