搜索
bottom↓
回复: 65

发抄袭官方并修改在STM32上正常运行的MLX90614温度传感器代码

  [复制链接]

出130入129汤圆

发表于 2013-8-19 18:51:27 | 显示全部楼层 |阅读模式
本帖最后由 68336016 于 2013-8-19 20:40 编辑

这是抄袭MLX90614官方网站运行在PIC上的例子,
将它修改了下在STM32上运行,毕竟现在很多人用STM32。
一个头文件,一个源文件,自己修改也很快,但是毕竟费时。
用得上的人可以看看。

包含下头文件,在宏里面修改一些4个管脚定义就行,其他无需任何修改,随时调用函数获取结果就行。
看函数和变量命名不习惯,随时批量修改,很快搞定
  1. #define SMBUS_PORT            GPIOB
  2. #define SMBUS_SCK                GPIO_Pin_6
  3. #define SMBUS_SDA                GPIO_Pin_7
  4. #define RCC_APB2Periph_SMBUS_PORT                RCC_APB2Periph_GPIOB
复制代码
源文件 mlx90614.c
  1. /*******************************************************************************
  2. * 文件名   : mlx90614.c
  3. * 作  者        :
  4. * 版  本        :
  5. * 日  期        : 2013-08-07
  6. * 描  述        : mlx90614函数
  7. *******************************************************************************/

  8. /* Includes ------------------------------------------------------------------*/
  9. #include "mlx90614.h"
  10. #include "lcd12864.h"

  11. /* Private typedef -----------------------------------------------------------*/
  12. /* Private define ------------------------------------------------------------*/
  13. #define ACK         0
  14. #define        NACK 1
  15. #define SA                                0x00 //Slave address 单个MLX90614时地址为0x00,多个时地址默认为0x5a
  16. #define RAM_ACCESS                0x00 //RAM access command
  17. #define EEPROM_ACCESS        0x20 //EEPROM access command
  18. #define RAM_TOBJ1                0x07 //To1 address in the eeprom

  19. #define SMBUS_PORT            GPIOB
  20. #define SMBUS_SCK                GPIO_Pin_6
  21. #define SMBUS_SDA                GPIO_Pin_7

  22. #define RCC_APB2Periph_SMBUS_PORT                RCC_APB2Periph_GPIOB

  23. #define SMBUS_SCK_H()            SMBUS_PORT->BSRR = SMBUS_SCK
  24. #define SMBUS_SCK_L()            SMBUS_PORT->BRR = SMBUS_SCK
  25. #define SMBUS_SDA_H()            SMBUS_PORT->BSRR = SMBUS_SDA
  26. #define SMBUS_SDA_L()            SMBUS_PORT->BRR = SMBUS_SDA

  27. #define SMBUS_SDA_PIN()            SMBUS_PORT->IDR & SMBUS_SDA //读取引脚电平

  28. /* Private macro -------------------------------------------------------------*/
  29. /* Private variables ---------------------------------------------------------*/

  30. /*******************************************************************************
  31. * Function Name  : SMBus_StartBit
  32. * Description    : Generate START condition on SMBus
  33. * Input          : None
  34. * Output         : None
  35. * Return         : None
  36. *******************************************************************************/
  37. void SMBus_StartBit(void)
  38. {
  39.     SMBUS_SDA_H();                // Set SDA line
  40.     SMBus_Delay(1);            // Wait a few microseconds
  41.     SMBUS_SCK_H();                // Set SCL line
  42.     SMBus_Delay(5);            // Generate bus free time between Stop
  43.     SMBUS_SDA_L();                // Clear SDA line
  44.     SMBus_Delay(10);            // Hold time after (Repeated) Start
  45.     // Condition. After this period, the first clock is generated.
  46.     //(Thd:sta=4.0us min)
  47.     SMBUS_SCK_L();            // Clear SCL line
  48.     SMBus_Delay(2);            // Wait a few microseconds
  49. }

  50. /*******************************************************************************
  51. * Function Name  : SMBus_StopBit
  52. * Description    : Generate STOP condition on SMBus
  53. * Input          : None
  54. * Output         : None
  55. * Return         : None
  56. *******************************************************************************/
  57. void SMBus_StopBit(void)
  58. {
  59.     SMBUS_SCK_L();                // Clear SCL line
  60.     SMBus_Delay(5);            // Wait a few microseconds
  61.     SMBUS_SDA_L();                // Clear SDA line
  62.     SMBus_Delay(5);            // Wait a few microseconds
  63.     SMBUS_SCK_H();                // Set SCL line
  64.     SMBus_Delay(10);            // Stop condition setup time(Tsu:sto=4.0us min)
  65.     SMBUS_SDA_H();                // Set SDA line
  66. }

  67. /*******************************************************************************
  68. * Function Name  : SMBus_SendByte
  69. * Description    : Send a byte on SMBus
  70. * Input          : Tx_buffer
  71. * Output         : None
  72. * Return         : None
  73. *******************************************************************************/
  74. u8 SMBus_SendByte(u8 Tx_buffer)
  75. {
  76.     u8        Bit_counter;
  77.     u8        Ack_bit;
  78.     u8        bit_out;

  79.     for(Bit_counter=8; Bit_counter; Bit_counter--)
  80.     {
  81.         if (Tx_buffer&0x80)
  82.         {
  83.             bit_out=1;   // If the current bit of Tx_buffer is 1 set bit_out
  84.         }
  85.         else
  86.         {
  87.             bit_out=0;  // else clear bit_out
  88.         }
  89.         SMBus_SendBit(bit_out);                // Send the current bit on SDA
  90.         Tx_buffer<<=1;                                // Get next bit for checking
  91.     }

  92.     Ack_bit=SMBus_ReceiveBit();                // Get acknowledgment bit
  93.     return        Ack_bit;
  94. }

  95. /*******************************************************************************
  96. * Function Name  : SMBus_SendBit
  97. * Description    : Send a bit on SMBus
  98. * Input          : bit_out
  99. * Output         : None
  100. * Return         : None
  101. *******************************************************************************/
  102. void SMBus_SendBit(u8 bit_out)
  103. {
  104.     if(bit_out==0)
  105.     {
  106.         SMBUS_SDA_L();
  107.     }
  108.     else
  109.     {
  110.         SMBUS_SDA_H();
  111.     }
  112.     SMBus_Delay(2);                                        // Tsu:dat = 250ns minimum
  113.     SMBUS_SCK_H();                                        // Set SCL line
  114.     SMBus_Delay(10);                            // High Level of Clock Pulse
  115.     SMBUS_SCK_L();                                        // Clear SCL line
  116.     SMBus_Delay(10);                            // Low Level of Clock Pulse
  117. //        SMBUS_SDA_H();                                    // Master release SDA line ,
  118.     return;
  119. }

  120. /*******************************************************************************
  121. * Function Name  : SMBus_ReceiveBit
  122. * Description    : Receive a bit on SMBus
  123. * Input          : None
  124. * Output         : None
  125. * Return         : Ack_bit
  126. *******************************************************************************/
  127. u8 SMBus_ReceiveBit(void)
  128. {
  129.     u8 Ack_bit;

  130.     SMBUS_SDA_H();          //引脚靠外部电阻上拉,当作输入
  131.     SMBUS_SCK_H();                        // Set SCL line
  132.     SMBus_Delay(2);                        // High Level of Clock Pulse
  133.     if (SMBUS_SDA_PIN())
  134.     {
  135.         Ack_bit=1;
  136.     }
  137.     else
  138.     {
  139.         Ack_bit=0;
  140.     }
  141.     SMBUS_SCK_L();                        // Clear SCL line
  142.     SMBus_Delay(4);                        // Low Level of Clock Pulse

  143.     return        Ack_bit;
  144. }

  145. /*******************************************************************************
  146. * Function Name  : SMBus_ReceiveByte
  147. * Description    : Receive a byte on SMBus
  148. * Input          : ack_nack
  149. * Output         : None
  150. * Return         : RX_buffer
  151. *******************************************************************************/
  152. u8 SMBus_ReceiveByte(u8 ack_nack)
  153. {
  154.     u8         RX_buffer;
  155.     u8        Bit_Counter;

  156.     for(Bit_Counter=8; Bit_Counter; Bit_Counter--)
  157.     {
  158.         if(SMBus_ReceiveBit())                        // Get a bit from the SDA line
  159.         {
  160.             RX_buffer <<= 1;                        // If the bit is HIGH save 1  in RX_buffer
  161.             RX_buffer |=0x01;
  162.         }
  163.         else
  164.         {
  165.             RX_buffer <<= 1;                        // If the bit is LOW save 0 in RX_buffer
  166.             RX_buffer &=0xfe;
  167.         }
  168.     }
  169.     SMBus_SendBit(ack_nack);                        // Sends acknowledgment bit
  170.     return RX_buffer;
  171. }

  172. /*******************************************************************************
  173. * Function Name  : SMBus_Delay
  174. * Description    : 延时  一次循环约1us
  175. * Input          : time
  176. * Output         : None
  177. * Return         : None
  178. *******************************************************************************/
  179. void SMBus_Delay(u16 time)
  180. {
  181.     u16 i, j;
  182.     for (i=0; i<4; i++)
  183.     {
  184.         for (j=0; j<time; j++);
  185.     }
  186. }

  187. /*******************************************************************************
  188. * Function Name  : SMBus_Init
  189. * Description    : SMBus初始化
  190. * Input          : None
  191. * Output         : None
  192. * Return         : None
  193. *******************************************************************************/
  194. void SMBus_Init()
  195. {
  196.     GPIO_InitTypeDef    GPIO_InitStructure;

  197.         /* Enable SMBUS_PORT clocks */
  198.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SMBUS_PORT, ENABLE);

  199.     /*配置SMBUS_SCK、SMBUS_SDA为集电极开漏输出*/
  200.     GPIO_InitStructure.GPIO_Pin = SMBUS_SCK | SMBUS_SDA;
  201.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  202.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  203.     GPIO_Init(SMBUS_PORT, &GPIO_InitStructure);

  204.     SMBUS_SCK_H();
  205.     SMBUS_SDA_H();
  206. }

  207. /*******************************************************************************
  208. * Function Name  : SMBus_ReadMemory
  209. * Description    : READ DATA FROM RAM/EEPROM
  210. * Input          : slaveAddress, command
  211. * Output         : None
  212. * Return         : Data
  213. *******************************************************************************/
  214. u16 SMBus_ReadMemory(u8 slaveAddress, u8 command)
  215. {
  216.     u16 data;                        // Data storage (DataH:DataL)
  217.     u8 Pec;                                // PEC byte storage
  218.     u8 DataL=0;                        // Low data byte storage
  219.     u8 DataH=0;                        // High data byte storage
  220.     u8 arr[6];                        // Buffer for the sent bytes
  221.     u8 PecReg;                        // Calculated PEC byte storage
  222.     u8 ErrorCounter;        // Defines the number of the attempts for communication with MLX90614

  223.     ErrorCounter=0x00;                                // Initialising of ErrorCounter
  224.         slaveAddress <<= 1;        //2-7位表示从机地址
  225.        
  226.     do
  227.     {
  228. repeat:
  229.         SMBus_StopBit();                            //If slave send NACK stop comunication
  230.         --ErrorCounter;                                    //Pre-decrement ErrorCounter
  231.         if(!ErrorCounter)                             //ErrorCounter=0?
  232.         {
  233.             break;                                            //Yes,go out from do-while{}
  234.         }

  235.         SMBus_StartBit();                                //Start condition
  236.         if(SMBus_SendByte(slaveAddress))//Send SlaveAddress 最低位Wr=0表示接下来写命令
  237.         {
  238.             goto        repeat;                            //Repeat comunication again
  239.         }
  240.         if(SMBus_SendByte(command))            //Send command
  241.         {
  242.             goto        repeat;                            //Repeat comunication again
  243.         }

  244.         SMBus_StartBit();                                        //Repeated Start condition
  245.         if(SMBus_SendByte(slaveAddress+1))        //Send SlaveAddress 最低位Rd=1表示接下来读数据
  246.         {
  247.             goto        repeat;                     //Repeat comunication again
  248.         }

  249.         DataL = SMBus_ReceiveByte(ACK);        //Read low data,master must send ACK
  250.         DataH = SMBus_ReceiveByte(ACK); //Read high data,master must send ACK
  251.         Pec = SMBus_ReceiveByte(NACK);        //Read PEC byte, master must send NACK
  252.         SMBus_StopBit();                                //Stop condition

  253.         arr[5] = slaveAddress;                //
  254.         arr[4] = command;                        //
  255.         arr[3] = slaveAddress+1;        //Load array arr
  256.         arr[2] = DataL;                                //
  257.         arr[1] = DataH;                                //
  258.         arr[0] = 0;                                        //
  259.         PecReg=PEC_Calculation(arr);//Calculate CRC
  260.     }
  261.     while(PecReg != Pec);                //If received and calculated CRC are equal go out from do-while{}

  262.         data = (DataH<<8) | DataL;        //data=DataH:DataL
  263.     return data;
  264. }

  265. /*******************************************************************************
  266. * Function Name  : PEC_calculation
  267. * Description    : Calculates the PEC of received bytes
  268. * Input          : pec[]
  269. * Output         : None
  270. * Return         : pec[0]-this byte contains calculated crc value
  271. *******************************************************************************/
  272. u8 PEC_Calculation(u8 pec[])
  273. {
  274.     u8         crc[6];
  275.     u8        BitPosition=47;
  276.     u8        shift;
  277.     u8        i;
  278.     u8        j;
  279.     u8        temp;

  280.     do
  281.     {
  282.         /*Load pattern value 0x000000000107*/
  283.         crc[5]=0;
  284.         crc[4]=0;
  285.         crc[3]=0;
  286.         crc[2]=0;
  287.         crc[1]=0x01;
  288.         crc[0]=0x07;

  289.         /*Set maximum bit position at 47 ( six bytes byte5...byte0,MSbit=47)*/
  290.         BitPosition=47;

  291.         /*Set shift position at 0*/
  292.         shift=0;

  293.         /*Find first "1" in the transmited message beginning from the MSByte byte5*/
  294.         i=5;
  295.         j=0;
  296.         while((pec[i]&(0x80>>j))==0 && i>0)
  297.         {
  298.             BitPosition--;
  299.             if(j<7)
  300.             {
  301.                 j++;
  302.             }
  303.             else
  304.             {
  305.                 j=0x00;
  306.                 i--;
  307.             }
  308.         }/*End of while */

  309.         /*Get shift value for pattern value*/
  310.         shift=BitPosition-8;

  311.         /*Shift pattern value */
  312.         while(shift)
  313.         {
  314.             for(i=5; i<0xFF; i--)
  315.             {
  316.                 if((crc[i-1]&0x80) && (i>0))
  317.                 {
  318.                     temp=1;
  319.                 }
  320.                 else
  321.                 {
  322.                     temp=0;
  323.                 }
  324.                 crc[i]<<=1;
  325.                 crc[i]+=temp;
  326.             }/*End of for*/
  327.             shift--;
  328.         }/*End of while*/

  329.         /*Exclusive OR between pec and crc*/
  330.         for(i=0; i<=5; i++)
  331.         {
  332.             pec[i] ^=crc[i];
  333.         }/*End of for*/
  334.     }
  335.     while(BitPosition>8); /*End of do-while*/

  336.     return pec[0];
  337. }

  338. /*******************************************************************************
  339. * Function Name  : SMBus_ReadTemp
  340. * Description    : Calculate and return the temperature
  341. * Input          : None
  342. * Output         : None
  343. * Return         : SMBus_ReadMemory(0x00, 0x07)*0.02-273.15
  344. *******************************************************************************/
  345. float SMBus_ReadTemp(void)
  346. {   
  347.     return SMBus_ReadMemory(SA, RAM_ACCESS|RAM_TOBJ1)*0.02-273.15;
  348. }

  349. /*********************************END OF FILE*********************************/
复制代码
头文件mlx90614.h
  1. /*******************************************************************************
  2. * 文件名        : mlx90614.h
  3. * 作  者        :
  4. * 版  本        :
  5. * 日  期        : 2013-08-07
  6. * 描  述        : mlx90614函数
  7. *******************************************************************************/

  8. /* Define to prevent recursive inclusion -------------------------------------*/
  9. #ifndef __MLX90614_H
  10. #define __MLX90614_H

  11. /* Includes ------------------------------------------------------------------*/
  12. #include "stm32f10x_lib.h"
  13. /* Exported types ------------------------------------------------------------*/
  14. /* Exported variables --------------------------------------------------------*/
  15. /* Exported constants --------------------------------------------------------*/
  16. /* Exported macro ------------------------------------------------------------*/
  17. /* Exported functions ------------------------------------------------------- */
  18. void SMBus_StartBit(void);
  19. void SMBus_StopBit(void);
  20. void SMBus_SendBit(u8);
  21. u8 SMBus_SendByte(u8);
  22. u8 SMBus_ReceiveBit(void);
  23. u8 SMBus_ReceiveByte(u8);
  24. void SMBus_Delay(u16);
  25. void SMBus_Init(void);
  26. u16 SMBus_ReadMemory(u8, u8);
  27. u8 PEC_Calculation(u8*);
  28. float SMBus_ReadTemp(void); //获取温度值
  29. #endif

  30. /*********************************END OF FILE*********************************/
