打印

为什么ADXL345的读数不正确?

[复制链接]
楼主: 与时俱进
手机看帖
扫描二维码
随时随地手机跟帖
21
顶。。我也有陀螺仪相关问题得到解决。希望对模拟陀螺仪非常熟悉的工程师给予帮助。联系QQ 64031004    有偿

使用特权

评论回复
22
即墨| | 2014-2-17 14:09 | 只看该作者
mark一下,现在也在做ADXL345

使用特权

评论回复
23
myl593799546| | 2014-2-21 15:00 | 只看该作者
兄弟,帮忙解决下问题,可以么?还是调试错误啊,ID和写进去的值可以正确读取,但是三轴的值读取就是错误的,模拟IIC

使用特权

评论回复
24
与时俱进|  楼主 | 2014-2-22 17:19 | 只看该作者
myl593799546 发表于 2014-2-21 15:00
兄弟,帮忙解决下问题,可以么?还是调试错误啊,ID和写进去的值可以正确读取,但是三轴的值读取就是错误的 ...

说明IIC读写时序、单字节读写基本正确。
但是多字节读写呢?我就在这个上犯错,设置多个连续寄存器值时,把数据搞颠倒了,把应该写到2D寄存器的数据,写到30寄存器了;把应该写到30寄存器的数据,写到2D寄存器去了;结果配置不对,就没有中断信号。读取也一样搞颠倒了,出现数据混乱(颠倒)。

使用特权

评论回复
25
myl593799546| | 2014-2-25 15:34 | 只看该作者
与时俱进 发表于 2014-2-22 17:19
说明IIC读写时序、单字节读写基本正确。
但是多字节读写呢?我就在这个上犯错,设置多个连续寄存器值时, ...

貌似没有吧,我连续读取6个寄存器的值保存在数组BUF[]中,相关代码是这样子的
for (i=0; i<7; i++)                      //连续读取6个地址数据,存储中BUF
{
    BUF = ADXL345_RecvByte();
。。。
}
读取之后,
X轴的数据:((BUF[1]<<8)|BUF[0])
Y轴的数据:((BUF[3]<<8)|BUF[2])
Z轴的数据:((BUF[5]<<8)|BUF[4])
这样应该没错吧

使用特权

评论回复
26
myl593799546| | 2014-2-25 16:07 | 只看该作者
与时俱进 发表于 2014-2-22 17:19
说明IIC读写时序、单字节读写基本正确。
但是多字节读写呢?我就在这个上犯错,设置多个连续寄存器值时, ...

ADXL345.rar (3.04 KB)

这是我的代码,楼主能帮忙看下么?

使用特权

评论回复
27
与时俱进|  楼主 | 2014-2-25 19:44 | 只看该作者
看不出什么问题。对ADXL345的初始化部分的寄存器设置值没仔细对照手册,不如直接COPY网上例程试试?

使用特权

评论回复
28
与时俱进|  楼主 | 2014-2-26 10:36 | 只看该作者
myl593799546 发表于 2014-2-14 16:45
我怀疑是不是芯片坏了呢,如果可以的话,能贴出你的读数截图么

给你贴个图。

345.JPG (1.9 MB )

345.JPG

使用特权

评论回复
29
myl593799546| | 2014-2-26 14:08 | 只看该作者
与时俱进 发表于 2014-2-25 19:44
看不出什么问题。对ADXL345的初始化部分的寄存器设置值没仔细对照手册,不如直接COPY网上例程试试? ...

copy下来的也试过了,还是一样,郁闷死了,搞了三个星期了,实在是没办法才求助兄弟的,望不吝赐教啊

使用特权

评论回复
30
myl593799546| | 2014-2-26 14:09 | 只看该作者
与时俱进 发表于 2014-2-26 10:36
给你贴个图。

或者说是我数据转换的时候出错了?

使用特权

评论回复
31
与时俱进|  楼主 | 2014-2-26 14:37 | 只看该作者
有没有硬件电路的问题呢,比如供电质量、接口电平等

使用特权

