[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评】+FC手柄+显示器+玩俄罗斯方块+已开源

[复制链接]
 楼主| chongdongchen 发表于 2020-11-27 14:46 | 显示全部楼层 |阅读模式
本帖最后由 chongdongchen 于 2020-12-10 10:32 编辑

之前用CH32V103在VGA显示器显示了彩带的滚动效果(https://bbs.21ic.com/icview-3048928-1-1.html)。
网友建议进一步升级,弄个游戏玩玩。
玩个彩带确实不够尽兴,所以打算实现这个目标,希望时间还来得及。目标:用800*600@60Hz的VGA时序驱动显示器,可以打印字符串、玩俄罗斯方块,并配上FC手柄。
目前已经实现了静态点阵图片的显示:
1.jpg

-------源码打包----------一起学习一起玩-----------------------
游客,如果您要查看本帖隐藏内容请回复

硬件连接:
开发板        ->        VGA(DB15)
GND        ->        PIN5、PIN6、PIN7、PIN8、PIN10
PA8        ->        PIN13(串联270欧电阻)
PA3        ->        PIN14(串联270欧电阻)
PA7        ->        PIN2  (串联270欧电阻)

开发板        ->        FC手柄(DB9)
GND        ->        GND(PIN8)
3.3V        ->        POWER(PIN6)
PB3        ->        CLOCK(PIN4)
PB5        ->        LATCH(PIN3)
PB7        ->        DATA(PIN2)


 楼主| chongdongchen 发表于 2020-11-30 08:39 | 显示全部楼层
来个小更新:
150585fc43f43d8a75.png
jinglixixi 发表于 2020-11-30 09:29 | 显示全部楼层
介绍的再详细些(包括硬件及软件),这样大家就能参与进来,花样儿就会更多,兴许会鼓捣出一个新产品!
 楼主| chongdongchen 发表于 2020-11-30 10:14 | 显示全部楼层
感谢LS建议:
大致说明一下驱动原理,想到一点说一点,欢迎大家探讨。首先也是最重要的是:如何产生正确的时序去驱动VGA接口的显示器:
这就要先了解行数据时序和帧数据时序:
942845fc4519a963a1.png
590175fc451b8d0b29.png
行同步和帧同步,可以用TIM的PWM和中断实现,这个不是很难,之前的帖子已经上传了源码,驱动规格是1440*900@60Hz。
现在由于要实现显示字符串,所以必须要要深入一点,先看常见的刷新率:
788025fc451ce2c9e8.png
可以看到数据频率是非常的高。
我选择的是800*600@60Hz,也需要40MHz,这对于我们这款单片机来说是非常高的,如果用翻转IO的方法肯定是不行的。
所以我现在就用到了SPI外设,配合DMA,这样就能实现了。
到这里为止,理论上已经没问题了,但其实单片机的RAM还不够,只有20K,800*600/8 = 60000。
所以只能降低分辨率了:400*300(400*300/8=15000),这是逻辑上的分辨率,送到显示器的还是800*600。
附上资料( VGA驱动与实现.pdf):
VGA驱动与实现.pdf (865.34 KB, 下载次数: 75)

 楼主| chongdongchen 发表于 2020-12-10 10:05 | 显示全部楼层
来了来了:
d851271c2c65cc517774bafa9730426.jpg
小视频不会弄,打包:
f7ebcba4a91e12aba8ecdc329c2db732.rar (2.8 MB, 下载次数: 51)
还有瑕疵难搞定:
1、不能实现DMA硬件定时触发,目前是在中断中软触发实现,影响点阵数据时序。
2、DMA和CPU不能同时操作RAM,导致点阵数据受干扰,图像质量变差。

好在可以玩游戏,工作之余放松一下,哈哈。
WCHTech2 发表于 2020-12-10 11:46 | 显示全部楼层
Video_20201210_113517_833.gif
帮你把视频转成gif上传啦
vsfopen 发表于 2020-12-10 14:01 | 显示全部楼层
单色的吗?好像有一些毛刺?
以前用定时器+DMA实现过一个VGA,然后发现处理的的触发频率受限
 楼主| chongdongchen 发表于 2020-12-10 15:40 | 显示全部楼层
vsfopen 发表于 2020-12-10 14:01
单色的吗?好像有一些毛刺?
以前用定时器+DMA实现过一个VGA,然后发现处理的的触发频率受限 ...

是的,单色有毛刺。在5楼有分析。
我现在是用TIM+DMA+SPI实现的。
zhengfish 发表于 2020-12-10 16:02 | 显示全部楼层
学习学习
天意无罪 发表于 2020-12-11 09:13 | 显示全部楼层
不错,可以把颜色切换功能加上去,有空了来玩玩,先点个赞。
zhdm 发表于 2020-12-11 10:26 | 显示全部楼层
谢谢·分享!
vsfopen 发表于 2020-12-11 11:43 | 显示全部楼层
chongdongchen 发表于 2020-12-10 15:40
是的,单色有毛刺。在5楼有分析。
我现在是用TIM+DMA+SPI实现的。

单色的话,一般都是定时器触发SPI DMA。
我之前玩的时候,用定时器触发GPIO DMA做彩色的,不过触发频率要求就高很多了。
https://bbs.21ic.com/icview-2940376-1-1.html

结果,MCU的DMA触发频率达不到要求,分辨率很低。
muxb 发表于 2020-12-11 15:10 | 显示全部楼层
不错不错,学习。。。。
 楼主| chongdongchen 发表于 2020-12-12 08:31 | 显示全部楼层
天意无罪 发表于 2020-12-11 09:13
不错,可以把颜色切换功能加上去,有空了来玩玩,先点个赞。

颜色能做到整屏或者整行切换,有空了你可以试试。
 楼主| chongdongchen 发表于 2020-12-12 08:40 | 显示全部楼层
vsfopen 发表于 2020-12-11 11:43
单色的话,一般都是定时器触发SPI DMA。
我之前玩的时候,用定时器触发GPIO DMA做彩色的,不过触发频率要 ...

你的是牺牲了分辨率,但是得到了彩色。我和你刚好相反。
不过我现在这个单片机的DMA有点受限,实现不了定时器触发,因为配置DMA的时候,DMA必须处于关闭状态,而一旦再次使能DMA,它就开始传输了。
252tp 发表于 2020-12-12 12:30 | 显示全部楼层
来灌下水、
xdqfc 发表于 2020-12-13 11:05 | 显示全部楼层
这才是真正的玩出了水平,玩出了高度,坚决点赞!!!
nvjwiciw659 发表于 2020-12-13 17:41 | 显示全部楼层
老哥牛的,没想到VGA能这样玩
lisingch 发表于 2021-2-25 23:00 | 显示全部楼层
这个技术含量高
wsnsyy 发表于 2021-2-26 10:57 | 显示全部楼层
这玩的很高级
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

1238

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部

55

主题

1238

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部