复制代码

出0入0汤圆

发表于 2013-8-19 20:34:00 | 显示全部楼层
都不说干嘛用的

出130入129汤圆

 楼主| 发表于 2013-8-19 20:37:35 | 显示全部楼层
jeffwei 发表于 2013-8-19 20:34
都不说干嘛用的

红外测温传感器

出0入0汤圆

发表于 2013-8-19 22:30:10 | 显示全部楼层
这个不就是IIC嘛?以前搞过51的

出0入0汤圆

发表于 2013-8-21 18:46:05 | 显示全部楼层
老兄,这个精度怎么样?

出130入129汤圆

 楼主| 发表于 2013-8-21 18:58:56 | 显示全部楼层
hyghyg1234 发表于 2013-8-21 18:46
老兄,这个精度怎么样?

在普通室温下精度最高,说是0.5,但是我这里大部分情况都是在跳动0.5C范围内,偶尔跳动会达到2度。
原因没找出来,不过对我来说不影响使用,所以没深究怎么回事了。

出0入0汤圆

发表于 2013-11-22 22:08:56 | 显示全部楼层
今天真要多谢老兄,我的stm32上怎么也一直不成功,现在移植你的这个一次成功,多谢。

出130入129汤圆

 楼主| 发表于 2013-11-22 22:28:25 来自手机 | 显示全部楼层
