智能音乐打铃系统开发:(三)硬件部分
一 实时时钟RTC
从一开始就计划打铃系统在基于linux系统的香橙派中运行的,香橙派的硬件资源已经比较齐全了,但还是有些东西没有,其中一个就是RTC实时时钟,没有这个在停电的时候就不能保持时钟,特别是没有网络的时候也不能用NTP 获取正确的时钟,好在香橙派可以支持I2C总线的RTC模块DS1307.从网上买的tinyRTC模块,接在香橙派的26PIN接口的I2C接口上,按香橙派手册,设置I2C总线的RTC模块基本比较顺利,再开通NTP时间更新服务,在联网的情况下保证的时钟的正确性.
二 GPIO指示灯
因为打铃系统希望希望做成家用路由器那样的没有显示器的设备,但没有一个指示灯感觉又不太好,好在香橙派支持GPIO输出,接个限流电阻加发光二极管做指示灯还是比较简单的,但开发过程中也经过一些波折.
最开始用的是wiringOP的c语言接口来控制GPIO的,确实很简单,一做就成.但是.别的模块出问题了,一开始不知道是GPIO模块影响的,各种乱找原因 ,最后发现是GPIO模块影响了i2c和spi总线,这个RTC模块和SPI FLASH模块都有问题了.猜测可能是wiringOP初始化的时候把I2C总线和SPI部分接口初始化成一般GPIO口了,也可能是自己的用法不对.所以还是放弃了使用wiringOP.
放弃wiringOP后用什么办法控制GPIO呢,当前不知道有什么好方法,所以采取了一种很低级的方法,通过MMAP 把处理器H616的硬件资源映射到内存,查芯片手册,通过相应的控制寄存器设置相应的管角为一般GPIO功能,通过映射的内存设置输出电平高低来控制LED的亮与灭.这个方法还真实现了这个功能,两台没试机在两个学校测试了一年,也很稳定.
但是只到一年后准备完善打铃系统写这篇文章的时候才发现一种更好更简单更通用的方法 ,就是linux已经有了GPIO驱动 ,通过/sys/class/gpio/下的文件来操作GPIO感觉比wiringOP还简单.新版计划用新方法来实现.
2024年3月
三 数码管显示
LED指示灯又有新方案,改用数码管来显示,无事件时显示时钟,有事件时显示一定的字母,开机还可以显示一次本机IP;
自己做了一个数码管模块,嘉立创EDA画了PCB,把0.36英寸的数码管和aip650芯片做在一个数码管大小相同的PCB上,引出4个插针,计划焊接在母板上使用。
20240314更新 数码管模块上有一个电容没有焊,发现运行一段时间显示不稳定,不知道是不是这个原因,待电容有了焊上再试,另外计划把显示模块做成单独一个服务,再留个api给shell脚本调用。
RTC模块又出现问题,开发板更新为H618后,linux内核也升级了,结果新加的RTC模块补识别了RTC1,但系统好象默认用的是RTC0,还没有找到解决方案。
本文之前发布在CSDN博客,个人博客开通后copy一份,丰富博客内容和保存记忆.