关于IIC通信的传感器应用,红外测温传感器MLX90614

liushengyao90 2021-08-08 16:11:15

1.http://doc.iotlucker.com/zigbee/2063494    关于传感器

 

2、在学习传感器章节,教程给的是温湿度传感器——DHT11传感器,但是测量温度的误差值较大,我想用MLX90614测量人体温度,网上有STM32和51的参考例程,参考写了CC2530的驱动,但是用不了,麻烦给予技术支持,看下代码哪里有问题?

#include <ioCC2530.h>  
#include <stdio.h>
#include "GY906.h"

//GY906 端口定义
#define SCL P1_4      // 时钟线 
#define SDA P1_5      // 数据线 
#define ACK	 0
#define	NACK 1  //不应答或否定的应答

#define _SDA_OUT   P1DIR |= 0x20            //输出  
#define _SDA_IN    P1DIR &= ~0x20           //输入
#define _SCL_OUT   P1DIR |= 0x10            //输出



//************************************ 

uchar DataH,DataL,Pecreg; 
/***********延时函数************/
void Delay_1u(uint microSecs) 
{  while(microSecs--) 
  {    /* 32 NOPs == 1 usecs 因为延时还有计算的缘故,用了31个nop*/ 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); 
    asm("nop"); 
  } 
}
/***************IO口设置***************/
void WriteSDA1(void)//SDA 输出1,相当于51里面的SDA=1    
{
     P1DIR |= 0x20;      //0010 0000  P1_5
     SDA = 1;
}

void WriteSDA0(void)//SDA 输出0    
{
     P1DIR |= 0x20;
     SDA = 0;
}

void WriteSCL1(void)//SCL 输出1    
{
     P1DIR |= 0x10;                   //0001  0000  P1_4
     SCL = 1;
}

void WriteSCL0(void)//SCL 输出0   
{
     P1DIR |= 0x10;
     SCL = 0;
}

void ReadSDA(void)//这里设置SDA对应IO口DIR可以接收数据    
{
     P1DIR &= 0xDF;                //1101 1111 
}


/************GY906 发起始位子程序 当SCL为高电平时使SDA产生一个负跳变***********/
void IIC_Start_(void) 
{ 
    SDA = 1; 
    Delay_1u(5); 
    SCL = 1;
    Delay_1u(5); 
    SDA = 0;
    Delay_1u(5);
    SCL = 0;
    Delay_1u(5); 
} 

/*************GY906发结束位子程序  当SCL为高电平时使SDA产生一个正跳变***************/ 
void IIC_Stop_(void) 
{ 

    SCL = 0;
    Delay_1u(5);
    SDA = 0;
    Delay_1u(5);
    SCL = 1;
    Delay_1u(5);
    SDA = 1;           //拉高数据线
} 

//-----------发送一个位--------- 
void send_bit(uint bit_out) 
{ 
  if(bit_out==0) 
     SDA = 0;
  else 
     SDA = 1;
  Delay_1u(2); 
  SCL = 1;
  Delay_1u(6); 
  SCL = 0;
  Delay_1u(6); 
} 

//---------- 接收一个位---------- 
uint receive_bit(void) 
{ 
  uint Ack_bit;
  
  _SDA_IN;
  SDA = 1;
  Delay_1u(2);
  SCL = 1;
  Delay_1u(2);
  Ack_bit = SDA;
  _SDA_OUT;
  SCL = 0; 
  Delay_1u(3);
  
  return	Ack_bit;
} 

/***********************发送一个字节********************/
uint tx_byte(uchar dat) 
{ 
  uint i,bit_out,Ack_bit;

  for (i=0; i<8; i++)         //8位计数器
  {
    if(dat&0x80)     //如果最高位为1
    {
      bit_out=1; 
    }
    else 
    {
      bit_out=0;
    }
     send_bit(bit_out); 
     dat=dat<<1; 
   } 
      Ack_bit = receive_bit(); 
      return	Ack_bit;
}

//---------- 接收一个字节--------  
uchar rx_byte(uint ack_nack)
{
  uchar i,dat,bit_in;
  dat=0;
  for(i=0;i<8;i++)
  {
  dat=dat<<1;
  bit_in = receive_bit();
  if(bit_in==1)
  dat=dat+1;
  }
  send_bit(ack_nack);
  return dat;
}

   

/*****************读温度数据 ************/ 
uint memread(void) 
{ 
  uint data;
  IIC_Start_(); 
  tx_byte(0x00);  //Send SlaveAddress ==============================
  tx_byte(0x07);  //Send Command 
  //------------ 
  IIC_Start_(); 
  tx_byte(0x01); 
   
  DataL=rx_byte(1); 
  
  DataH=rx_byte(0); 
   
  Pecreg=rx_byte(NACK); 
  IIC_Stop_();
  
  
  //data = DataH*256+DataL;
  data = (DataH<<8) | DataL;	//data=DataH:DataL
  return data;
  
}

float ReadTemp(void)
{   
	float temp;
	temp = memread() *0.02-273.15;
	return temp;
}
 
 

 





 

 

...全文
756 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FOREVERKAI6 2022-09-26
  • 打赏
  • 举报
回复

楼主请问你问题解决了吗?

善学坊 导师 2021-08-09
  • 打赏
  • 举报
回复

您好,使用非我方提供的传感器,暂时支持力度较小,需要再耐心等待一下回复,多谢理解^_^

664

社区成员

发帖
与我相关
我的任务
社区描述
ZigBee技术交流社区
物联网 技术论坛(原bbs)
社区管理员
  • 大可 Ducker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

ZigBee技术交流社区说明

  • ZigBee技术学习官网:www.sxf-iot.com
  • 关注微信公众号了解更多IoT行业资讯:shanxuefang-iot
  • 如何提问技术问题:点击了解

试试用AI创作助手写篇文章吧