f8023m 发表于 2013-11-22 22:08
今天真要多谢老兄,我的stm32上怎么也一直不成功,现在移植你的这个一次成功,多谢。 ...

有个地方你得加一句延时,应该是读字节那,sda改成输入后要延迟几个us再读取,不然偶尔结果偏差比较大,pec检验出错。其他就没问题。

我现在手机上网没法说具体位置。

出0入0汤圆

发表于 2013-11-22 22:38:17 | 显示全部楼层
68336016 发表于 2013-11-22 22:28
有个地方你得加一句延时,应该是读字节那,sda改成输入后要延迟几个us再读取,不然偶尔结果偏差比较大,p ...

SMBus_ReceiveBit接受一个bit吗?我看那个地方有延时的,还请有空了给具体说一下。

出0入0汤圆

发表于 2014-4-15 10:19:51 | 显示全部楼层
楼主 你那个外加的上拉电阻是多大的?频率设置的是多少?还有想问一下你那个eeprom里面0x0e单元里放的sMBUS地址与从机地址是个什么关系?

出0入0汤圆

发表于 2014-10-16 13:48:50 | 显示全部楼层
借鉴了你的程序,在这里表示感谢,谢谢你分享

出0入0汤圆

发表于 2014-10-16 13:55:28 | 显示全部楼层
借鉴了你的程序,在这里表示感谢,谢谢你分享

