基于红外阵列传感器Grid eye 的IIC通信

2 篇文章 0 订阅
1 篇文章 0 订阅
#include "AMG8833.h"
#include "delay.h"
/**********************************************************
函数功能:AMG8833初始化
输入:无
输出:无
***********************************************************/
void AMG8833_Init(u8 sensorAddr) 
{
IIC_Init();//初始化IIC
GE_SetOperationMode(sensorAddr ,GE_NORMAL_MODE);//初始化AMG8833工作模式-正常模式
  GE_SetResetMode(sensorAddr ,GE_RST_INITIAL_RST);//设置重置寄存器模式-初试化重置模式
GE_SetFpscMode(sensorAddr ,GE_FPSC_10FPS);//设置帧频率-1帧/s
GE_SetAverMode(sensorAddr ,GE_AVER_on);//设置平均滤波模式-两次平均滤波
}


/**********************************************************
函数功能:读取AMG8833温度数据
输入:传感器地址sensorAddr  ; 存放读取数据的数组data首地址(数据放在data[1]-data[64])
输出:无
***********************************************************/
void AMG8833_Temperature_Read(u8 sensorAddr,u16 *data) 
{
u16 temp=0; //临时存放数据变量
u8 i,j,k,n;
u8 ack1=ack;//应答标志位
for(k=1;k<65;k++)
{
data[k]=0;//数组清0
}
 
IIC_Start(); //发送起始信号
IIC_Send_Byte(sensorAddr|0x00);//写入传感器地址|写模式
IIC_Wait_Ack();//等待ACK
IIC_Send_Byte(GE_PIXEL_BASE);//写入寄存器地址
IIC_Wait_Ack();
IIC_Start();//开始接收数据
IIC_Send_Byte(sensorAddr|0x01);//写入传感器地址|读模式
IIC_Wait_Ack();
for(i=1;i<65;i++)
{
for(j=0;j<2;j++)
{
if(i==64&j==2) ack1 = !ack; 
temp+=IIC_Read_Byte(ack1);//接收数据
if(j==0)//首先接收低位放入低8位
{
data[i]+=temp;
}
else data[i]+=(temp<<8);//接收的高位放入高8位
temp=0;
}
}
IIC_Stop();//停止接收
for(n=57;n<65;n++)
{
data[n]=data[n]-0x07;//温度校正
}
}


/**********************************************************
函数功能:读取AMG8833温敏电阻的数据
输入:传感器地址sensorAddr  ; 存放读取数据的数组data首地址(数据放在data[0])
输出:无
***********************************************************/
void AMG8833_Thermistor_read(u8 sensorAddr,u16 *data)
{
u8 j;
u16 temp=0;
IIC_Start(); 
IIC_Send_Byte(sensorAddr|0x00);//写入传感器地址|写模式
IIC_Wait_Ack();
IIC_Send_Byte(GE_TTHL_REG);//写入寄存器地址
IIC_Wait_Ack();
IIC_Start();//开始接收数据
IIC_Send_Byte(sensorAddr|0x01);//写入传感器地址|读模式
IIC_Wait_Ack();
data[0]=0;
for(j=0;j<2;j++)
{
temp+=IIC_Read_Byte(1);
if(j==0)//首先接收低位放入低8位
{
data[0]+=temp;
}
else data[0]+=(temp<<8);//接收的高位放入高8位
temp=0;
}
IIC_Stop();//产生一个停止条件
}




//读工作模式寄存器的值************************************************************
void AMG8833_PW_read(u8 sensorAddr,u16 *data)
{
u8 j;
u16 temp=0;
IIC_Start(); 
IIC_Send_Byte(sensorAddr|0x00);//写入传感器地址|写模式
IIC_Wait_Ack();
IIC_Send_Byte(GE_AVER_REG);//写入寄存器地址
IIC_Wait_Ack();
IIC_Start();//开始接收数据
IIC_Send_Byte(sensorAddr|0x01);//写入传感器地址|读模式
IIC_Wait_Ack();
data[65]=0;
for(j=0;j<2;j++)
{
temp+=IIC_Read_Byte(1);
if(j==0)//首先接收低位放入低8位
{
data[65]+=temp;
}
else data[65]+=(temp<<8);//接收的高位放入高8位
temp=0;
}
IIC_Stop();//产生一个停止条件
}
//***************************************************************************


/**********************************************************
函数功能:单片机给AMG8833发送指令
输入:sensorAddr、registerAddr、工作方式
输出:无
***********************************************************/
void GE_sendcommond(u8 sensorAddr ,u8 registerAddr,u8 operat_Mode)
{
IIC_Start(); 
IIC_Send_Byte(sensorAddr|0x00);//写入传感器地址|写模式
IIC_Wait_Ack();
IIC_Send_Byte(registerAddr);//写入寄存器地址
IIC_Wait_Ack(); 
IIC_Send_Byte(operat_Mode);//写入命令
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
}
/**********************************************************
函数功能:AMG8833工作方式设置
输入:sensorAddr、工作方式:正常模式、休眠模式、10s待机模式、60s待机模式
输出:无
***********************************************************/
void GE_SetOperationMode(u8 sensorAddr ,u8 op_Mode)
{
GE_sendcommond(sensorAddr ,GE_POWER_REG,op_Mode);
}


/**********************************************************
函数功能:AMG8833重置模式设置
输入:sensorAddr、重置方式:初始化重置、标志位重置Flag Reset can all clear the Status Register(0x04),Interrupt Flag,
                                                and Interrupt Table(0x10~0x17)
输出:无
***********************************************************/
void GE_SetResetMode(u8 sensorAddr ,u8 Rst_Mode)
{
GE_sendcommond(sensorAddr ,GE_RESET_REG,Rst_Mode);
}


/**********************************************************
函数功能:AMG8833帧频率设置
输入:sensorAddr、帧频率:1帧/s、10帧/s
输出:无
***********************************************************/
void GE_SetFpscMode(u8 sensorAddr ,u8 FPS_Mode)
{
GE_sendcommond(sensorAddr ,GE_FPSC_REG,FPS_Mode);
}M32


/**********************************************************
函数功能:AMG8833平均滤波设置
输入:sensorAddr、滤波模式:两次平均滤波、不滤波
输出:无
***********************************************************/
void GE_SetAverMode(u8 sensorAddr ,u8 Aver_Mode)
{
GE_sendcommond(sensorAddr ,GE_AVER_assist_REG,0x50);//配置方式详见数据手册:GEN1 Grid-EYE Data sheet
GE_sendcommond(sensorAddr ,GE_AVER_assist_REG,0x45);
GE_sendcommond(sensorAddr ,GE_AVER_assist_REG,0x57);
GE_sendcommond(sensorAddr ,GE_AVER_REG,Aver_Mode);
GE_sendcommond(sensorAddr ,GE_AVER_assist_REG,0x00);
}

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值