找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13612|回复: 20
打印 上一主题 下一主题
收起左侧

51单片机驱动TFT彩屏+摄像头+有实用意义的高帧率!原创发布!

  [复制链接]
跳转到指定楼层
楼主
      闲来无事逛某一个宝,赫然发现同尺寸的TFT小屏竟然比单色点阵屏还便宜,顿时萌发了尝试一下的念头,以前需要用到彩屏的时候通常都是选用现成的串口屏,使用串口收发下数据就搞定用户界面了,但近年来芯片张价潮波及到了几乎所有电子行业,原来选型时一百多的屏现在要近四百了,当然材料成本没涨那么多,奸商跟风涨价罢了。根据现有手头项目产品要求选定了一款2.4''彩屏,驱动ILI9341分辨率320*240,典型的烂大街规格不愁断货,立刻下单!不过考虑到通常TFT驱动对MCU的需求还是比较高的,如果套用现成方案例程搞个STM32(现在是奢侈品了)做驱动到也四平八稳,但是成本就不忍直视了,补充一下F1系列只有100脚以上的带FSMC接口,所以价格肯定会很感人!再说本来就是为了省钱才干的这事,咱必须不忘初心对吧。    用高射炮打蚊子不算本事,用弹弓打飞机才是水平,立刻着手查资料算时序,我就不信51搞不定TFT(是指基本流畅播放全屏动画,而不是慢吞吞刷出几个字来),一算才发现这玩意要求还挺高,平时常用的中颖系列主频最多20冒头,这速度来刷屏怕是要看着图片一条线往下跑了,虽然有些STM32开发板例程也是这个水平但咱自己对觉悟还是有要求的!^_^
      搞到这里有点头痛,想着不行就换MCU吧,无意间忽然想到电机控制MCU不是对速度要求挺高的嘛,于是就发现了这头怪兽— SH79F3213。32KB的FLASH、1.5KB的RAM、关键是有16KB的程序RAM,只要把前16K的CODE拷贝到里面就能以84M的主频的跑程序,芯片其它外围也挺丰富但我暂时用不到就不去管它了,没有硬件支持下刷屏幕MIPS才是王道!
      芯片选定开始电路方案设计,彩色图片的数据量对51来说非常可观的,一幅全屏的RGB565数据就是153KB,与用单色屏习惯把字库和小图片防在CODE区不同,这种应用必须外扩存储器了。你没猜错,我又选了烂大街的W25Q系列,便宜才是王道嘛,手头有现成的W25Q16先顶上用吧。这里要吐槽一下MCU硬件SPI口,最快只能8分频,都什么年代了还这么慢,现在SPI口的FLASH都支持100M以上了。好在内核跑得快,我用软件模拟还不行嘛,最终软件模拟的SPI口做到20个指令周期取一字节并放到总线,同样时间你硬件SPI三位还没有传完,在此替中颖汗颜一下。
      言归正传,  选P0、P4口做16位数据总线,因为这俩口排列规整方便布线,P2口给W25Q用(实际只用了6个PIN,为啥这样用可以想想),留了一个串口做图象文件下载和显示控制,其他控制IO就随便就近分配了。正好某配有免费打样券,PCB图画好就去做了。


  板子回来焊接器件没啥好说的,参照卖家的例程做个驱动初始化,自己写了画点和字库显示文字的程序,文字显示很快是预料中,因为前景、背景色是相对固定两色刷就完了,有些卖家例程以单色刷屏速度吹嘘就更是糊弄人民群众了,这个总线数据都不用变拼命刷WR线就行了。





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏14 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:972853 发表于 2021-10-23 21:32 | 只看该作者
  重点到了!其实搞过TFT的(用开发板移植一下例程在我看来不能算搞过)都知道,刷图象速度的瓶颈是在取数据而不在刷总线,即使你用STM32,用上了DMA、FSMC限制你速度的依然是SPI总线上的存储器,前面提到了我用20个指令周期取到一字节数据并把它放到总线上,这样16位总线就需要40周期,再加上8080口的控制和循环指令,整屏刷下来平均51-52周期/像素,换算成刷新率大约21FPS,这个速度基本可以满足一般的工业产品显示需要了。当然最终产品还会有些中断程序的干扰,但做到18FPS以上应该没有任何难度。https://v.youku.com/v_show/id_XNTgxMDkwNzE3Mg==.html?spm=a2hbt.13141534.1_2.d_4&scm=20140719.manual.114462.video_XNTgxMDkwNzE3Mg==