出0入0汤圆

发表于 2014-10-22 16:39:45 | 显示全部楼层
弄了好久,都编译不通过,30个错误。顺便问下 MIAN 函数 怎么写啊 。求大湿 解答、

出0入0汤圆

发表于 2014-10-22 17:21:03 | 显示全部楼层
现在的数据 一直是这样的



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出130入129汤圆

 楼主| 发表于 2014-10-22 17:43:44 | 显示全部楼层
highrock 发表于 2014-10-22 17:21
现在的数据 一直是这样的

附件跟楼主位基本没区别,就是有一个地方IO口开漏当输入后,加了行延时语句,时序可靠些。

用起来很简单,在main函数里面,先执行初始化 SMBus_Init();       

以后每次要用,直接 SMBus_ReadTemp()

你如果有逻辑分析仪,一看时序就知道哪里有问题了,很多时候都是小问题,但是看不到时序有点抓瞎的感觉。

论坛里面有金沙滩的逻辑分析仪,玩单片机的真有必要弄一个,我以前买了个Saleae 16,前几天又买了个500M的 LA5016。

金沙滩工作室 健坤系列逻辑分析仪 阿莫坛友团购正式开始

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-10-23 09:01:43 | 显示全部楼层
68336016 发表于 2014-10-22 17:43
附件跟楼主位基本没区别,就是有一个地方IO口开漏当输入后,加了行延时语句,时序可靠些。

