7529|4

77

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于ADXL345传感器的中断采集数据问题,请进 [复制链接]

我想用ADXL345的中断采集数据。我现在用的是模拟的I2C协议采集,但是我觉得这么采集,感觉上,是主动的采,要是我的通信速率太快,会不会回复我无应答信号。等等。然后我对数据又进行了处理,错误地当成采集到的数。那就错了~~~~
所以,我不放心。希望能通过中断方式,实时地去采集然后得到正确的数据再进行保存处理。。。希望大神教下

最新回复

数据准备和I2C总线应该达没有直接关系ADXL345的I2C速率最大是400K 理论上你只要低于这个速率,他就会给你应答 你也可以读到数据 [attach]280072[/attach] 但是如果你的输出速率比较低,这时输出寄存器的数据没有更新,你读到的数据就有可能是无用数据[attach]280073[/attach] 刚才简单看了一下,没发现数据准备寄存器 不过可以使用中断或者试试FIFO模式 建议你仔细读一下数据手册 官方提供了中文手册,看起来还是挺方便的 [attach]280074[/attach]   详情 回复 发表于 2017-1-19 18:51
点赞 关注
 
 

回复
举报

9720

帖子

24

TA的资源

版主

沙发
 
读取数据时判断一下寄存器的数据准备标志就不怕独到无用的数据了  中断方式可以节省MCU的资源 可以降低功耗

点评

他对应答位没判断,就好像是觉得一定有应答一样,每次多字节读取  详情 回复 发表于 2017-1-19 18:26
还要read那个里面的的状态标志位?那如果不读的话,我是不是应该对有无应答位做个判断,无的话就重新不停发设备地址,而不是发设备地址+1去读。这有没有影响。你有没有用过这传感器?而且现在我也没搞到那个数据该怎  详情 回复 发表于 2017-1-19 18:25
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
littleshrimp 发表于 2017-1-19 18:03
读取数据时判断一下寄存器的数据准备标志就不怕独到无用的数据了  中断方式可以节省MCU的资源 可以降低功耗

还要read那个里面的的状态标志位?那如果不读的话,我是不是应该对有无应答位做个判断,无的话就重新不停发设备地址,而不是发设备地址+1去读。这有没有影响。你有没有用过这传感器?而且现在我也没搞到那个数据该怎么保存,然后什么生产消费的阶段,我现在就是收到个数显示个数而已。你看源程序这么写的
void Multiple_read_ADXL345(void)
{   uchar i;
    IIC_Start();                            //起始信号
    IIC_Send_Byte(SlaveAddress)  ;             //发送设备地址+写信号
   IIC_Send_Byte(0x32) ;                   //发送存储单元地址,从0x32开始       
     IIC_Start()   ;                         //起始信号
    IIC_Send_Byte(SlaveAddress+1)  ;        //发送设备地址+读信号
         for (i=0; i<6; i++)                      //连续读取6个地址数据,存储中BUF
    {
        BUF =  IIC_Read_Byte();          //BUF[0]存储0x32地址中的数据
        if (i == 5)
        {
         IIC_NAck();              //最后一个数据需要回NOACK
        }
        else
        {
         IIC_Ack();                    //回应ACK
       }
                               
   }
        IIC_Stop() ;   
}
u8 IIC_Wait_Ack(void)
{
        u8 a=0;
        SDA_IN();      //SDA设置为输入
  GPIO_SetBits(GPIOA,SDA);
  GPIO_SetBits(GPIOA,SCL);
        delay_us(2);         
        a = GPIO_ReadInputDataBit( GPIOA, SDA);
        //while(a==1);
        GPIO_ResetBits(GPIOA, SCL) ;//时钟输出0        
    delay_us(2);       
        return a;  
}
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();             
     
    for(t=0;t<8;t++)
    {              
        if((txd&0x80)>>7)  GPIO_SetBits(GPIOA,SDA);
                else  GPIO_ResetBits(GPIOA,  SDA);
        txd<<=1;           
                GPIO_SetBits(GPIOA,SCL);
                delay_us(1);
                GPIO_ResetBits(GPIOA,  SCL);       
                delay_us(1);
    }         
        IIC_Wait_Ack();
       
}             

点评

数据准备和I2C总线应该达没有直接关系ADXL345的I2C速率最大是400K 理论上你只要低于这个速率,他就会给你应答 你也可以读到数据  详情 回复 发表于 2017-1-19 18:51
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

4
 
littleshrimp 发表于 2017-1-19 18:03
读取数据时判断一下寄存器的数据准备标志就不怕独到无用的数据了  中断方式可以节省MCU的资源 可以降低功耗

他对应答位没判断,就好像是觉得一定有应答一样,每次多字节读取
 
 
 

回复

9720

帖子

24

TA的资源

版主

5
 
大家都是好朋友 发表于 2017-1-19 18:25
还要read那个里面的的状态标志位?那如果不读的话,我是不是应该对有无应答位做个判断,无的话就重新不停 ...

数据准备和I2C总线应该达没有直接关系ADXL345的I2C速率最大是400K
理论上你只要低于这个速率,他就会给你应答
你也可以读到数据




但是如果你的输出速率比较低,这时输出寄存器的数据没有更新,你读到的数据就有可能是无用数据


刚才简单看了一下,没发现数据准备寄存器
不过可以使用中断或者试试FIFO模式

建议你仔细读一下数据手册
官方提供了中文手册,看起来还是挺方便的
ADXL345_cn.pdf (1004.5 KB, 下载次数: 34)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表