chongdongchen 发表于 2020-11-27 14:46

【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)


chongdongchen 发表于 2020-11-30 08:39

来个小更新:

jinglixixi 发表于 2020-11-30 09:29

介绍的再详细些(包括硬件及软件),这样大家就能参与进来,花样儿就会更多,兴许会鼓捣出一个新产品!

chongdongchen 发表于 2020-11-30 10:14

感谢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):


chongdongchen 发表于 2020-12-10 10:05

来了来了:

小视频不会弄,打包:

还有瑕疵难搞定:
1、不能实现DMA硬件定时触发,目前是在中断中软触发实现,影响点阵数据时序。
2、DMA和CPU不能同时操作RAM,导致点阵数据受干扰,图像质量变差。

好在可以玩游戏,工作之余放松一下,哈哈。

WCHTech2 发表于 2020-12-10 11:46


帮你把视频转成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

这才是真正的玩出了水平,玩出了高度,坚决点赞!!!{:lol:}{:lol:}{:lol:}{:lol:}

nvjwiciw659 发表于 2020-12-13 17:41

老哥牛的,没想到VGA能这样玩

lisingch 发表于 2021-2-25 23:00

这个技术含量高

wsnsyy 发表于 2021-2-26 10:57

这玩的很高级
页: [1] 2 3 4 5 6
查看完整版本: 【RISC-V MCU CH32V103测评】+FC手柄+显示器+玩俄罗斯方块+已开源