MLX90640红外热成像传感器测温模块开发笔记(二)

mlx90640 红外热成像仪测温模块开发笔记(二)api 移植-i2c 和关键接口函数
稳控科技mlx90640 红外热成像传感器 api 说明文件里面有官方的移植指导,但我觉得可以把重点放在与 mlx90640 具体操作有关的几个函数上,而与标准 i2c 相关的函数和文件结构还是按照自己习惯的套路实现。这样更符合我们开发人员的可控性的习惯。步骤如下:
(1) 建立标准 i2c 文件 iic.h 和 iic.c 
用自己的方法实现如下几个函数(硬件也好,gpio 模拟也好),函数名称用下面建议的。
void iic_init(void); //i2c 接口初始化
void iic_start(void); //发送开始信号
void iic_stop(void); //发送结束信号
void iic_sendack(void); //发送应答信号
void iic_sendnak(void); //发送非应答信号unsigned char iic_recvack(void); //读取应答信号unsigned char iic_recvdata(void); //读取 1 个字节void iic_senddata(char dat); //发送 1 个字节
(2) 在工程中引入 mlx90640_api.c 
并做如下几处修改
第一行#include 改为#include
(3) 添加 3 个函数 
void mlx90640_i2cinit(void)
unsigned char mlx90640_i2cread (unsigned short startaddress, unsigned short nwordsread, unsigned short *datas)
unsigned char mlx90640_i2cwrite (unsigned short writeaddress, unsigned short word)
void mlx90640_i2cinit(void)
{
iic_stop();
}
//从指定地址读取 n 个字(每个字占用 2 个字节)
unsigned char mlx90640_i2cread(unsigned short startaddress, unsigned short nwordsread, unsigned short *datas)
{
unsigned char c1,c2; unsigned short i; unsigned char msb,lsb;
msb=(unsigned char)(startaddress>>8); lsb=(unsigned char)(startaddress&0x00ff);
iic_start(); //发送起始命令
iic_senddata(0x66); //发送设备地址+写命令iic_recvack();
iic_senddata(msb); //发送要操作的地址值 2 字节
iic_recvack();
iic_senddata(lsb);
iic_recvack();
iic_start(); //发送起始命令
iic_senddata(0x67); //发送设备地址+读命令iic_recvack();
for (i=0;i{
c1=iic_recvdata(); iic_sendack();
c2=iic_recvdata();
if (i==(nwordsread-1)) iic_sendnak();
else
iic_sendack();;i++)
datas[i]=c1; datas[i]8); //发送要操作的地址值 2 字节
iic_recvack();
iic_senddata(writeaddress&0x00ff); iic_recvack();
iic_senddata(word>>8); iic_recvack();
iic_senddata(word&0x00ff); iic_recvack();
iic_stop(); return 0;
(4)修改 2 个函数 
unsigned char mlx90640_dumpee(unsigned short *eedata)
{
return mlx90640_i2cread(0x2400, 832, eedata);
}
unsigned char mlx90640_getframedata(unsigned short *framedata)
{
unsigned short statusregister,controlregister1;
mlx90640_i2cread(0x8000, 1, &statusregister); if (statusregister&0x0008)//有测量完成的 frame
{
mlx90640_i2cread(0x800d, 1, &controlregister1); mlx90640_i2cwrite(0x8000, statusregister&(~0x0018)); mlx90640_i2cread(0x0400, 832, framedata); framedata[832] = controlregister1;
framedata[833] = statusregister & 0x0001; return 0;
}
return -1;
}
至此移植完成
编译工程,若没有错误提示则基本上没有问题了,下一篇开始讲述如何操作mlx90640。
河北稳控科技mlx90640 红外热成像成果展示


Intel表示i9-9900K依旧是地表游戏最强CPU
分子数据存储技术 可将数据长期存储
宏晶微电子MS2100E特性 /AV&Svideo转USB芯片
经典的弯管模具设计图解 滑块两次抽芯步骤
手机涨价背后的无奈,下代苹果华为手机64G起步
MLX90640红外热成像传感器测温模块开发笔记(二)
英创信息技术Linux工控主板摄像头应用简介
对于嵌入式来说它需要USB-C技术吗
LG正式发布首款5摄旗舰智能手机LG V40 ThinQ
eps应急电源与ups区别
六种斩波电路原理分析
两款3A的电源模块TPS82085、MUN3CAD03-JE原位替代
aecq100标准是什么
控创推出支持Intel Xeon 5600处理器的CG210
为什么说5G技术是新基建的首要任务
基于32位单片机的感应灯解决方案
三极管温度与Vbe的关系
人工智能正将数据中心推向极限
2020的区块链有怎样的现实看法
阿里、蚂蚁金服布局共享单车领域,ofo敲定新一轮10亿美金融资