用起来很简单 ...

非常感谢。

出0入0汤圆

发表于 2014-11-12 10:23:00 | 显示全部楼层
楼主求主函数怎用   小白   看不太懂你写的东西  见谅

出0入0汤圆

发表于 2014-11-12 10:23:59 | 显示全部楼层
同时还想问一下  要是用stm32本身所带的  i2c库函数接口不能用吗?

出0入0汤圆

发表于 2014-11-12 15:13:04 | 显示全部楼层
68336016 发表于 2014-10-22 17:43
附件跟楼主位基本没区别,就是有一个地方IO口开漏当输入后,加了行延时语句,时序可靠些。

用起来很简单 ...

为什么我把它移植到我的stm32上还是不行啊    好像根本就不准

出130入129汤圆

 楼主| 发表于 2014-11-13 16:35:18 | 显示全部楼层
louguixin 发表于 2014-11-12 15:13
为什么我把它移植到我的stm32上还是不行啊    好像根本就不准

看15楼      

出0入0汤圆

发表于 2014-11-14 10:03:01 | 显示全部楼层

我昨天用你在15楼的方法试了  为什么根本就不能出数呢   硬件连接我查了很多次应该没问题    效果就是  根本数字就没有变化一直都是一个值  不知道是什么问题   我用的是   stm32 f103 rct6   温度计是  mlx 90614

出0入0汤圆

发表于 2014-11-14 10:04:50 | 显示全部楼层

在具体一点讲就是  效果 和  14楼 的效果一样    没找到问题的所在  不知道是硬件问题还是软件问题     新人小白求解答   多谢大神了

出0入0汤圆

发表于 2014-11-14 11:11:04 | 显示全部楼层

我写的程序  麻烦看看我的问题在哪

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-14 11:12:44 | 显示全部楼层

我唯一对你的文件进行改动的地方就是  把头文件包含那的改成3.5库的.h 的了

出130入129汤圆

 楼主| 发表于 2014-11-14 11:27:08 | 显示全部楼层
louguixin 发表于 2014-11-14 11:12
我唯一对你的文件进行改动的地方就是  把头文件包含那的改成3.5库的.h 的了 ...

3.5的库对GPIO口操作有些不同,输入输出寄存器好像名字有变化,IO口设置库函数也有不同地方。

我用的是V2.03的

出0入0汤圆

发表于 2014-11-14 19:12:13 | 显示全部楼层
68336016 发表于 2014-11-14 11:27
3.5的库对GPIO口操作有些不同,输入输出寄存器好像名字有变化,IO口设置库函数也有不同地方。

我用的是V ...

哦  好的  我自己探究一下吧  有什么问题会再请教的   多谢了  不胜感激

出130入129汤圆

 楼主| 发表于 2014-11-14 19:43:50 | 显示全部楼层
louguixin 发表于 2014-11-14 19:12
哦  好的  我自己探究一下吧  有什么问题会再请教的   多谢了  不胜感激

其实修改起来也就5,6行
就源文件开始的几个宏,还有void SMBus_Init()函数里面IO口设置。

出0入0汤圆

发表于 2014-11-15 09:13:29 | 显示全部楼层
68336016 发表于 2014-11-14 19:43
其实修改起来也就5,6行
就源文件开始的几个宏,还有void SMBus_Init()函数里面IO口设置。 ...

还在试   成功了一定把这个与大家共享一下  在此感谢

出0入0汤圆

发表于 2014-11-15 21:57:48 | 显示全部楼层
68336016 发表于 2014-11-14 19:43
其实修改起来也就5,6行
就源文件开始的几个宏,还有void SMBus_Init()函数里面IO口设置。 ...

试了一天还是没成功   因为没学过汇编   所以尝试直接用库函数   结果端口用示波器看连应有的时序波形都没看到   哎~~~