评论回复
32
与时俱进|  楼主 | 2014-2-26 14:40 | 只看该作者
myl593799546 发表于 2014-2-26 14:08
copy下来的也试过了,还是一样,郁闷死了,搞了三个星期了,实在是没办法才求助兄弟的,望不吝赐教啊 ...

copy的配置,测量结果数据也一样吗?结果的6个寄存器值分别是多少?

使用特权

评论回复
33
与时俱进|  楼主 | 2014-2-26 14:58 | 只看该作者
你的程序,部分子程与网上例程时序稍有不同,多了起始的时钟拉低【  WriteSCL0();】,把它拿掉试试看。
如下是我的:
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void ADXL345_SendACK(ack)
{
    SDA = ack;                  //写应答信号
    SCL = 1;                    //拉高时钟线
    __delay_us(5);                 //延时
    SCL = 0;                    //拉低时钟线
    __delay_us(5);                 //延时
}

/**************************************
向IIC总线发送一个字节数据
**************************************/
void ADXL345_SendByte(unsigned char dat)
{
    unsigned char i;

    for (i=0; i<8; i++)         //8位计数器
    {
        if(dat&0x80)
                        SDA=1;
                else
                        SDA=0;
        SCL = 1;                //拉高时钟线
        __delay_us(5);             //延时
        SCL = 0;                //拉低时钟线
        __delay_us(5);             //延时
                dat <<= 1;              //移出数据的最高位
    }
    ADXL345_RecvACK();
}

/**************************************
从IIC总线接收一个字节数据
**************************************/
unsigned char ADXL345_RecvByte()
{
    unsigned char i;
    unsigned char dat = 0;

    TRISD0 = 1;                 //使能内部上拉,准备读取数据,
    for (i=0; i<8; i++)         //8位计数器
    {
        dat <<= 1;
        SCL = 1;                //拉高时钟线
        __delay_us(5);             //延时
        dat |= SDA;             //读数据               
        SCL = 0;                //拉低时钟线
        __delay_us(5);             //延时
    }
        TRISD0 = 0;
    return dat;
}

使用特权

评论回复
34
myl593799546| | 2014-2-26 15:07 | 只看该作者
与时俱进 发表于 2014-2-26 14:58
你的程序,部分子程与网上例程时序稍有不同,多了起始的时钟拉低【  WriteSCL0();】,把它拿掉试试看。
如 ...

效果一样的呢,你的读数是转换成加速度了么

使用特权

评论回复
35
与时俱进|  楼主 | 2014-2-26 15:13 | 只看该作者
结果的原始数据---低字节在前。

ADXL345.JPG (104.85 KB )

ADXL345.JPG

使用特权

评论回复
36
myl593799546| | 2014-2-26 15:17 | 只看该作者
与时俱进 发表于 2014-2-26 14:40
copy的配置,测量结果数据也一样吗?结果的6个寄存器值分别是多少?

我读出来再转换成加速度值,去掉高四位(符号位),读数分别是x=3.32,y=5.25,z=6.41,静止平放桌面

使用特权

评论回复
37
myl593799546| | 2014-2-26 15:19 | 只看该作者
与时俱进 发表于 2014-2-26 14:37
有没有硬件电路的问题呢,比如供电质量、接口电平等

这个应该没问题吧,SDA和SCL均上拉到3.3V的,VDD和VS均接在3.3V,方便加QQ细聊嘛?

使用特权

评论回复
38
2850151772| | 2014-2-26 15:31 | 只看该作者

使用特权

评论回复
39
与时俱进|  楼主 | 2014-2-26 15:56 | 只看该作者
myl593799546 发表于 2014-2-26 15:19
这个应该没问题吧,SDA和SCL均上拉到3.3V的,VDD和VS均接在3.3V,方便加QQ细聊嘛? ...

你把Q号发站内私信给我。

使用特权

评论回复
40
与时俱进|  楼主 | 2014-2-26 15:58 | 只看该作者
myl593799546 发表于 2014-2-26 15:07
效果一样的呢,你的读数是转换成加速度了么

有小数点的是,35#楼是原始数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则