资讯详情

soc入门实战 - 温湿度传感并显示

soc入门实战 - 传感并显示温湿度

注:源代码见我的博客主页–温湿度传感器 - soc系统 verilog quartus2 keil5https://download.csdn.net/download/qq_43029779/85907117 资源仅用于学习和交流。如需转载,请注明。欢迎交流


keil5 quartus2 modelsim fpga DE10_LITE_Golden 解题:题目要求设计简单soc系统,我们应该把简单的外设挂起来apb上,将高速接口如dma等挂接在ahb总线上。

本设计以此为基础 AMBA 实现总线协议的主要功能是 APB 外接 DHT11 温度传感器,在 LED 温度值/湿度值通过按钮切换显示在数字管上,每个数字管上 5 秒通 过 UART 在上位机 PC 实时显示。如下图所示,主所示,ARM 处理器和 SRAM 挂载在 AHB 总线上,而 UART、RTC、DHT11.按钮和数字管则挂载 APB 总 线上。评估点:1)硬件访问 DHT11 2)UART 输出打印 3)RTC 定时 5s 在这里插入图片描述

2.1.1 Rtc 模块 主机可以通过总线读写寄存器将数据写入并读取设定地址的数据 与从机的数据交互。以下模块都挂在 apb 在总线上,根据总线的地址 slave 的 id 决 注意:在将 slave 当连接到总线时,需要连接到总线 hready 拉高,否则 hsel 将不开启。

Rtc 模块初始化时的先置时间 2022 年 12 月 29 日 23 时 59 分 59 秒,寄存器 数据可读写,支持软件,RTC 模块将每 5s 打开计数中断标志位 中断打印软件 uart 传输信息。


2.硬件设计 顶引脚连接:外设可根据用户手册与引脚连接。我们只需要source 一下tcl管脚配置可以通过文件完成。其他引脚只需在顶层文件上连接,如下 Rtc 模块初始化时的先置时间 2022 年 12 月 29 日 23 时 59 分 59 秒,寄存器 数据可读写,支持软件,RTC 模块将每 5s 开启一次计数中断标志位,用以 中断打印软件 uart 传输信息。

Uart挂在apb上, CM3DS_MPS2.h文件Peripheral memory map 外部存储器映射定义了不同部分的位置定义。UART地址=0x40000000UL(apb_base) 0x4000UL apb选通了psel4来挂。 类似地,我们写硬件语言来配置寄存器:下图是数字管写入数据和读取数据的代码 在之前的文章中,我们可以配置软硬件环境和fpga管脚,我们只需要把外设写好,挂起来apb就上去吧。

配置后直接 compile design,在生成的文件中,有以下两个可以下载的文件,其中,sof 文 零件下载速度快,但掉电容易丢失,pof 文件下载速度慢,但不易失电 在 programmer 中只要配置好 hardware 和 file 就好,现在我们已经完成了硬件程序 设计、pin 脚连接,程序下载,让我们开始在软件上看我们 soc 调试程序是否正确 执行。顶引脚连接:外设可根据用户手册与引脚连接。顶引脚连接:外设可以根据用户手册与引脚连接。其他引脚只需要 定义并连接顶层文件,如下图所示: 数字管分别连接相应的管脚,reset 脚连接 key[1]按键,dht11 作为 inout 管脚 连接 gpio[8],key 控制温湿度切换的按键连接 key[0]。 RTC 是独立定时器。RTC 在相应的软件下,模块有一个连续计数器 时钟日历的功能可以在零件配置下提供。当前时间和 日期 RTC 还包括自动唤醒单元,用于管理低功耗模式。两个 32 位置寄存器包二 十进数格式进码 (BCD) 秒、分钟、小时(12 或 24 小时制)、星期几,日期, 月份和年份。此外,还可以提供二进制格式的亚秒值。系统可以自动将月份的天数 补偿为 28、29(闰年) 和 31 天。无论设备状态如何(运行模式、低功耗模式) 只要电源电压保持在工作范围内,RTC 不停止工作。

DHT11 数字温湿度传感器是一种含有校准数字信号输出的温湿度复合传感器 感器。采用特殊的数字模块采集技术和温湿度传感技术,可靠性高 卓越的长期稳定性。传感器包括电阻式感湿元件和 NTC(负温度系数热 具有高性能的敏电阻)温度测量元件 8 位 MCU 相连接。每个 DHT11 传感器都 校准系数以程序的形式存储在湿度校验室中 OTP(一次性可编程) 这些校准系数应在传感器内部处理检测信号时调用。DHT11 使用单 线串行接口,4 针单排引脚封装,信号传输距离可达 20 米以上,在各种应用中 即使在恶劣的环境中也能正常工作。 DATA 用于 FPGA 与 DHT11 通信与同步采用单总线数据格式一次 通讯时间 4ms 数据分为整数部分和小数部分,数据传输完整 40bit, 高位在前。数据格式如下: 8bit 湿度数据 8bit 湿度小数据 8bit 温度整数数据 8bit 温度小数据 8bit 校验和数据 当数据传输正确时,验证和数据等于8bit 湿度数据 8bit 湿度小数据 8bit 温度整数据 8bit 温度度小数据的结果 8 位)。 接下来我们来介绍一下 DHT11 传输时序,DHT11 数据发送。