附上刷图片的视频,虽然有20FPS左右但画面切换时撕裂感还是明显的,一是屏硬件没有接出TE脚不能同步,二是帧率还是低了些,理论上如果有ILI9341帧率的一半配合同步刷频就可以完全无感地切换了。
下面是动态图象的效果
https://v.youku.com/v_show/id_XNTgxMzQ5MDE2OA==.html?spm=a2hbt.13141534.1_2.d_3&scm=20140719.manual.114461.video_XNTgxMzQ5MDE2OA==

    因为存储容量有限,所以只有十二幅画面,不过基本还算是播放流畅了。为了能进一步提高帧率,此时脑子里已经在构思第二版了......



回复

使用道具 举报

板凳
ID:972853 发表于 2021-10-23 21:39 | 只看该作者
    第二版的做好了,这几天焊接调试忙得不亦乐乎,今晚终于基本成型了,虽然最终完全按上篇预告的内容完成目标甚至刷新率还远超预计,但期间也遇见了各种奇怪问题,现将过程和心得与大家共享。
    老规矩,先上裸.................板!第一版因为要验证用595同时驱动128颗LED,所以板子做得略大,这次版本纯粹奔着验证图形性能去的,所以又紧凑了些。


    焊接完毕,用第一版的程序想稍做修改把屏先搞亮起来,结果就卡在这了,任你怎么折腾屏幕都是没有反应,因为这次使用了8080II的8位总线方式驱动(第一版是16位方式),设计硬件时还特意跟某一个宝屏幕卖家沟通确认过想必应该没啥问题了,但屏幕就是没动静读ID也没反应,一度我都怀疑新买的这个屏是不是坏的。


下面是卖家提供的原理图局部,图中的11脚虽然标着NC但每一个毛孔都散发着IM0的气息,画板前与卖家沟通也验证了这个想法。


这一卡就是近一天的时间,不得以我把粘好的屏又从PCB上翘下来,干了快30年的老电工开始怀疑自己的焊接是不是有问题,这也太打击人了! ^_^
既然把屏翘下来了,顺便仔细检查一下FPC是不是有折弯损伤吧,这一检查就发现问题了,下面是FPC的照片,看看哪个小机灵鬼能发现问题。


电阻R1、R2字符旁边多了8和16两个数字,莫非.....难道.....?插上烙铁立刻开动把零欧电阻换到8那边去,再上电瞬间图象它出来了,这时内心激动程度丝毫不亚于第一版屏幕出图象的时候,并且有种想把卖家ko的冲动!实践证明这款屏的IM0端口根本没有引出,而是直接在FPC上完成不同通讯接口的设置。


回复

使用道具 举报

地板
ID:972853 发表于 2021-10-23 22:10 | 只看该作者
屏幕亮了就好办,字符显示一切正常,但显示图片又出问题了,屏幕是花的!首先就怀疑自己写的PC端图片处理程序和BIN文件合并、拆分程序的问题,可检查了半天没问题啊,用示波器一看FLASH芯片只有一个脚在出数据可我用的是4I/O模式,难道芯片QE=0?(JV版本的应该出厂QE=1),找来几片同次买的芯片上编程器读状态字节,果然有部分QE=0的,甚至还有几片被烧了加密位,看来是又遇见奸商了,说是全新原装但就算是用拆机货也要正规点吧,好歹恢复到出厂状态算是拆机货的良心和底线了吧!也怪自己贪便宜,省钱办大事才是硬道理!
修改过QE状态后4I/O数据可以源源不断地输出了,按即定思路修改程序,一切顺利达到了42FPS刷新率,接下来继续优化刷屏循环,一条条指令一个个周期的抠,最终达到了71FPS的水平,连我自己也有些意外,当然此时MCU除了刷屏基本干不了其它大事了,下面是实测FLASH的片选引脚波形


上图中一个低电平周期刷一帧图象时间大约是14mS,每秒10帧图象,也就是每幅图象后有八十多毫秒可以做其它任何事,当然快速的即时性中断任务也可以随时执行,包括在刷屏期间对刷屏也基本没影响。这也验证了速度就是王道,什么同步也不用,刷屏期间中断也没事,只要你够快对显示就没有肉眼可见的影响。这次的动态图视频就不发了,大家也不想看广告对吧^_^

回复

使用道具 举报

5#
ID:972853 发表于 2021-10-23 22:19 | 只看该作者
为什么看不见自己的帖子?晕了
回复

使用道具 举报

