本帖最后由 DoubleMonth 于 2020-7-3 22:30 编辑
【RT-Thread作品秀】STM32F103+RT-Thread温湿度时钟作者:DoubleMonth
概述时钟都存在误差,长时间的误差积累会严重影响时钟的准确 性,本设计主要用于家庭,办公室等环境,可以根据GPS授时或网络UTC时间自动校时,可实现无人值守校时,同时也可以显示当前环境温湿度,可以检测环境亮度,并根据亮度自动调节数码管显示亮度。使用GPS模块的授时时钟功能,精度高达20亿分之一秒。可以脱离网络的限制,实现精准时钟的功能。本设计使用STM32C8T6做为主控,使用ATGM336H-GPS模块,使用10位数码管显示,使用si7020温湿度传感器,使用BH1750检测当前环境亮度,可以同时显示时间,温度、湿度;亮度可以根据当前的环境亮度自动调节。使用了PCF8563时钟芯片,在没有进行GPS授时时读取时钟芯片的时间。预留了EPS8266模块方案,可以实现网络时钟功能。软件分模块设计,使用RT-Thread操作系统进行任务的分配与调用。效果图
RT-Thread使用情况概述
使用了RT-Thread架构,在v3.1.3的基础上进行自己的程序部分编写。使用了IIC功能,UART功能,GPIO功能,GPIO模拟IIC组件,Finsh组件,信号量等等。对各个不同的模块分别建立线程,可以在使用不同模块时进行不同的任务调度,也方便对各个模块进行调试。 硬件框架硬件主要包括电源部分,主芯片电路,各传感器电路,按键电路,数码管驱动电路等。
软件框架说明软件方面使用了RT-Thread操作系统,主要使用了RT-Thread架构,使用了GPIO模拟IIC组件,Finsh工具,信号量等功能。对每个传感器和数码管芯片分别建立线程,在调试时可以根据不同的模块进行调试。
软件模块说明为各模块建立一个线程,分别设定优先级,时间片,等参数。在每个线程中设定不同的延时时间来实现线程的运行时间。延时时间主要依靠各传感器信息更新的重要性来安排,比如按键操作需要实时检测,设定为20ms,光照度的实时性要求不高,设定为5000ms等。其中按键检测使用了状态机的原理,可以实现按键的短按,长按状态,并使用了信号量来发送控制的状态。本设计使用两个按键来实现时间的设定功能。GPS模块上电后进行初始化,在检测到GPS授时信息正确时,为了避免长时间读取GPS时间信息,可以设定在一个固定的时间段进行时间的更新,并将授时后的时间更新到PCF8563时钟芯片内。平时读取PCF8563时钟芯片的时间,并且带有后备电池,在断电后可以继续走时。这样即可以保证时间的精准性,也可以避免GPS无信号时带来的时钟误差或时钟停止。
演示效果https://www.bilibili.com/video/BV1yz411e713/
代码地址 https://github.com/DoubleMonth/21IC-RTThread.git
原理图
|
不错不错,看看。