我们通过状态机接收温湿度传感器的数据 主机(此处指 FPGA)首先,发送一个开始信号,即降低数据线并保持它 t1(至少 18ms)时间;然后提高数据线以保持不变; t2(20~40us)时间,随后开始读取 DHT11 响应;如果操作正确,DHT11 会降低数据线,保持 t3(80us)时间,作为 响应信号;接下来 DHT11 将数据线拉高并保持 t4(80us)然后开始输出时间 有效数据。 DHT11 共输出 40bit 有效数据,每 1bit 数据都是以 50us 低电平开始,高电 平的持续时间是判断数据位的条件。 DHT11 共输出 40bit 有效数据,每 1bit 数据都是以 50us 低电平开始,高电 平的持续时间是判断数据位的条件。当数据位为时 0 高电平的持续时间为 26~28us;当数据位为 1 高电平的持续时间为 70us。 DHT11 数据位0时序图和数据位1时序图如图所示。 DHT11 驱动模块使用三段状态机读取 DHT11 的温度和湿度值,从下图 我们可以更直观地看到每个状态的功能和跳转的下一个状态。这里需要 需要注意的是,因为 DHT11 如果读取速度过快,温度和湿度转换缓慢 DHT11 无法回应,所以每次阅读操作结束后我们都会延迟两秒。 先将数据 data 分别取出个位、十位、百位、千位、万位和十万位 赋 值 给 wire 型 变 量 data0 、 data1 、 data2 、 data3 、 data4 和 data5 。 将 data 输入数字管 bin_data 相连,将 seg 输出数码管 seg_data 相连 进行 apb 写作,定义 seg_decoder,根据不同的 bin_data 数字管的输入控制 段选信号显示在数字管上。

将小数部分和整数部分分别定义为寄存器,并使数字管。检测按钮 切换温度/湿度标志信号。flag 温度显示为0,湿度显示为1。 最高度为符号位,bit7 为 1 表示负温度。 IIC_apb 寄存器如下 下面是 apb 将数据和读取数据的赋值块写入地址 下图是 iic 根据波形变化收发数据。

3.1 初始化寄存器 寄存器的数值通过插桩写入和读取。相应的功能可以通过软件程序驱动硬件 是的。例如,通过插桩将数据写入或读取到固定的寄存器中。此时,打开相应的寄存器窗口,发送 它将显示在存储器中 soc 内对应 slave 寄存器中的数据。 //----------dht11 set-------------------------------- tempture = ((uint32_t*) 0x40001000UL);//read tempture data_temp=*tempture; 由于需要每 5 秒通过 UART 在上位机 PC 在硬件中实时显示温湿度值 第五秒中断信号设置为高电平。但这里只需要检测中断的上部 可以升沿,所以可以加一个 zero_one 检测变量和中断 5 秒中断的上 上升边缘,并通过串口打印相应的上升边缘 RTC 实时及实时温湿度信息。 中断程序也可以编程: 首先,写中断函数如下 首先设计一个 rtc 当数据结构中断函数时 rtc 当硬件中断时, 设置一个软件 flag=1。控制 uart 打印温湿度信息。 四、结果展示

如图所示,uart 打印的信息包括 rtc 模块输出的信息,温度,与湿度。初始 的数据时间是 2022 年 12 月 31 日 23:59:59,每五秒采集一次数据。温度的初 始化数据为 0,接着将会采集到温度传感器送来的数据,27.06℃,用手升温传感 器,湿度由 79 变为 95,温度由 27.06 摄氏度变为 31.07 摄氏度。 下图展示了数码管显示温度传感器采集的温度和湿度的数据,温度采集为 28.09,湿度为 79.00,都是符合下述的 dht11 的标准。

熟悉了 UART、RTC、DHT11 等模块的原理和实现 方法,对 AMBA 总线也有了更深刻的理解。在进行作业的过程中,也遇到了不少问题,比如数码管驱动模块编译正确了,但是数码管却不显示相应的数值, 后来结合 DE10-Lite 的手册我们发现它上面的数码管不是通过位选加段选控制的, 而是每个数码管单独控制的,因此只需要对每个数码管进行段选控制即可。通过 对程序进行修改,数码管也能正常显示数值。再比如每 5 秒通过 UART 在上位机 PC 实时显示温湿度的数值,在硬件中设置了中断信号,第五秒时中断信号 为高电平。但这样带来了相应问题,就是在第 5 秒这整 1 秒的时间内 UART 一直 在打印温湿度数据,后来通过在软件程序中增加一个变量进行联合控制,在中断信号上升沿的时候才打印温湿度以及 RTC 的相应信息。

标签: 连接器传感连接线传感温度变送器外接电源型温湿度变送器模块温湿度变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台