找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12180|回复: 23
打印 上一主题 下一主题
收起左侧

这是我测试AMG8833性能时写的一个测试程序

  [复制链接]
跳转到指定楼层
楼主
ID:292302 发表于 2018-3-15 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "bsp_amg88xx.h"
  2. #include "bsp_iic.h"
  3. u8 xx;

  4. void amg88xx_init(void)
  5. {
  6.         i2c_init();
  7.         amg88xx_write(AMG88xx_PCTL, AMG88xx_NORMAL_MODE);
  8.         amg88xx_write(AMG88xx_RST, AMG88xx_INITIAL_RESET);
  9.         amg88xx_write(AMG88xx_FPSC, AMG88xx_FPS_10);
  10. }

  11. uint8_t amg88xx_write(uint8_t reg,uint8_t data)
  12. {
  13.     i2c_Start();
  14.     i2c_SendByte((AMG88xx_ADDRESS<<1)|0); //发送器件地址+写命令
  15.     if(i2c_WaitAck())          //等待应答
  16.     {
  17.         i2c_Stop();
  18.         return 1;
  19.     }
  20.     i2c_SendByte(reg);         //写寄存器地址
  21.     i2c_WaitAck();             //等待应答
  22.     i2c_SendByte(data);        //发送数据
  23.     if(i2c_WaitAck())          //等待ACK
  24.     {
  25.         i2c_Stop();
  26.         return 1;
  27.     }
  28.     i2c_Stop();
  29.     return 0;
  30. }

  31. uint8_t amg88xx_read_len(uint8_t reg,uint8_t len,uint8_t *buf)
  32. {
  33.     i2c_Start();
  34.     i2c_SendByte((AMG88xx_ADDRESS<<1)|0); //发送器件地址+写命令
  35.     if(i2c_WaitAck())          //等待应答
  36.     {
  37.         i2c_Stop();
  38.         return 1;
  39.     }
  40.     i2c_SendByte(reg);         //写寄存器地址
  41.     i2c_WaitAck();             //等待应答
  42.         i2c_Start();               
  43.     i2c_SendByte((AMG88xx_ADDRESS<<1)|1); //发送器件地址+读命令
  44.     i2c_WaitAck();             //等待应答
  45.     while(len)
  46.     {
  47.         if(len==1)
  48.                 {
  49.                         *buf=i2c_ReadByte();//读数据,发送nACK
  50.                         i2c_NAck();
  51.                 }
  52.                 else
  53.                 {
  54.                         *buf=i2c_ReadByte();                //读数据,发送ACK  
  55.                         i2c_Ack();
  56.                 }
  57.                 len--;
  58.                 buf++;  
  59.     }
  60.     i2c_Stop();                 //产生一个停止条件
  61.     return 0;      
  62. }

  63. float AMG88XX_signedMag12ToFloat(uint16_t val)
  64. {
  65.         //take first 11 bits as absolute val
  66.         uint16_t absVal = (val & 0x7FF);
  67.         
  68.         return (val & 0x8000) ? 0 - (float)absVal : (float)absVal ;
  69. }

  70. float amg88xx_readThermistor()
  71. {
  72.         uint8_t raw[2];
  73.         uint16_t recast;
  74.         
  75.         amg88xx_read_len(AMG88xx_TTHL, 2, raw);
  76.         recast = ((uint16_t)raw[1] << 8) | ((uint16_t)raw[0]);
  77.         return AMG88XX_signedMag12ToFloat(recast) * AMG88xx_THERMISTOR_CONVERSION;
  78. }

  79. void amg88xx_readPixels(float *buf, uint8_t size)
  80. {
  81.         uint16_t recast;
  82.         float converted;
  83.         uint8_t rawArray[128];
  84.         
  85.         amg88xx_read_len(AMG88xx_PIXEL_OFFSET, 128, rawArray);
  86.         
  87.         for(int i=0; i<size; i++)
  88.         {
  89.                 uint8_t pos = i << 1;
  90.                 recast = ((uint16_t)rawArray[pos + 1] << 8) | ((uint16_t)rawArray[pos]);        
  91.                
  92.                 converted = AMG88XX_signedMag12ToFloat(recast) * AMG88xx_PIXEL_TEMP_CONVERSION;
  93.                 buf[i] = converted;
  94.         }
  95. }

