ATH10传感器读取温湿度

一、分析AHT10 技术手册

(一)温湿度传感器信息(不太重要

1.简介

在这里插入图片描述

2.应用范围

在这里插入图片描述

3.传感器性能

在这里插入图片描述
在这里插入图片描述

(二)温湿度传感器信息(重要

1.接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mN5fTXl1-1659603847265)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802215008421.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RmlCUypT-1659603847266)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802215022092.png)]

2.串行时钟线SCL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvFUOciE-1659603847266)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232417328.png)]

3.串行数据线SDA

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8w6jPSV8-1659603847267)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232444933.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gppHMsua-1659603847267)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232505133.png)]

4.I2C时序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihx0d38q-1659603847267)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232545418.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lf4mXIxD-1659603847268)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232643892.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TX9fh1qu-1659603847268)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232806278.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGjavNRD-1659603847268)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232830095.png)]

5.AHT10指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzJOoY5P-1659603847269)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232912262.png)]

6.状态位说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhxXvT72-1659603847269)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802232951453.png)]

7.读取温湿度流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3zyRAzd-1659603847269)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802233050766.png)]

(1)触发测量数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wbgF8iFu-1659603847270)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802233147168.png)]

(2)读取温湿度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCq2Lk1D-1659603847270)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802233217696.png)]

8.采集数据处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPnpWKJL-1659603847270)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220802233302225.png)]

二、思路

(类似于I2C读写EEPROM,所以整个框架图很相似)

(先上电等待40ms,然后进入空闲状态,接着进行读操作,根据都回来的状态字节的bit[3]来判断是否需要初始化。如果bit[3]=0则需要进行初始化(发送写控制字节,0xE1命令,初始化参数0x08,0x00)如果是bit[3]=1则不需要初始化,可以直接开始触发测量(发送控制字节,0xAC命令,触发参数0x33,0x00),测量完成之后等待80ms(本来是应该再进行读操作,判断状态字节的bit[7]查看是否已经测量完成设备处于空闲状态。不过感觉挺麻烦,延迟80ms应该够了,所以没进行这次读状态操作),之后进行读温湿度操作(发送读控制字节))

(一)温湿度采集系统框架图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPUytlGe-1659603847271)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803091634408.png)]

模块说明:

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
always@(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模块状态转移图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7KX1PsL-1659603847271)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803093824558.png)]

(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)状态转移条件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUdsRqeR-1659603847272)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803094520508.png)]

2.I2C_interface模块状态转移图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNw7zqja-1659603847273)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803092432482.png)]

状态跳转条件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avJedjTe-1659603847273)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803092516028.png)]

三、实验结果

(一)实验效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8x5tQevC-1659603847273)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803165955095.png)]

(二)仿真

1、状态跳转仿真
(1)读状态、初始化状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cB6AsN92-1659603847274)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803190730641.png)]

(2)读状态、触发测量状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aiwBKwM5-1659603847274)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803191907383.png)]

(3)读温湿度状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrJCRc2m-1659603847274)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803192456083.png)]

2、数据处理仿真

在这里插入图片描述

3.RTL视图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i6KOLUXJ-1659603847275)(C:\Users\22335\AppData\Roaming\Typora\typora-user-images\image-20220803194902810.png)]
在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值