查看: 163|回复: 2

[原创] 【Fireduino】改造屏幕续--两种方式刷新率对比

[复制链接]

142

主题

2

好友

5626

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 1153 天

    连续签到: 17 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 发帖机器勋章 在线之王勋章 论坛骨干勋章

    发表于 2016-12-21 16:30:37 |显示全部楼层


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

    1.png

        时间取自Fireduino本身,在刷屏前保存开机时长,刷屏后相减,就是刷屏的时间了。
    一、第一种传统连接方式:

    2.jpg

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

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

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

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

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

    6.jpg

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

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

    8.png

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

    9.jpg

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

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

        后来查了下手册,即便是采用第二种方式,其实还是基于IO口的操作,速度依然不能达到最优。RKNanoD本身带了 LCD控制器,最好的方法是调用CPU本身的硬件操作。比过比较麻烦,还没有开始动手。



    回复

    使用道具 举报

    150

    主题

    7

    好友

    2111

    积分

    超级版主

    Rank: 8Rank: 8

  • TA的每日心情
    开心
    2017-5-11 10:52
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-12-21 17:51:49 |显示全部楼层
    谢谢楼主的分享
    回复

    使用道具 举报

    5

    主题

    1

    好友

    1209

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情

    前天 08:55
  • 签到天数: 157 天

    连续签到: 5 天

    [LV.7]常住居民III

    发表于 2016-12-21 17:56:58 |显示全部楼层
    谢谢分享                    
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-5-28 14:44 , Processed in 0.101383 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部