实验目的:采集温湿度传感器值
一,IIC概念
1.同步串行半双工总线,主要用于链接整体电路,硬件结构简单,接口连接方便,成本较低
2.两线制,只有两根双向信号线,数据线SDA,时钟线SCL
3.IIC传输速率:1)低速:100k ,2)400k,全速:3.4M
4.总线外接两个上拉电阻:在总线处于空闲状态时,默认处于高电平状态
二,硬件连接
1.支持多主机多从机模式,但同一时刻,只能一个主机和一个从机通讯,大多数情况使用单主机多从机模式
2.每个挂接到 IIC总线上的从机设备,都有自己唯一的7位从机地址
3.发送数据----发送器,接收数据----接收器
主动发起数据----主机,被动接收数据-----从机
4.时钟信号由主机产生,作用给从机完成数据收发同步
三,内部框图
四,时序
1.总线时序,时序的拼接才是协议
2.SCL高电平,可以发送起始信号和终止信号
SCL低电平,可以发送数据传输信号
3.发送完8位数据位后必须发一个应答位,只有应答后才能发送结束信号
4.从机地址必须写在起始信号后面,这样
1.起始信号
1、起始信号和停止信号都由主机产生
2、起始信号产生之后,代表总线开始传输数据
3、起始信号:在SCL为高电平期间,数据线从高到低的变化(下降沿)
4、起始信号产生之后,总线处于占用状态
2.停止信号
1,停止信号产生之后,代表总线传输数据结束
2,停止信号:在SCL为高电平期间,数据线从低到高的变化(上升沿)
3,停止信号产生之后,总线处于空闲状态
3.数据传输信号
在SCL为低电平期间,数据线上数据允许发生变化,发送器向数据线上写入数据
在SCL为高电平期间,要求数据线上数据保持稳定,不允许发生变化,接收器从数据线上读取数据
4.应答信号
1、每一个被传输的数据,必须保证8位长度 ==> 先发送高位,在发送低位
2、每传送完8位数据位之后,必须跟随一个应答位, 一帧数据 = 8位数据位+1位应答位=9位
3、发送器向数据线写入8位数据,接收器在第9个时钟周期,向数据线写入应答信号/非应答信号
发送器在第9个时钟周期,从数据线上读取数据
读0:接收器返回的是应答信号
读1:接收器返回的是非应答信号
5.寻址信号
1、IIC总线传输数据是广义,既可以传输8位数据,也可以传输7位从机地址+读/写位
2、写位用0表示,读位用1表示
3、从总线上读取数据:7位从机地址 + 读(1)
4、向总线上写入数据:7位从机地址 + 写(0)
5、从机地址必须写在起始信号后面,这样这8位才代表寻址过程
五,IIC协议
1.主机发送一个字节给从机
2.主机发送多个字节给从机
3.从机发送一个字节给主机
4.从机发送一个字节给主机
六,分析si7006芯片
1、si7006从机地址 ===> 0x40
2、si7006内部框图
3、芯片如何进行初始化(地址/值) ===> 0xE6 0x3A
4、如何采集温度和湿度的地址
5、查找si7006芯片手册的采集协议
6、如何将数据量转换为模拟量 ===> 公式
1,内部框图
2,从机地址
:0x40
从机地址+读:0x40 << 1 | 1
从机地址+写:0x40 << 1 | 0
3,读取温湿度命令码
测量相关湿度,保持主机模式:0xE5
测量相关湿度,不保持主机模式:0xF5
测量相关温度,保持主机模式:0xE3
测量相关温度,不保持主机模式:0xF3
从之前测量湿度中,读取温度的值:0xE0
写用户寄存器1 :0xE6
读用户寄存器1:0xE7
七,起始信号
起始信号===从机地址+写===ACK===命令码===ACK===起始信号===从机地址+读===ACK===延时函数===========高八位===ACK===第八位NACK===停止信号
八,转换公式
因为测出来的时模拟量,需要使用ADC转为数字量
湿度转换公式 H = %RH - 125*RH_Code / 65536 -6
温度转换公式 T = 175.72*Temp_Code / 65536 - 46.85
九,初始化值
寄存器初始化值:0011 1010 ====== 0x3A
[7][0] == 00:测量精度
[6] == 0:电源状态 : 0 = 高电平 ,1 = 低电平