出130入129汤圆

 楼主| 发表于 2014-11-15 22:09:00 | 显示全部楼层
louguixin 发表于 2014-11-15 21:57
试了一天还是没成功   因为没学过汇编   所以尝试直接用库函数   结果端口用示波器看连应有的时序波形都 ...


哪有汇编?就是几个宏定义用了寄存器名字而已

出130入129汤圆

 楼主| 发表于 2014-11-15 23:02:40 | 显示全部楼层
louguixin 发表于 2014-11-15 21:57
试了一天还是没成功   因为没学过汇编   所以尝试直接用库函数   结果端口用示波器看连应有的时序波形都 ...

我刚刚特地试了下,我LZ位或者15楼传的文件,在STM32 V3.6的库下是可以直接用的,唯一要修改的就是宏里面对应的IO口

我特地建了个简单工程,时钟48M,库用V3.61,完全正常读取温度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-16 10:40:40 | 显示全部楼层
68336016 发表于 2014-11-15 23:02
我刚刚特地试了下,我LZ位或者15楼传的文件,在STM32 V3.6的库下是可以直接用的,唯一要修改的就是宏里面 ...

是不是咱们俩用的90614  不一样啊   你看看是这个吗?   我 刚刚试了一下你刚刚改过的  还是不行   我还是自己再试试吧   具体原因我再找找

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出130入129汤圆

 楼主| 发表于 2014-11-16 11:04:14 | 显示全部楼层
louguixin 发表于 2014-11-16 10:40
是不是咱们俩用的90614  不一样啊   你看看是这个吗?   我 刚刚试了一下你刚刚改过的  还是不行   我还 ...

我用的是

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-16 11:49:49 | 显示全部楼层

你用的是带透镜的,好像后缀不同

出0入0汤圆

发表于 2014-11-16 17:13:48 | 显示全部楼层
johnlj 发表于 2014-11-16 11:49
你用的是带透镜的,好像后缀不同

哦  那就怪不得不好使了    哎~~   还是自己慢慢试吧

出130入129汤圆

 楼主| 发表于 2014-11-16 18:31:06 | 显示全部楼层
zhoufly 发表于 2014-11-16 17:31
应该都是一样的,我的用起来也是跳的厉害,有2度,
话说这一个芯片能买两个红外温枪了,不知道那里能买到红 ...

我这个带透镜的,只要时序正确,波动基本在0.2度内。

出0入0汤圆

发表于 2015-3-12 21:01:55 | 显示全部楼层
68336016 发表于 2014-11-15 23:02
我刚刚特地试了下,我LZ位或者15楼传的文件,在STM32 V3.6的库下是可以直接用的,唯一要修改的就是宏里面 ...

我用STM32F0大概需要修改哪些呢

出0入0汤圆

发表于 2015-3-12 21:13:54 | 显示全部楼层
highrock 发表于 2014-10-22 17:21
现在的数据 一直是这样的

我和您的问题一样,不知道您解决了么

出0入0汤圆

发表于 2015-3-12 21:22:11 | 显示全部楼层
louguixin 发表于 2014-11-16 10:40
是不是咱们俩用的90614  不一样啊   你看看是这个吗?   我 刚刚试了一下你刚刚改过的  还是不行   我还 ...

你解决了么

出0入0汤圆

发表于 2015-3-13 10:55:12 | 显示全部楼层
收藏备用 谢谢

出0入0汤圆

发表于 2015-3-19 08:35:17 | 显示全部楼层

没成功   最后因为急着用就直接用51了   不过要是接着改的话应该能行

出0入0汤圆

发表于 2015-3-19 09:26:56 | 显示全部楼层
正想做个测体温的仪器,参考下,谢谢!

出0入0汤圆

发表于 2015-4-3 09:12:01 | 显示全部楼层
louguixin 发表于 2015-3-19 08:35
没成功   最后因为急着用就直接用51了   不过要是接着改的话应该能行

我改好啦,一个时钟函数粗心写错了,用逻辑分析仪发现IO没信号瞬间懂了

出0入0汤圆

发表于 2015-4-4 16:20:08 | 显示全部楼层
zkppp 发表于 2015-4-3 09:12
我改好啦,一个时钟函数粗心写错了,用逻辑分析仪发现IO没信号瞬间懂了

能分享源码  学习一下吗