复制代码


AMG8833.7z

288.92 KB, 下载次数: 185, 下载积分: 黑币 -5

AMG8833测试程序

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

来自 2#
ID:606366 发表于 2019-10-30 17:45 | 只看该作者
楼主你好,amg88xx_write这个函数我有问题想问一下,这个函数的作用是发送数据到AMG8833中,由于需要Slave Address和内部寄存器地址,所以IIC通信采用的是复合格式,你的程序里面并没有发送重复起始信号,主机是怎么把数据发送到AMG8833里面的?能给AMG8833写命令吗?
我在amg88xx_read_len这个函数里面发现了重复发送起始信号的代码。
所以说楼上那位没有做出来是因为单片机不能将数据写入到与AMG8833中,初始化失败,所以才无法读取数据的吗?
回复

使用道具 举报

板凳
ID:297768 发表于 2018-3-27 15:10 | 只看该作者
这是那个热像仪的吗
回复

使用道具 举报

地板
ID:359446 发表于 2018-6-26 16:25 | 只看该作者
坚持每天签到。不知道哦这个能不能探测远方大面积的高温热点。
回复

使用道具 举报

5#
ID:373494 发表于 2018-7-17 17:27 | 只看该作者
楼主可以用么
回复

使用道具 举报

6#
ID:379865 发表于 2018-7-27 14:38 | 只看该作者
学习了,正要做这个
回复

使用道具 举报

7#
ID:138247 发表于 2018-9-8 19:03 | 只看该作者
感谢分享。。。
回复

使用道具 举报

8#
ID:411087 发表于 2018-10-17 14:15 | 只看该作者
多谢楼主分享
回复

使用道具 举报

9#
ID:437818 发表于 2018-12-5 13:53 | 只看该作者
为什么主函数调用之后,屏幕是蓝屏呢
回复

使用道具 举报

10#
ID:453995 发表于 2018-12-25 01:26 | 只看该作者
很有用,学习学习
回复

使用道具 举报

11#
ID:389073 发表于 2019-3-10 02:05 | 只看该作者
正是要找的
回复

使用道具 举报

12#
ID:339108 发表于 2019-3-30 19:44 | 只看该作者
楼主  你amg8833地址咋算的啊
回复

使用道具 举报

13#
ID:504918 发表于 2019-4-6 12:16 | 只看该作者
66666向大佬学习
回复

使用道具 举报

14#
ID:504918 发表于 2019-4-6 12:17 | 只看该作者
大佬,寄存器配置的那个数据手册可以分享一下么?
回复

使用道具 举报

15#
ID:606366 发表于 2019-10-25 15:52 | 只看该作者
nb,6666666(虽然我还没下载,但是喊666就对了)
回复

使用道具 举报

16#
ID:606366 发表于 2019-10-30 15:37 | 只看该作者
楼主我想请问一下,为什么在有关AMG88XX的地方一条注释都看不到???
回复

使用道具 举报

17#
ID:269538 发表于 2019-12-3 18:18 | 只看该作者
感激不尽,最需要这个资料的时候
回复

使用道具 举报

18#
ID:692142 发表于 2020-2-12 22:28 | 只看该作者
感谢分享
回复

使用道具 举报

19#
ID:384489 发表于 2020-2-24 17:14 | 只看该作者
普通的红外测温探头最近都买不到了,只能买个AM8833试试了。感谢分享。
回复

使用道具 举报

20#
ID:734966 发表于 2020-4-22 10:20 | 只看该作者
感谢分享,学习了
回复

使用道具 举报

21#
ID:672711 发表于 2020-5-11 18:35 | 只看该作者
大佬请问一下这个传感器的波段是多少啊
回复

使用道具 举报

22#
ID:391164 发表于 2020-5-22 14:25 | 只看该作者
正好学习下
回复

使用道具 举报

23#
ID:162050 发表于 2020-6-27 18:00 | 只看该作者
下载看看,学习下
回复

使用道具 举报

24#
ID:421245 发表于 2021-1-21 15:56 | 只看该作者
楼主,请问我只能读一个温度寄存器的值,怎么解决,除了0x80地址的温度能读取之外,其它的都读取不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表