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(); http://ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4728727&bbs_page_no=1&bbs_id=1025
1L有代码,三线SPI模式 回复【1楼】Clinging 哆拉C梦
-----------------------------------------------------------------------
我试了一下,结果值一直是在一个范围内变化,当我旋转陀螺仪时,也还是在那个范围内变化,这是为什么啊?我把初始化程序屏蔽了,结果还是那样。你知道可能是什么原因吗? 楼主你的问题解决了吗我碰到和你一样的问题 请指教 L3G4200D 原装现货,有需要请联系QQ:1612150952
LSM303DLH也有! 回复【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;
} 谢谢分享!
页:
[1]