出0入0汤圆

发表于 2015-4-7 16:20:46 | 显示全部楼层
louguixin 发表于 2015-4-4 16:20
能分享源码  学习一下吗

我的是STM32F0的,需要么。。。其实压根没改动,我改引脚的时候写错了点东西

出0入0汤圆

发表于 2015-4-15 14:49:04 | 显示全部楼层
zkppp 发表于 2015-4-7 16:20
我的是STM32F0的,需要么。。。其实压根没改动,我改引脚的时候写错了点东西 ...

没事儿    我的是F103的   估计拿来了  也没法学习

出0入0汤圆

发表于 2015-9-12 16:27:11 | 显示全部楼层
学习中,看的有点晕

出0入0汤圆

发表于 2015-9-12 19:14:18 | 显示全部楼层
楼主代码风格很好。

出0入0汤圆

发表于 2015-9-25 23:19:58 | 显示全部楼层
谢谢楼主,收藏了慢慢学习

出0入135汤圆

发表于 2018-12-6 16:31:25 | 显示全部楼层
非常感谢,一直成功

出0入0汤圆

发表于 2019-8-19 17:04:25 | 显示全部楼层
感谢楼主,这个代码在正点原子F103精英开发板上运行成功,再次表示感谢!

出0入0汤圆

发表于 2019-8-19 17:11:12 | 显示全部楼层
本帖最后由 新生物 于 2019-8-19 17:12 编辑

有没有要MLX90614芯片的,BAA后缀的25元/PCS,BCC带透镜的33元/PCS

出1310入193汤圆

发表于 2019-8-19 17:14:54 | 显示全部楼层
MLX90614温度传感器代码

出0入0汤圆

发表于 2020-2-12 14:24:29 | 显示全部楼层
mark……

出0入8汤圆

发表于 2020-2-15 11:49:08 | 显示全部楼层
mark下,近期可能需要调试这玩意,感谢楼主分享

出0入0汤圆

发表于 2020-2-26 20:26:12 | 显示全部楼层
新生物 发表于 2019-8-19 17:11
有没有要MLX90614芯片的,BAA后缀的25元/PCS,BCC带透镜的33元/PCS

有货吗,

出0入0汤圆

发表于 2020-5-16 16:50:50 | 显示全部楼层
where can i buy it. can you provide me the link


有没有要MLX90614芯片的,BAA后缀的25元/PCS,BCC带透镜的33元/PCS

出130入129汤圆

 楼主| 发表于 2020-5-16 19:19:10 | 显示全部楼层
mitesh09 发表于 2020-5-16 16:50
where can i buy it. can you provide me the link

真是让人悲催,3月份我买的ESF-BCC,200一个,去年34块。
看你这价格,似乎回到正常价格了

出0入0汤圆

发表于 2020-5-16 22:40:34 | 显示全部楼层
读温度很简单
主要是体温的校准算法,很多公司是秘密,其实也是慢慢试,精度并不高。

出0入0汤圆

发表于 2020-9-27 16:17:06 | 显示全部楼层
68336016 发表于 2014-10-22 17:43
附件跟楼主位基本没区别,就是有一个地方IO口开漏当输入后,加了行延时语句,时序可靠些。

用起来很简单 ...

还是不太懂什么意思,可以看看MAIN函数吗

出0入36汤圆

发表于 2020-10-27 17:22:29 | 显示全部楼层
MLX90614,这个探头,你前面加玻璃片或者滤镜了么?进灰尘咋处理?

出0入0汤圆

发表于 2020-11-15 22:15:40 | 显示全部楼层
zuqiudaxia 发表于 2019-8-19 17:04
感谢楼主,这个代码在正点原子F103精英开发板上运行成功,再次表示感谢!

请问需要修改延时吗,还是可以直接用?

出0入0汤圆

发表于 2020-11-16 11:32:50 | 显示全部楼层
好资料,谢谢!

出0入114汤圆

发表于 2021-9-16 13:42:09 | 显示全部楼层
新生物 发表于 2019-8-19 17:11
有没有要MLX90614芯片的,BAA后缀的25元/PCS,BCC带透镜的33元/PCS

MLX90614 还有货吗?

出0入0汤圆

发表于 2022-5-8 19:35:57 | 显示全部楼层
MARK一下...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 09:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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