【RISC-V MCU CH32V103测评】+FC手柄+显示器+玩俄罗斯方块+已开源
本帖最后由 chongdongchen 于 2020-12-10 10:32 编辑之前用CH32V103在VGA显示器显示了彩带的滚动效果(https://bbs.21ic.com/icview-3048928-1-1.html)。
网友建议进一步升级,弄个游戏玩玩。
玩个彩带确实不够尽兴,所以打算实现这个目标,希望时间还来得及。目标:用800*600@60Hz的VGA时序驱动显示器,可以打印字符串、玩俄罗斯方块,并配上FC手柄。
目前已经实现了静态点阵图片的显示:
-------源码打包----------一起学习一起玩-----------------------
**** Hidden Message *****
硬件连接:
开发板 -> 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)
来个小更新:
介绍的再详细些(包括硬件及软件),这样大家就能参与进来,花样儿就会更多,兴许会鼓捣出一个新产品! 感谢LS建议:
大致说明一下驱动原理,想到一点说一点,欢迎大家探讨。首先也是最重要的是:如何产生正确的时序去驱动VGA接口的显示器:
这就要先了解行数据时序和帧数据时序:
行同步和帧同步,可以用TIM的PWM和中断实现,这个不是很难,之前的帖子已经上传了源码,驱动规格是1440*900@60Hz。
现在由于要实现显示字符串,所以必须要要深入一点,先看常见的刷新率:
可以看到数据频率是非常的高。
我选择的是800*600@60Hz,也需要40MHz,这对于我们这款单片机来说是非常高的,如果用翻转IO的方法肯定是不行的。
所以我现在就用到了SPI外设,配合DMA,这样就能实现了。
到这里为止,理论上已经没问题了,但其实单片机的RAM还不够,只有20K,800*600/8 = 60000。
所以只能降低分辨率了:400*300(400*300/8=15000),这是逻辑上的分辨率,送到显示器的还是800*600。
附上资料( VGA驱动与实现.pdf):
来了来了:
小视频不会弄,打包:
还有瑕疵难搞定:
1、不能实现DMA硬件定时触发,目前是在中断中软触发实现,影响点阵数据时序。
2、DMA和CPU不能同时操作RAM,导致点阵数据受干扰,图像质量变差。
好在可以玩游戏,工作之余放松一下,哈哈。
帮你把视频转成gif上传啦
单色的吗?好像有一些毛刺?
以前用定时器+DMA实现过一个VGA,然后发现处理的的触发频率受限 vsfopen 发表于 2020-12-10 14:01
单色的吗?好像有一些毛刺?
以前用定时器+DMA实现过一个VGA,然后发现处理的的触发频率受限 ...
是的,单色有毛刺。在5楼有分析。
我现在是用TIM+DMA+SPI实现的。 学习学习 不错,可以把颜色切换功能加上去,有空了来玩玩,先点个赞。 谢谢·分享! 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触发频率达不到要求,分辨率很低。 不错不错,学习。。。。 天意无罪 发表于 2020-12-11 09:13
不错,可以把颜色切换功能加上去,有空了来玩玩,先点个赞。
颜色能做到整屏或者整行切换,有空了你可以试试。 vsfopen 发表于 2020-12-11 11:43
单色的话,一般都是定时器触发SPI DMA。
我之前玩的时候,用定时器触发GPIO DMA做彩色的,不过触发频率要 ...
你的是牺牲了分辨率,但是得到了彩色。我和你刚好相反。
不过我现在这个单片机的DMA有点受限,实现不了定时器触发,因为配置DMA的时候,DMA必须处于关闭状态,而一旦再次使能DMA,它就开始传输了。 来灌下水、 这才是真正的玩出了水平,玩出了高度,坚决点赞!!!{:lol:}{:lol:}{:lol:}{:lol:}
老哥牛的,没想到VGA能这样玩 这个技术含量高 这玩的很高级