首页 理论教育AVR单片机实战:ADXL345编程练习

AVR单片机实战:ADXL345编程练习

【摘要】:ISIS元件库中没有加速度传感器ADXL345,所以需要在实际的电路板上来学习和应用这个三轴加速度传感器的编程。ADXL345加速度传感器已经在和本书配套的电路学习板上焊接好,与单片机的连接采用的是TWI总线。在程序执行过程中,如果对ADXL345只是执行了单字节的读取操作,那么FIFO缓存中当前采样值的其余字节数据就会丢失。ADXL345进一步练习:应用ADXL345设计一个倾角测量系统。应用ADXL345设计振动、晃动检测。

ISIS元件库中没有加速度传感器ADXL345,所以需要在实际的电路板上来学习和应用这个三轴加速度传感器的编程。ADXL345加速度传感器已经在和本书配套的电路学习板上焊接好,与单片机的连接采用的是TWI总线。在这个练习中,软件编程主要工作是首先设置好传感器芯片内部的工作寄存器,使其正常工作,然后源源不断地取出x、y和z轴的加速度数值,并将加速度数值显示出来。如果需要,可以根据得到的加速度值,进行各种具体应用。在程序中,最好先用宏定义以明确的寄存器名称来代替各个相关的寄存器地址,部分如下:

由于ADXL345在初始化的时候,要频繁地给各个寄存器赋初值,为方便编程,将TWI主机双字节写程序变成函数如下。程序中假设每次发送的结果都正确,所以将每次发送后查看状态寄存器信息的语句注释掉了。addr是要写入的寄存器地址,v是要写入的初值,slv_ad为ADXL345从机地址。

ADXL345的简单初始化工作如下:

下面为从ADXL345的dataX、dataY、dataZ寄存器中取加速度测量值的示例程序函数,在主程序while循环中调用。在程序执行过程中,如果对ADXL345只是执行了单字节的读取操作,那么FIFO缓存中当前采样值的其余字节数据就会丢失。因此,所有目标轴的数据应以多字节读取操作进行。与单字节读取不同,在TWI多字节读取时,每收到一个字节数据,主机都应给出应答信号。读取加速度数据开始时,应先给出起始地址0x32,每读取一个字节,ADXL345会自动将内部寄存器地址递增,直到0x38,表明数据传输结束。加速度测量值以二进制补码形式给出,而计算机以及单片机中的数据通常也是以二进制补码表示,所以,可以直接将取回来的加速度数值送给变量存储和运算。下面的示例程序是将加速度传感器作为单片机的任务之一,并写成一个函数,在main函数中调用。在主程序之前,需要先定义一些全局变量,它们分别为:

下面为单片机INT1按键中断服务程序,在其中更改显示哪个轴的加速度值。

ADXL345进一步练习:(www.chuimin.cn)

(1)应用ADXL345设计一个倾角测量系统。

(2)应用ADXL345设计一个计步器。

(3)应用ADXL345设计自由落体检测。

(4)应用ADXL345设计振动、晃动检测。