发作品签到
标准版

【RA】基于瑞萨R7FA2E1A72DFL的万年历

工程标签

1.1w
0
0
22

简介

基于瑞萨R7FA2E1A72DFL的万年历,时钟使用单片机内部rtc,支持农历显示,温湿度检测,亮度检测,外挂蓝牙芯片进行授时,广播温湿度等操作。

简介:基于瑞萨R7FA2E1A72DFL的万年历,时钟使用单片机内部rtc,支持农历显示,温湿度检测,亮度检测,外挂蓝牙芯片进行授时,广播温湿度等操作。

开源协议

Public Domain

(未经作者授权,禁止转载)
创建时间:2022-04-12 13:39:34更新时间:2024-01-29 01:33:32

描述

基于瑞萨R7FA2E1A72DFL的万年历

基于瑞萨R7FA2E1A72DFL的万年历,时钟使用单片机内部rtc,支持农历显示,温湿度检测,亮度检测,外挂蓝牙芯片进行授时,广播温湿度等操作。单片机驱动64个ws2812,点亮特定位置的led,展示时钟日期信息。

灵感来源

https://hackaday.io/project/57535-dulles-clock
https://hackaday.io/project/169194-8x8-rgb-ledmatrix-desktop-word-clock
https://hackaday.io/project/163848-japanese-word-clock
https://hackaday.io/project/3305-word-clock
https://www\.youtube\.com/watch?v=fYtS\_n\_GhCY&t=856s

电脑通过蓝牙对其设定时间

VID_20220510_135753.gif
VID_20220509_233541.gif

外观

VID_20220510_152636.gif
image.png

缘起

image.png
瑞萨x立创eda联合举办的活动,白嫖器件,白嫖pcb,白嫖3d打印
https://maker.lceda.cn/LCEDA_RAMCU
这个制作几乎没什么成本,全让立创报销了。
感谢立创以及瑞萨举办本次活动活动,特别感谢群内官方技术支持和活动运营人员。
image.png
感谢群友互助。

元件

| 描述 | 型号 |
| MCU | R7FA2E1A72DFL |
| 温度传感器 | GXHT30(同SHT30) |
| 蓝牙 | CH571k |
| LED | WS2812B |

主控:R7FA2E1A72DFL

48M Arm Cortex M23内核
16k ram,64k rom
1个32位定时器(GPT0),6个16位定时器(GPT4-9),2个低功耗定时器
1个专用spi,1个专用i2c
4个sci,可配置为uart、spi、i2c
12位adc
RTC
触摸
真随机数生成器,硬件AES,ECC加速。

外观设计

三明治结构,底层控制电路和led,中层3d打印格栅,顶层薄pcb开窗,作为显示面板。

顶层

image.png

pcb的底版是玻璃纤维增强树脂基复合材料,他其实是半透明的。然而,铜作为一种金属,却能很好的隔光。
黄色部分是开窗的,半透明,直接露出pcb基板。黑色部分是阻焊+铺铜,良好隔光。
在eda中按汉字的轮廓精准开窗,这样就能让字符清晰显示。

中框

image.png
中框是用立创eda专业版画的。真的。不要看里面的电路,可能是旧的,只看外壳设计。链接在此: 外壳工程链接
ws2812发光是向所有方向的,这样除了正上方的字会被照亮,周围一圈也会被隐隐照亮,所以加上这个中框,内部栅格阻止光的横向传播。
但是即使这样,在led亮度升高时,还是会有部分漏光,尤其是红光。
可以加大led间距,并且在文字周围添加过孔,阻碍光线传播,但是影响观感,表面就不丝滑了。

底层

电路部分,预留安装孔。
image.png

装配

image.png
序列 01_1.gif


