#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);
}