查看: 1326|回复: 0

基于瑞萨MCU频谱灯

[复制链接]

93

主题

136

帖子

8万

积分

管理员

11111

Rank: 9Rank: 9Rank: 9

积分
84460
QQ
发表于 2022-5-23 09:46:51 | 显示全部楼层 |阅读模式
RA MCU&立创EDA的训练营活动已经落下帷幕,其中有不少优秀的开源项目,让我们一起来看看小伙伴们一些优秀的作品吧
基于瑞萨MCU频谱灯
开源作者:LSJT395

简介:
这是一个基于瑞萨R7FA2L1AB2DFL单片机做的一个音乐频谱灯,屏幕用的是P4全彩单元板,喜欢玩点阵屏的朋友肯定会喜欢上这种“超大号点阵屏”。

硬件说明:
主控: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事件连接器连接,用ELC效果会更好

快速傅里叶变换
原本计划用256点采样,但是实测运算太慢,不得不采用128点才勉强能用(我怀疑是我e2 Studio配置错了,导致单片机运行速率低的离谱),fft运算用的是江科大自化协UP写的fft.c源码。

原理图:


效果图片:



工程详细内容及项目开源地址:
https://oshwhub.com/lsjt395/ji-yu-rui-samcu-pin-pu-deng

更多优秀开源作品:
https://oshwhub.com/recommend/LC&RAMCU

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 93帖子:136精华:9

lugl

主题: 52帖子:150精华:1

xujiwei263

主题: 18帖子:86精华:0

Juggernaut

主题: 12帖子:118精华:0

books咦

主题: 11帖子:11精华:2
快速回复 返回顶部 返回列表