×

强大的闹钟构建

消耗积分:0 | 格式:zip | 大小:0.12 MB | 2022-12-05

王杰

分享资料个

描述

介绍

让我们构建一个闹钟。

基于Adam Taylor 的 MiniZed 电机控制项目,我们将添加一个 oled Pmod 并将定时器转换为时钟。要设置时间和闹钟时间,我们将使用串口。电机将用于发出警报声。

Vivado 和硬件

从 MiniZed 电机控制项目开始,我们需要为其添加 oled Pmod 和时钟。

下载Digilent Pmod Vivado Library 2019.1并将其放入项目的 IP 目录中,如Digilent Pmod IP 入门指南中所示。

将如下所示的 PmodOLEDrgb 添加到 MiniZed 电机控制项目中:

poYBAGOIQUCAEg4EAAESQfQxXJY518.jpg

将oled输出添加到Pmod2。将附加约束文件。显示器的所有接口引脚都是输入(MiniZed的输出)。FCLK_CLK0需要50MHz才能使Pmod IP正常工作。默认情况下,MiniZed上的频率为50MHz。

硬件

将HB3 Pmod添加到Pmod 1连接器的顶行,这正是Adam Taylor设置原始项目的方式。然后,将oled Pmod添加到Pmod 2连接器,屏幕面朝上。

Vitis(软件)

使用MiniZed电机控制代码作为基准,Digilent的IP作为指南,该软件(附件中)更改计时器,以作为时钟的1Hz更新。当时间等于报警时间时,电机运行并鸣响警铃。

代码中发生了什么。。。

绝大多数代码都在设置计时器和/或中断。关于计时器和中断,我从Adam的基线中唯一改变的是TICK_timer_FREQ_Hz的第15行从100 Hz变为1Hz,以及中断函数在触发后会做什么(稍后将详细介绍)。有关计时器中断代码的更多信息,请参阅Adam Taylor的MicroZed编年史第15部分。

有几个变量用于保存时间和报警值。大多数变量都是全局变量。这不是理想的情况,但考虑到这是我在ARM处理器上制作的第一个程序,请原谅这一混乱。

主要功能

主功能设置平台,通过串行端口输出欢迎消息,然后通过OLEDrgb_begin设置oled,这需要#include“PMODOLEDrgb.h”

然后调用从第91行开始的函数display_menu()。在这个程序中,它只被调用一次。这是设置时钟和闹钟时间的地方。我很有意思地发现,两位数字/字符串行端口读取需要scanf函数,而不是用于一个字符输入的读取函数。

然后调用从第286行开始的update_oled()函数。这将输出并格式化屏幕上的时间和报警时间。在display_menu()获取值和每分钟(在中断函数中调用)后,在主函数中调用一次。

接下来,设置并启用计时器中断。然后电机控制引脚被设置,但不是像亚当的程序那样被命令运行。

然后main永远在while循环中等待。其他一切都发生在TickHandler(void*CallBackRef)函数中。

中断功能

时间更新和报警检查发生在TickHandler(void*CallBackRef)函数内部,从第227行开始。如果设置了1Hz TICK_TIMER_FREQ_HZ,则每个中断等于一秒。60秒后,分钟增加,就像一个普通的时钟。每分钟调用一次update_oled()函数来更改时间。根据时间检查报警时间,如果时间相等,电机将打开(第287行)一分钟,开始您的一天。

注意:时钟功能有一个错误,12:59到1:00的滚动…如果你发现了问题,请告诉我。

后果

以下是最终项目的视频:

结论

感谢Hackster和Adam Taylor的构建,并激励我深入FPGA SoC。这是一次非常有趣的体验,希望不久能做更多的项目!希望你学到了一些东西,创造了更大的东西。

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !