简介
这是一个基于瑞萨R7FA2L1AB2DFL单片机做的一个音乐频谱灯,屏幕用的是P4全彩单元板,喜欢玩点阵屏的朋友肯定会喜欢上这种“超大号点阵屏”,由于时间仓促,目前只做了频谱功能,后面会改一下PCB,加上亮度自动调节,温度测量,时钟显示的功能(因为这次的板子上面没有光敏电阻,温度传感器,和纽扣电池)
硬件说明
主控:R7FA2L1AB2DFL
音频输入:麦克风/耳机口
运放:NE5532DR
屏幕:P4全彩单元板(256mmx128mm,16扫)
串口:程序下载1
ADC0通道0:采集音频
ADC0通道1:采集环境亮度
按键:预留有四个按键,其中BOOT和RST下载程序用,KEY1和KEY2用来切换模式、颜色、亮度等
PCB上音频采集部分为了减小干扰没有铺铜
后期扩展:将增加光敏电阻用来自动调节亮度,增加DS18B20检测环境温度,增加DS3231时钟模块(可不加),以及纽扣电池,掉电时给时钟供电
软件说明
屏幕驱动
定时器0以100X16HZ的频率扫描屏幕,中断优先级最高(否则会出现屏幕闪烁),为什么屏幕刷新速度要设为这么高?这是与我的驱动方式有关,我这个屏幕是16扫的,一次扫描2行,共32行分16次扫描完,定时器0产生一次更新中断在中断回调函数中我只扫描一次,也就是只扫描2行,所以刷新整个屏幕需要产生16次中断,由此可知屏幕实际刷新率是100X16HZ/16=100HZ,这是很正常的刷新率了。还有另一种扫描方法如下;
可以将定时器0更新中断就设为100HZ,然后再中断回调函数里面一次性扫描16次,这样也能做到100HZ刷新率,且更容易理解,但是这样的话就增加了在中断回调函数中的时间,实测在这款单片机上会影响到while(1)的循环,对于主频更高的单片机是影响很小的。
ADC采集
定时器1用来触发ADC0的通道0采集音频,常见的音频采样频率都是44100HZ,人对10KHz以上的高频声音更加敏感,虽然这部分所携带的能量小,在屏幕上的幅度较小,不过没关系,我专门预留了一个调整幅度的电位器,此电位器可以调剂音频信号的放大倍数,从而能调节频谱显示的幅度(实测有效),根据奈奎斯特定理,采集10KHz的信号,其采样频率不应低于20KHz,所以这里就将采样频率设为20KHz,定时器1用来触发ADC0通道0采用,采用结果通过DTC传输到指定内存(DTC功能与DMA类似)
注:我这里ADC、TIM、DTC没有用ELC事件连接器连接(不会配置(捂脸.jpg))用ELC效果会更好
快速傅里叶变换
原本计划用256点采样,但是实测运算太慢,不得不采用128点才勉强能用(我怀疑是我e2 Studio配置错了,导致单片机运行速率低的离谱),fft运算用的是江科大自化协UP写的fft.c源码。
实物图片
实物背面如下
下面附上背面简单说明
如下图,PCB电路板通过红色圈中的接口与屏幕通信,蓝色圈中的M3孔可以将PCB固定在屏幕背面,黄色圈中的是屏幕的供电接口
下面附上测面图片
效果图片
由于最近事情多,就没有剪视频发B站,这个过两天补上,大家可以先看一下图片(之前用32做过发了B站,大家可以去看看>https://b23.tv/lyYAUzc?share_medium=android&share_source=qq&bbid=XY190221153CD515F9E44E2D2280C56F73120&ts=1652075244985
)链接要是打不开可以看最下面的视频
16x16汉字显示效果
32x32汉字显示效果
时钟效果我个人觉得非常nice,数字间的切换非常有艺术气息,这个版本没做时钟,因为没有加纽扣电池,下一版会补上,时钟切换效果在32那个视频里面有,感兴趣可以移步去看(>https://b23.tv/lyYAUzc?share_medium=android&share_source=qq&bbid=XY190221153CD515F9E44E2D2280C56F73120&ts=1652075244985)链接要是打不开可以看最下面的视频
全彩单元板驱动详解
接线说明
全彩单元板都是这种HUB75接口
R1,G1,B1是上面16行的颜色控制线,R1,G2,B2是下面16行的颜色控制线;A,B,C,D是地址线,共32行16个地址;CLK是时钟信号线;LAT是数据保存线;OE是显示使能线;
控制时序说明
首先通过A,B,C,D四根地址线选中两行,例如A=0,B=0,C=0,D=0,选中第0行和第16行,A=1,B=0,C=0,D=0,选中第1行和第17行,A=0,B=1,C=0,D=0,选中第2行和第8行……
地址选好后就开始传输颜色数据,这里就以A=1,B=0,C=0,D=0,选中第1行和第17行为例,现在选中了1和17行,然后我让R1=1,G1=0,B1=0,这样第1行的第1个点就是红色(因为只有R为1,G,B都是0),同时R2=0,G2=1,B2=0,这样第17行的第1个点就是绿色(因为只有G为1,R,B都是0),然后拉高CLK,再释放CLK就可以开始给1行和17行的第二个点传送颜色数据了,如此循环64次,第1行和17行的64个点便都写好了我们想要的颜色数据,然后接下来我们把LAT拉高然后释放就可以开始给下一个地址传数据,如此循环16次,屏幕的16个地址32行便都填充好了我们想要的颜色数据,这样就完成了一次屏幕刷新;
以上就是我个人对全彩单元板驱动的理解,有不正确的地方欢迎大家评论指出,我上面说的只能实现7种颜色的显示,真正理解之后就能明白要实现全彩显示屏幕一次刷新要扫描很多次,对单片机性能要求很高,但是也有绕过这个让普通的单片机也能实现全彩显示的办法,这是我在栈指针这位UP主的讲解下才知道的,这里附上栈指针UP主原话,能把复杂的事讲的如此简单明了,实在佩服
器件 | 类型 | 描述 | 数据手册 |
---|---|---|---|
TS-1092S-B3D2-G | 轻触开关 | 点击下载 | |
GCJ188R71E105KA01D | 贴片电容(MLCC) | 点击下载 | |
1206B106K160CT | 贴片电容(MLCC) | 点击下载 | |
GRM31C5C2J103JWA3L | 贴片电容(MLCC) | 点击下载 | |
GCM188R91E104KA37D | 贴片电容(MLCC) | 点击下载 | |
PJ-342E2-SMT | 音频连接器 | 点击下载 | |
KM2X8 | 螺丝 | 点击下载 | |
0201X473K100NT | 贴片电容(MLCC) | 点击下载 | |
GMI6050P-52db | 咪头/硅麦 | 点击下载 | |
CB2012T100K | 功率电感 | 精度:±10% 额定电流:190mA 直流电阻(内阻):700mΩ 电感值:10uH | 点击下载 |
ABE05K472JT | 贴片电阻 | 点击下载 | |
RTX051002DETP | 贴片电阻 | 点击下载 | |
SS-12F23-G040 | 滑动开关 | 点击下载 | |
R7FA2L1AB2DFL#AA0 | 单片机(MCU/MPU/SOC) | 点击下载 | |
U262-061N-4BVC10 | USB连接器 | 点击下载 | |
XL5532 | 运算放大器 | 点击下载 |
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld1”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeword1”及时沟通。
- 【中山大学校赛】便携式测温系统
- 使用 Microchip Technology 的 MIC5375-2.8YMT 的参考设计
- 【中国计量大学】电磁曲线炮毛翔 copy copy
- C8051F580DK,C8051F581 8051 MCU 工业应用开发系统
- LF50ABV 5V 极低压降稳压器的典型应用,带开关
- 使用 Cypress Semiconductor 的 MB3793-27D 的参考设计
- 3.3V 直流转直流单路输出电源
- 使用 MaxLinear, Inc 的 SP7606ER-L 的参考设计
- 具有 1.25% 参考和可调滞后的 MIC841HYMT 比较器的典型应用
- STC8G1K08最小系统板核心板