这侧装配设计是比较满意的。在顶层的背面预留焊盘,将铜柱焊接在焊盘上,中框预留铜柱的缺口,螺丝穿过底层拧在铜柱上。 ![image.png](//image.lceda.cn/pullimage/EmWZKBc8UmV5L0vlrid0mXBZpLmpr07nSgBM3lCZ.png) 这样在正面和侧面就看不到固定的装置,只有背面有四个螺丝。

立创eda:顶层的字是如何写上去的

总的来说,Illustrator进行排版,导出dxf轮廓,导入eda中,通过轮廓建立开窗区域。
但是,实际情况有点复杂。
立创eda目前不能正确识别嵌套的轮廓,例如导入一个环,eda会认为这是大圆套小圆,而不是一个环。
幸运的是,有些字体(包括但不限于楷体_GB2312),是以笔画位单位的,每一笔都是简单封闭图形。用这个导入创建轮廓没事。
具体可参考附件的ai工程。
image.png
对于图标,我的做法是把图标拆开成多个简单封闭图像,然后导入。把几个图形按相对位置拼在一起。例如蓝牙图标就是拆成两部分后导入的,这样两部分的每一笔都是一个封闭图形。
image.png

电路

从电源触发,先进自恢复保险F1,然后5v直通所有ws2812。另有一路通过ldo降压成3.3v给其他设备供电。电路集成蜂鸣器,光敏电阻(adc测量),温湿度传感器(i2c通讯),蓝牙芯片(串口通讯),以及两组WS2812通过spi模拟操作他的信号进行控制。

开发环境

RA系列专用版e2 studio,内部集成fsp。下载链接
image.png

软件代码

github为主,gitee更新可能不及时。目前仍在开发中,部分功能不可用。

| 功能 | 状态 |
| rtc初始化授时 | 可用 |
| 时间日期农历显示 | 可用 |
| 温湿度读取 | 可用 |
| 亮度adc读取 | 可用 |
| windows电脑通过蓝牙授时软件 | 可用 |
| 安卓通过蓝牙授时app | 待开发 |
| 温湿度蓝牙读取广播 | 待开发 |
| 基于环境光的亮度控制 | 待开发 |
| 闹钟 | 待开发 |
| 动画 | 待开发 |

    ├─adc    adc读取光敏电阻
    ├─ble     蓝牙通讯
    ├─buzzer    pwm驱动无源蜂鸣器
    ├─color    hsv色域转换
    ├─debug    调试串口
    ├─fcal    农历转换
    ├─GXHT30   温湿度传感器驱动
    ├─rtc    实时时钟  日期计算
    ├─timer   屏幕刷新信号
    └─ws2812  led驱动
main.cpp 主要逻辑
utils.h  工具类

第三方软件包

https://github.com/FlyingFishBird/fcal(适应单片机的fork https://github.com/liux-pro/fcal)
https://github.com/NordicSemiconductor/Android-BLE-Library
https://github.com/DerekGn/WinRtBle

技术参考

软件设计的参考资料基本有四种来源

  1. ide会自带fsp说明文档,内含所有函数的说明文档和示例代码。
  2. 官方有大量例程,官网下载链接
  3. 官方的 ra生态工作室。
  4. 官方论坛搜索。
    RA系列面世时间不长,生态还在建设中。国外资源相对国内丰富一下,论坛也相对活跃,有问题可以尝试用英文搜索一下试试,有奇效。

调试输出函数设计

可能是我比较菜鸟,官方的printf重定向我跑不通。
参口https://www.ibm.com/docs/en/zos/2.1.0?topic=functions-vsprintf-format-print-data-buffer
最printf进行包装。
详见debug文件夹

spi驱动ws2812

通过spi发送特定数据包,模拟ws2812所需时序,相关代码在ws2812下。
https://www.elecfans.com/d/comp-4843843-136335947323087548416.html
http://bbs.mydigit.cn/read.php?tid=2622343

瑞萨spi驱动ws2812的坑

这是一个天坑
瑞萨的 sci spi channel 2 9 在mosi上发送信号时候.
每次发送前会先把mosi拉高几微秒,然后正常发送信号。
在正常spi通信时候,因为有clk信号,这没有问题。
但是如果控制ws2812,这几个微秒会破环信号,导致第一个比特翻转,
导致灯带第一个led收到的信号的最高位一直是1.
邪门的是sci channel 2 会这样,专用spi没有这个问题。
官方论坛上也有人指出这个问题,他说sci channel 9 也有这个问题
参考:https://renesasrulz\.com/embedded\-system\-platform/synergy/f/forum/19774/r\_sci\_spi\-simple\-spi\-the\-rising\-edge\-of\-the\-first\-pulse\-occurs\-much\-earlier\-than\-expected?ReplySortBy=CreatedDate&ReplySortOrder=Ascending
官方例程采用了sci0,所以“恰好”没遇到这个问题。
只能暂时发之前多发几个0xff,让这个脉冲信号远离真正的信号,希望瑞萨解解决个问题
官方如果想验证,可以直接用sci2驱动ws2812,看第一个灯,永远不能关闭。

色域转换

ws2812基于rgb进行混色,然而rgb对于颜色的描述并不直观,而hsv色域对颜色描述对人类来说是十分直观的。
h代表红橙黄绿青蓝紫。s代表颜色的饱和度,v代表亮度。下面的参考链接提供一种快速的色域转换算法。
image.png
参考:https://www.vagrearg.org/content/hsvrgb

压电无源蜂鸣器

这种无源的蜂鸣器加个三极管,给上pwm是不能驱动的,需要并联一个电阻。感谢客户编 @19395A 的群友
参考:https://baijiahao.baidu.com/s?id=1678346404000645198&wfr=spider&for=pc

随机数生成的坑

瑞萨带有一个真随机数生成器,当前fsp(3.6)有bug,c++下该库编译不过。
瑞萨接受了我的修复代码,在新版fsp中这不是问题了
参考:https://github.com/renesas/fsp/pull/195

时间设置

采用蓝牙广播一个时间戳来初始化rtc,目前实现了windows和Android下发送蓝牙广播调整rtc时间。基本原理是发送一个蓝牙广播,厂商信息里填充时间戳。ch571k接收到广播后通过串口发给瑞萨单片机,进而调整时间。

蓝牙代码

基于主从一体的例程就行修改,接收特定厂商的广播,并提取有效数据通过串口发出去。收到数据把数据放到广播里。暂不支持连接,只支持通过广播通讯。
见附件ch571k.zip

windows上位机

通过winrt调用电脑上的蓝牙,获取当前时间戳,组装特定的数据包发出去。蓝牙芯片会接受这个广播,发给瑞萨,进而完成授时。
SuperClockWindows.7z

未曾设想的道路

  1. 有屏幕的地方就有badapple。
  2. 屏幕显示电脑cpu占用和温度等。

设计图

原理图(1 / 2)

BOM

IDNameDesignatorFootprintQuantity
1TSA365G00D-250BOOT,RSTSW-SMD_TSA365G00D-2502
2FST-9018BUZZER1BUZ-SMD_FST-90181
31uFC1,C2,C3C06033
4100nFC19,C20,C21,C24,C26,C29C06036
510ufC23C06031

附件

序号文件名称下载次数
1
ch571k.zip
150
2
SuperClockWindows.7z
747
3
PCB_【RA】基于瑞萨R7FA2E1A72DFL的万年历_B.stl
38
4
SuperClockWindows.exe
50
5
mask.ai
55
6
super_clock_android.zip
95
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航