标题: 这是我测试AMG8833性能时写的一个测试程序 [打印本页]

作者: Hachi56    时间: 2018-3-15 15:03
标题: 这是我测试AMG8833性能时写的一个测试程序
  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, 下载次数: 187, 下载积分: 黑币 -5

AMG8833测试程序


作者: 興趣使然    时间: 2018-3-27 15:10
这是那个热像仪的吗
作者: xiaee    时间: 2018-6-26 16:25
坚持每天签到。不知道哦这个能不能探测远方大面积的高温热点。
作者: 邦邦    时间: 2018-7-17 17:27
楼主可以用么
作者: huyanglei.ok    时间: 2018-7-27 14:38
学习了,正要做这个
作者: plj213    时间: 2018-9-8 19:03
感谢分享。。。

作者: zwjiang    时间: 2018-10-17 14:15
多谢楼主分享
作者: 周方均    时间: 2018-12-5 13:53
为什么主函数调用之后,屏幕是蓝屏呢

作者: zeeee92    时间: 2018-12-25 01:26
很有用,学习学习
作者: dahuzhi_cn    时间: 2019-3-10 02:05
正是要找的
作者: 2728194262    时间: 2019-3-30 19:44
楼主  你amg8833地址咋算的啊
作者: lovernw    时间: 2019-4-6 12:16
66666向大佬学习
作者: lovernw    时间: 2019-4-6 12:17
大佬,寄存器配置的那个数据手册可以分享一下么?
作者: 无敌的UUZ大人    时间: 2019-10-25 15:52
nb,6666666(虽然我还没下载,但是喊666就对了)
作者: 无敌的UUZ大人    时间: 2019-10-30 15:37
楼主我想请问一下,为什么在有关AMG88XX的地方一条注释都看不到???
作者: 无敌的UUZ大人    时间: 2019-10-30 17:45
楼主你好,amg88xx_write这个函数我有问题想问一下,这个函数的作用是发送数据到AMG8833中,由于需要Slave Address和内部寄存器地址,所以IIC通信采用的是复合格式,你的程序里面并没有发送重复起始信号,主机是怎么把数据发送到AMG8833里面的?能给AMG8833写命令吗?
我在amg88xx_read_len这个函数里面发现了重复发送起始信号的代码。
所以说楼上那位没有做出来是因为单片机不能将数据写入到与AMG8833中,初始化失败,所以才无法读取数据的吗?
作者: PADFE    时间: 2019-12-3 18:18
感激不尽,最需要这个资料的时候
作者: 18077215749    时间: 2020-2-12 22:28
感谢分享
作者: onono    时间: 2020-2-24 17:14
普通的红外测温探头最近都买不到了,只能买个AM8833试试了。感谢分享。
作者: 梧桐岛岛主    时间: 2020-4-22 10:20
感谢分享,学习了
作者: SRTAN    时间: 2020-5-11 18:35
大佬请问一下这个传感器的波段是多少啊

作者: HJWei    时间: 2020-5-22 14:25
正好学习下
作者: abcd20084444    时间: 2020-6-27 18:00
下载看看,学习下
作者: FFF阿狸    时间: 2021-1-21 15:56
楼主,请问我只能读一个温度寄存器的值,怎么解决,除了0x80地址的温度能读取之外,其它的都读取不了





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1