|
本帖最后由 alszy 于 2019-6-8 14:49 编辑
这是5元打样的PCB,包含16*32=512个0402贴片LED:
使用STC8单片机来驱动这512个灯。
因为LED灯板上下两层都需要走线,无法放置单片机,所以又单独画了了一块单片机板:
两块板之间通过焊点连接,在每个焊点上加适量锡膏,拼合之后用热风枪吹熔,对应的两个焊点就焊在一起了:
这是焊好之后的:
两块板叠在一起,变成了“四层板”(4层走线):
这是所用的LED,暖白色:
整盘购买:
和手指对比:
背面有绿色的负极标记,左边为负:
放在镜子上,利用镜子观察背面的标记,然后把所有灯的负极都朝左,避免焊反:
使用自制的热床加热PCB,让锡膏更好地粘在PCB上:
用注射器粘少量锡膏,点在每一个焊盘上。
由于高温下锡膏的流动性更好,所以PCB要适当加热:
部分焊点已经涂了锡膏:
放大看看,灰色凸起的就是锡膏,它加热后会熔化成焊锡:
全部512个灯都焊完了,花了两个下午,整个点阵只比手指头宽一点:
背面的STC8A8K单片机,因为对STM32应用不够熟练,就用了STC8
焊接背面所有元件,左边的6脚元件是双三极管,做行线驱动,列线直接由单片机IO驱动。右下是5V输出DC-DC稳压器,兼容2.5~5.5V输入电压:
接上电看看,点阵亮了,此时还没下程序,运行的是单片机出厂自带程序:
简单介绍驱动程序,对程序不感兴趣的话,可以直接看后面的显示效果图。
在单片机的扩展RAM区定义一个二维数组用作显存,大小为64bytes,总的位大小为512bit。
STC8具有8kb的扩展RAM(XDATA),占空间比较大的数组或变量可以放在这里。
pdata是扩展RAM的低256byte,经过反编译发现,它寻址要比xdata快得多,所以大家以后使用扩展RAM的时候,尽量把不超过256byte的变量定义成pdata。
点阵刷新程序,每20us执行一次,执行耗时5us,CPU占用率约25%。如果刷新频率降低,会有闪烁的现象。
实际上显示数据是在别的MCU处理,然后用I2C接口发过来的,本点阵的MCU只负责显示刷新,所以CPU占用率不重要。
首先关所有LED,进行消隐,然后将显存中的数据加载到列线的IO口,再给行线通电,然后把控制行线的变量值切换到下一行,退出中断:
主函数:using 1指定了中断服务函数所用的寄存器(R0~R7)组为第1组(主函数用第0组),避免压栈和出栈浪费大量时间
下载程序,成功显示了喵喵喵:
IO采用弱上拉方式,每个LED驱动电流0.2mA
点阵(含单片机)耗电量仅为12mA:
中间的点阵是以前自制的8*16=128个灯,分辨率只有现在做的1/4,这个也发过帖子http://bbs.mydigit.cn/read.php?tid=2339193
最下面是成品8*8点阵,体积大分辨率还低:
后续这个点阵会装在自制的蓝牙音箱上,用于状态显示和FFT音频频谱显示。
总成本:512个LED 13元,STC8A8K单片机约5元,PCB是拼板,成本1元,共计约20元,但时间成本就很高了
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|