Firefly开源社区

标题: 【Fireduino】改造屏幕续--两种方式刷新率对比 [打印本页]

作者: smoker    时间: 2016-12-26 12:01
标题: 【Fireduino】改造屏幕续--两种方式刷新率对比

在写第一篇的时候提到过,由于没有官方屏幕,只得自己改造一个以前在Arduino使用的屏幕。但是因为引脚的关系,8位并行数据不能一次性输出,从而导致刷新速度很慢。通过对Fireduino的熟悉后,改进了连接方式和代码,最大程度地接近官方屏幕,测试一下比以前能够提高多少。

    话不多说,首先是入口函数,就是对屏幕的初始化,然后对清屏函数计时。

    时间取自Fireduino本身,在刷屏前保存开机时长,刷屏后相减,就是刷屏的时间了。

一、第一种传统连接方式:

    按照标准的Arduino接口方式连接,为了方便比较,所有脚都用线连接。

    引脚的初始化函数,最最常用的那种,为每一个引脚都操作一遍。

    最核心的部分,本应该是8位并行输出的数据,分别执行了8条语句才能完成,严重的影响了效率。

    编译、烧写、运行,得到的结果是2602毫秒。其实测了多次为了取平均值,发现除了一次2603毫秒外,其他一直稳定2602毫秒,取一张有代表性的图来说明。2.6秒才能刷完一次屏幕,可以说是惨不忍睹。


二、第二种官方提供的LCD数据接口方式:

    完全变了,都集中在这一部分。接口图显示,这里是LCD数据的0~7脚,按顺序插好。

    初始化的程序也变了,首先根据D0的引脚获取到Port号,然后再根据这个Port获取到方向寄存器和输出寄存器,以便后续操作。注释掉的部分和前面的代码是完全一样的,用哪种都行。不过为了便于移植,还是采取了前面的方式。

    获取到寄存器后,对寄存器赋值,一次性将这8个口设置为输出。

    最关键的地方,8位数据并行输出,一次性赋给屏幕,通过WR提交。

    再次烧写,看看结果。

    639毫秒,比刚才的2602毫秒快了不少,提高了4倍有余,但是比我设想的7~8倍还是有差距。


    受制于接口的设计,只能采用8位的方式使得显示速度大打折扣,当然也许和显示屏的主控IC及初始化代码有关,如果再经过深入优化后或许能够再提高一些。不知道官方的屏幕速度能有多快,希望能比我这个快很多,这样显示各种内容尤其是动态部分才会更加顺畅。转自tjcfeng爱版网的帖子,也许是他没时间吧,帮他转一下,不谢我叫雷锋


作者: 暴走的阿Sai    时间: 2016-12-26 14:45
好贴~支持




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1