当前位置:网站首页>ATH10传感器读取温湿度
ATH10传感器读取温湿度
2022-08-10 06:38:00 【隨心ξ所欲】
一、分析AHT10 技术手册
(一)温湿度传感器信息(不太重要)
1.简介
2.应用范围
3.传感器性能
(二)温湿度传感器信息(重要)
1.接口
2.串行时钟线SCL
3.串行数据线SDA
4.I2C时序
5.AHT10指令
6.状态位说明
7.读取温湿度流程
(1)触发测量数据
(2)读取温湿度
8.采集数据处理
二、思路
(类似于I2C读写EEPROM,所以整个框架图很相似)
(先上电等待40ms,然后进入空闲状态,接着进行读操作,根据都回来的状态字节的bit[3]来判断是否需要初始化。如果bit[3]=0则需要进行初始化(发送写控制字节,0xE1命令,初始化参数0x08,0x00)如果是bit[3]=1则不需要初始化,可以直接开始触发测量(发送控制字节,0xAC命令,触发参数0x33,0x00),测量完成之后等待80ms(本来是应该再进行读操作,判断状态字节的bit[7]查看是否已经测量完成设备处于空闲状态。不过感觉挺麻烦,延迟80ms应该够了,所以没进行这次读状态操作),之后进行读温湿度操作(发送读控制字节))
(一)温湿度采集系统框架图
模块说明:
1.顶层模块–aht10
aht10(
input clk ,
input rst_n ,
output i2c_scl,
inout i2c_sda,
output tx
);
2.控制模块–controller
controller(
input clk ,
input rst_n ,
input busy ,
output i2c_scl ,
inout i2c_sda ,
output [7:0] data_tx,
output data_tx_vld
);
控制aht10_rw和i2c_interface数据传输,接收uart_tx模块的busy信号,输出data_tx和data_tx_vld给uart_tx模块,传输i2c时钟和数据。
3.AHT10读写模块–aht10_rw
aht10_rw(
input clk ,
input rst_n ,
input busy ,
output req ,
output [3:0] cmd ,
output [7:0] wr_data ,
input [7:0] rd_data ,
output reg [7:0] dout ,
output reg dout_vld ,
input done ,
input slave_ack
);
根据状态对i2c接口模块发送请求、命令(读、写、起始、停止)、发送数据。实现控制i2c接口模块对aht10传感器进行读写操作。处理接收数据并发送给uart_tx模块。
数据处理
(我直接在这个模块中处理了数据)
思路:
(1)按字节将数据存入[19:0]RH和[19:0]TP中,过滤掉状态字节,将后面的温湿度字节前2.5字节存入[19:0]RH,后2.5字节存入[19:0]TP。
//数据处理
//RH、TP
[email protected](posedge clk or negedge rst_n)begin
if(!rst_n)begin
RH <= 1'b0;
TP <= 1'b0;
end
else if(state_c == READ_WAIT && cnt_byte == 2) begin
RH[19:12] <= rd_data;
TP <= 1'b0;
end
else if(state_c == READ_WAIT && cnt_byte == 3) begin
RH[11:4] <= rd_data;
TP <= 1'b0;
end
else if(state_c == READ_WAIT && cnt_byte == 4) begin
RH[3:0] <= rd_data[7:4];
TP[19:16] <= rd_data[3:0];
end
else if(state_c == READ_WAIT && cnt_byte == 5) begin
RH <= RH;
TP[15:8] <= rd_data;
end
else if(state_c == READ_WAIT && cnt_byte == 6) begin
RH <= RH;
TP[7:0] <= rd_data;
end
end
(2)按公式处理数据
wire [39:0] RH_r;
wire [39:0] TP_r;
assign RH_r = (RH * 10000)>>20;
assign TP_r = ((TP * 20000)>>20) - 5000;
(3)将数据转换为ASCII码
wire [7:0] data_r [15:0];//寄存湿度、温度的个十百千位
assign data_r [0] = 8'b01010010 ;//R
assign data_r [1] = 8'b01001000 ;//H
assign data_r [2] = 8'b00111010 ;//:
assign data_r [3] = RH_r /1000 + 8'b0011_0000;//湿度千位
assign data_r [4] = RH_r /100 %10 + 8'b0011_0000;//湿度百位
assign data_r [5] = 8'b00101110 ;//.
assign data_r [6] = RH_r /10 %10 + 8'b0011_0000;//湿度十位
assign data_r [7] = RH_r %10 + 8'b0011_0000;//湿度个位
assign data_r [8] = 8'b01010100 ;//T
assign data_r [9] = 8'b01010000 ;//P
assign data_r [10] = 8'b00111010 ;//:
assign data_r [11] = TP_r /1000 + 8'b0011_0000;//温度千位
assign data_r [12] = TP_r /100 %10 + 8'b0011_0000;//温度百位
assign data_r [13] = 8'b00101110 ;//.
assign data_r [14] = TP_r /10 %10 + 8'b0011_0000;//温度十位
assign data_r [15] = TP_r %10 + 8'b0011_0000;//温度个位
4.I2C接口模块–i2c_interface
i2c_interface(
input clk ,
input rst_n ,
//主机发送数据
input req ,//请求
input [3:0] cmd ,//i2c接口指令,控制状态
input [7:0] din ,//i2c接口需要发送的数据
//主机接收数据
output [7:0] dout ,//i2c接口接收的数据
output done ,//完成一次读/写指令
output slave_ack ,//主机给从机的应答
//从机接收数据
output i2c_scl ,//i2c时钟
input i2c_sda_i , //i2c给主机发数据
output i2c_sda_o ,//主机给从机发数据
output i2c_sda_oe
);
根据aht10_rw模块的请求、命令进行读写操作,满足i2c读写时序,产生i2c时钟,控制i2c时钟线和数据线进行数据传输。
(二)状态转移图
1.AHT10_RW模块状态转移图
(1)状态说明:
WAIT:上电等待40ms
IDLE:空闲状态
STATU、STATU_WAIT:读状态字节状态及其等待状态
INIT、INIT_WAIT:初始化状态及其等待状态
START、START_WAIT:触发状态及其等待状态
READ、READ_WAIT:读温湿度数据状态及其等待状态
DONE:结束状态
(2)各个状态字节数:
读状态 读控制字节(8’b0111_0001) 读状态字节 共两字节
初始化 写控制字节(8’b0111_0000) 写命令(8’b11100001) 写两个参数(8’b00001000、8’b00000000) 共四字节
触发测量 写控制字节(8’b0111_0000) 写命令(8’b10101100) 写两个参数(8’b00110011、8’b00000000) 共四字节
读数据 读控制字节(8’b0111_0001) 读六字节 共七字节
(3)状态转移条件:
2.I2C_interface模块状态转移图
状态跳转条件:
三、实验结果
(一)实验效果
(二)仿真
1、状态跳转仿真
(1)读状态、初始化状态
(2)读状态、触发测量状态
(3)读温湿度状态
2、数据处理仿真
3.RTL视图
边栏推荐
猜你喜欢
随机推荐
MySQL之InnoDB引擎(六)
请问一下。Oracle CDC 连接器支持 LogMiner 和 XStream API 两种方式捕
求职
ebp/栈帧/call stack
ctfshow SSTI 知识点总结
Lunix(阿里云服务器)安装Anaconda并开启jupyter服务本地访问
【强化学习】《Easy RL》- Q-learning - CliffWalking(悬崖行走)代码解读
[Reinforcement Learning] "Easy RL" - Q-learning - CliffWalking (cliff walking) code interpretation
阿里巴巴(中国)网络技术有限公司、测试开发笔试二面试题(附答案)
I would like to ask you guys, when FLink SQL reads the source, specify the time field of the watermark. If the specified field is in the grid
May I ask why sqlserver cdc will report this error one day after the task is started, obviously cdc has been opened.
Confluence可以连接数据库但是在下一步就报错了
BUUCTF笔记(web)
第2章 变量和基本类型读书笔记
C语言文件操作
全网可达并设备加密
MySQL's InnoDB engine (6)
XV6系统调用实现
强化学习_12_Datawhale深度确定性策略梯度
OSPF的dr和bdr