当前位置:网站首页>MLX90640 红外热成像传感器测温模块开发笔记(二)
MLX90640 红外热成像传感器测温模块开发笔记(二)
2022-07-20 13:29:00 【51CTO】
MLX90640 红外热成像仪测温模块开发笔记(二)API 移植-I2C 和关键接口函数
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 <MLX90640_I2C_Driver.h>改为#include <IIC.h>
(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<nWordsRead;i++)
{
c1=IIC_RecvData(); IIC_SendACK();
c2=IIC_RecvData();
if (i==(nWordsRead-1)) IIC_SendNAK();
else
IIC_SendACK();
datas[i]=c1; datas[i]<<=8; datas[i]|=c2;
}
IIC_Stop(); //发送停止命令
return 0;
}
//向指定地址写入 1 个字(2 字节)
unsigned char MLX90640_I2CWrite(unsigned int writeAddress, unsigned int word)
{
IIC_Start(); //发送起始命令
IIC_SendData(0x66); //发送设备地址+写命令IIC_RecvACK();
IIC_SendData(writeAddress>>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。
边栏推荐
- 微服务中*.iml文件删除
- Netease game Flink SQL platform practice
- Sorting and retrieval (merging / quick sorting / bisection)
- Vh6501 Learning Series
- MySQL Basic (Multi - table query, transaction)
- 关于for...in和for...of和Obeject.keys()的区别
- Learning canoe from scratch (16) -- graphics
- Example analysis of path finding problem (violence solving method)
- 二.uni-app页面基础[新建文件规范、页面生命周期]
- Nacos手摸手教学【一】Nacos动态配置
猜你喜欢
去河南投资,VC很犹豫
docker清理缓存脚本怎么写
网易游戏 Flink SQL 平台化实践
Looking back from the eight queens problem (violent enumeration)
败走IPO的年轻人
MySQL基础(多表查询、事务)
Pycharm退出pytest模式(run pytest in模式)
Navicat出现Rsa Public Key not Find问题如何解决
排序与检索(归并/快排/二分)
Google lance une autre bataille pour construire des noyaux, rejoignant Intel, un vétéran de 17 ans
随机推荐
这款IDE插件3.0让你成为公司最懂安全的程序员
Android kotlin uses arouter componentized routing and datastore to save data instead of SharedPreferences
JS common replace () method cases
Active Data Guard 备用数据库可以运行查询操作或只读应用程序吗?
推荐5款数据可视化强势工具
[upload range 17-21] secondary rendering, conditional competition, black and white list bypass
软件测试技术之可用性测试之WhatsApp Web
Other application examples of backtracking method
败走IPO的年轻人
CAPL script printing functions write, writeex, writelineex, writetolog, writetologex, writedbglevel do you really know which one to use under what circumstances?
rsync 结合 inotify 实现文件实时同步(一)
APP自动化测试-1. Appium的安装与配置
An application example of backtracking method -- prime number ring problem
全网追杀“钱包刺客”
When business goes out to sea, you should "get your hands dirty" before inspiration appears
APP自动化测试-4. App控件交互
三.uni-app配置文件[全局配置、底部导航栏配置、文件配置]
Mysql 系列 | 日志模块
APP自动化测试-5.触屏操作及toast处理
Hj17 coordinate movement