1.看硬件原理图

SDA、SCL:与主机SDA、SCL相连。
A0、A1、A2:可以设置lm75a的后三位地址。如图地址是(这要结合数据手册才知道):0x9E.

2.看数据手册解决发送什么数据的问题
2.1找出从地址

2.2找出从机内部指针寄存器介绍和数据寄存器地址及功能介绍


2.3找到所需寄存器各位的具体功能
8位配置寄存器设置故障队列、OS极性、OS输出功能采用比较器模式还是中断模式、关断控制。(详情看数据手册)

驱动代码如下:
#ifndef __LM75A_H
#define __LM75A_H
#include "sys.h"
#include "i2c.h"
#define LM75A_ADD 0x9E //器件地址
void LM75A_GetTemp(u8 *Tempbuffer);//读温度
void LM75A_POWERDOWN(void); //掉电模式
#endif
#include "lm75a.h"
//读出LM75A的温度值(-55~125摄氏度)
//温度正负号(0正1负),温度整数,温度小数(点后2位)依次放入*Tempbuffer(十进制)
void LM75A_GetTemp(u8 *Tempbuffer){
u8 buf[2]; //温度值储存
u8 t=0,a=0;
I2C_READ_BUFFER(LM75A_ADD,0x00,buf,2); //读出温度值(器件地址,子地址,主机数据储存器,字节数)
t = buf[0]; //处理温度整数部分,0~125度
*Tempbuffer = 0; //温度值为正值
if(t & 0x80){ //判断温度是否是负(MSB表示温度符号)
*Tempbuffer = 1; //温度值为负值
t = ~t; t++; //计算补码(原码取反后加1)
}
if(t & 0x01){ a=a+1; } //从高到低按位加入温度积加值(0~125)
if(t & 0x02){ a=a+2; }
if(t & 0x04){ a=a+4; }
if(t & 0x08){ a=a+8; }
if(t & 0x10){ a=a+16; }
if(t & 0x20){ a=a+32; }
if(t & 0x40){ a=a+64; }
Tempbuffer++;
*Tempbuffer = a;
a = 0;
t = buf[1]; //处理小数部分,取0.125精度的前2位(12、25、37、50、62、75、87)
if(t & 0x20){ a=a+12; }
if(t & 0x40){ a=a+25; }
if(t & 0x80){ a=a+50; }
Tempbuffer++;
*Tempbuffer = a;
}
//LM75进入掉电模式,再次调用LM75A_GetTemp();即可正常工作
//建议只在需要低功耗情况下使用
void LM75A_POWERDOWN(void){//
I2C_SAND_BYTE(LM75A_ADD,0x01,1); //
}
本文介绍了如何通过硬件原理图和数据手册理解LM75A温度传感器的工作原理,并给出了具体的驱动代码实现,包括读取温度和设置掉电模式的方法。



1万+

被折叠的 条评论
为什么被折叠?