6#
ID:972853 发表于 2021-10-23 23:11 | 只看该作者
竟然被吃掉了一贴,码字实在是辛苦啊!那就过程不表直接来结果吧
第二版准备动手的时候已经计划要接摄像头了,网上的主流说法是51接摄像头必须要用FIFO存下以后慢慢去读,就算STM32F1系列也推荐用带FIFO的,直接驱动速度不够,刷新率只有几fps甚至不到1fps。但咱就是明知山有虎偏向虎山行的主,经过充分计算和评估后认定可以做到10帧以上!百密一疏的是我简单认为摄像头的水平方向是排针方向,结果就是摄像头与显示图象差了90度,作为技术验证的东西应该属于可接受缺陷吧。
你在看自己的波型,看波形的人在背后看你
选用了6.6包邮(符合我的风格)的OV7670摄像头,使用直接驱动的方式进行图象采集,摄像头的时钟由MCU提供,平均大约在10M多一点满足摄像头标称工作最低频率要求。直接驱动摄像头的关键点在时钟的稳定和时序,而时序的正确又很大程度上取决于时钟的稳定,为了综合考虑各项要求在能够正确出图后我又花了两天时间细调时序和时钟占空比,最终性能确定在14.6fps,其实可以做到接近18fps但稳定性会有明显下降,时序容易出错。



这是帧同步信号,最终性能定格在14.6Hz
拍摄一段小猪佩奇看看效果
https://v.youku.com/v_show/id_XNTgxNTAwMDIzMg==.html

回复

使用道具 举报

7#
ID:972853 发表于 2021-10-23 23:51 | 只看该作者
总结篇
    这次的两版技术验证性制作充分证明了现在高性能的51内核可以有效驱动小型TFT和直接驱动低分辨率摄像头,如果用STC的新款产品性能应该会更好一些,因为中颖这款MCU虽然主频高的变态但受制于中颖内核比较老,多周期指令还是很多的,所以最终执行效率反而不如其它新厂主频四十M以上的产品。其实我本来是打算用STC做的,但STC的端口规划太凌乱了而且仿真方面是弱项所以还是选了中颖的MCU,毕竟用了十几年轻车熟路。
    虽然最终性能指标相当突出但也还是为了驱动而驱动(主要是指摄像头方面),51内核的主流配置对于图象数据量来说太可怜了,只能做个数据的搬运工,基本不用想做什么处理了,从内核运算来看还是能够挤出点时间做简单处理的无奈RAM太小,即使做完二值化后再存储也要十几K容量了,对于51内核的MCU基本找不到符合要求的。
    对于中低分辨率TFT屏幕现在的高性能51是可以轻松驱动的,这完全可以进一步应用在产品中。
所有程序都是汇编语言写的,这里就不公开了,有兴趣探讨的朋友可以就技术细节展开讨论。
回复

使用道具 举报

8#
ID:884042 发表于 2021-10-31 11:54 | 只看该作者
TFT驱动都用汇编,牛啊!为你点赞!
回复

使用道具 举报

9#
ID:88256 发表于 2021-10-31 13:20 | 只看该作者
看到此帖我只能膜拜,真的是牛啊!
回复

使用道具 举报

10#
ID:942056 发表于 2022-3-4 06:45 来自手机 | 只看该作者
找到组织了,我想利用缓存来全屏显示,可以指教一下不
回复

使用道具 举报

11#
ID:1011477 发表于 2022-3-19 11:01 | 只看该作者
我用51也是汇编编程,四十年了,轻车熟路。
回复

使用道具 举报

12#
ID:1006444 发表于 2022-3-24 16:28 | 只看该作者
还以为是我也能学的事,,往后一看,,这调试我都搞不定
回复

使用道具 举报

13#
ID:1025635 发表于 2022-6-25 10:50 | 只看该作者
工程有点大,一般爱好者难于实施
回复

使用道具 举报

14#
ID:1026512 发表于 2022-6-26 11:44 | 只看该作者
正想搞个便宜的视频采集方案,感谢楼主分享
回复

使用道具 举报

15#
ID:983641 发表于 2022-7-7 11:37 | 只看该作者
资料开源吗?
回复

使用道具 举报

16#
ID:886773 发表于 2022-12-29 18:15 | 只看该作者
我用STC16位驱动LCD,感觉比SPI快不了多少,感觉瓶颈还是在W25Q读取速度,,,楼主能分享下思路不?
回复

使用道具 举报

17#
ID:93626 发表于 2023-2-6 08:26 | 只看该作者
求资料开源
回复

使用道具 举报

18#
ID:93341 发表于 2023-2-7 10:09 | 只看该作者
老江湖不错,值得学习。
回复

使用道具 举报

19#
ID:697751 发表于 2023-3-15 13:01 来自手机 | 只看该作者
楼主好,能不能分享一下你这个原理图哈,我想学习一下。感激不尽!
回复

使用道具 举报

20#
ID:1064915 发表于 2023-8-30 09:25 | 只看该作者
原来是大师级别的
回复

使用道具 举报

21#
ID:108361 发表于 2023-10-25 17:17 | 只看该作者
51刷屏,不用汇编做基本难做到流畅,我曾经在C8051F340上跑100M主频刷摄像头+屏,容易出现画面出错,稳定性还是不行,但是帧率还可以,要我用汇编写一遍,那是万万干不来了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表