用MPU6050做运动检测。检测到运动了就产生中断唤醒MPU。。。测试程序利用原子的MPU6050的例程改的。
相比于原来的例程,多了初始化中断。。。看原理图可以知道6050的INT中断脚连接到了PC0,在KEY初始化函数配置下PC0脚,把该脚连接到中断0.
void EXTI0_IRQHandler(void)
{
//u8 r;
//r=MPU_Read_Byte(MPU_INT_STA_REG);
//printf("0X%02x
",r);
LED0=0;
EXTI_ClearITPendingBit(EXTI_Line0);
}
中断里让灯亮,主函数灯灭。这样就知道板子动没动了。
以下是我自己加的配置。
void MPU6050_Config()
{
delay_ms(200);
MPU_Write_Byte(MPU_MOTION_DET_REG, 0X03);//运动检测阀值, 相当于灵敏度吧
MPU_Write_Byte(0x20,0x01);//配置检测时间
MPU_Write_Byte(MPU_INT_EN_REG,0x40);//只使能INT中断,屏蔽其他中断
}
这样就可以做运动检测开发一些防盗的项目。。。
但现在有个问题就是, EXTI0_IRQHandler中断服务函数里头, 产生了中断就读 6050 中断标志寄存器, ,手册说读了该寄存器就会清零。。但都了之后就一直以10ms的周期产生中断,周期与mpu_dmp_init()里的res=dmp_set_fifo_rate(DEFAULT_MPU_HZ); 。。DEFAULT_MPU_HZ这个参数有关。。。。
所以我不去读中断状态寄存器, 就判断引脚中断有动就好了。。。 现在在试把DEFAULT_MPU_HZ改成0.
一周热门 更多>