矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 5024|回复: 16

自己写彩屏驱动

[复制链接]
     
发表于 2021-3-14 14:17:09 | 显示全部楼层 |阅读模式
本帖最后由 iffi123 于 2021-3-14 15:33 编辑

之前玩过黑白点阵屏128*64, 写驱动比较简单,很容易就跑起来, 还没玩过彩屏,心理挂念痒痒的,

于是近期就买了一块,开始打算买480*320, 3.5寸, 如果平时做个加强的显示,感觉偏大了,要配个大板子才协调, 最后选中2.4寸320*240, 不大不小正好,带电阻触摸

芯片是常见的ILI9341
1.jpg

2.jpg

厂家提供了驱动,我只是用来测试屏的好坏,驱动我还是想自己写, 玩底层驱动蛮有意思和挑战的,能加深对接口时序的了解,对玩单片机还是有好处的

说干就干,9341的手册页码多,但是大部分是命令解释,实际上串口部分不多,看懂大致原理就好,包括读写时序和色彩原理

串口用虽然IO模拟也能工作,尤其数据刷新不频繁时;  因为我要测试全屏图片, 所以选硬件SPI, 外加DMA(上次玩过SPI+DMA+中断组合,所以这次比较顺利), 字符/数字显示先延后,先弄全屏图片,几番调试,总算显示出来

lcd.jpg

实际显示效果比拍照的好多了,包括色彩,浓郁, 不过便宜的屏, 可视角度比较小,尤其垂直的角度更小, 玩玩还凑合
但是全屏320*240, 每个象素占用2字节,565的RGB结构,这样共有65k色, 占据153K空间; 虽然还能支持18位, 666结构,也就是1象素3字节,需要230K,   这样搞,我那F303CCT6总共才256K, 不压缩的图片最多放一张


     
发表于 2021-3-14 14:32:42 | 显示全部楼层
带SD卡的呢,可以装字库
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-14 15:15:21 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-14 15:31 编辑
my14go 发表于 2021-3-14 14:34
LCD1602/2004这两种轻车熟路随便玩,汇编语言和正在初学的c语言都能玩转它,12864最近才买,用别人的例程能 ...


接下来我最想知道全屏刷新率究竟能到多少? (我居然最先想到的是这个疑问

手册上有一个串口时序,上面标的时钟周期,写最小100ns, 读150ns, 换算过来,写时钟不超过10MHz, STM32最低的SPI都有18M, SPI时钟分频是按2的幂来进行,比如系统时钟72M(以我用的F303为例), 它的SPI可以有36M, 18M, 9M, ...如果严格按手册,只能用到9MHz, 那么刷新一屏的数据153600byte(16位色彩模式下)需要0.14s, 如果不考虑屏内部的显示延迟, 刷新率不到8fps, 可怜见的

实际测试我把SPI分配比设置2(最小),也就是36M时钟, 这个已经超过标称的SPI速率,也超过LCD的参数, 但实际上工作的很好,厂家指标还是比较保守, 同样计算出来理论刷新率接近30。

在程序里加入测试代码, 用定时器产生准确的定时, 主程序不断循环刷全屏图像,并累加次数, 同时判断1s定时是否结束,设置断点,该次数就是每秒刷新的次数。 结果是24fps, 比计算值低些,后来把这个数字直接显示在屏幕上。

对于全屏图片,使用DMA比逐个发送,从图像显示时间目测感觉更快些, 如果只是局部少量显示更新,速度优势体现不出来,还不如逐个手动发送

lcd2.jpg

风光效果,看起来比较差(照片摩尔纹比较多),实际还可以
123.jpg

触摸功能以后再试,目前还是先把常用的显示功能实现



回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-14 15:15:38 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-14 15:25 编辑
JuncoJet 发表于 2021-3-14 14:32
带SD卡的呢,可以装字库


大卡,不大方便, 要是tf卡就好了
回复 支持 反对

使用道具 举报

     
发表于 2021-3-14 16:18:48 | 显示全部楼层
请教一下:
如果做个类似示波器的画图程序,需要多大的内存
需要内存中映射320*240点*2字节的缓冲区吗?
怎么实现比较好?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-14 17:15:51 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-14 17:20 编辑
peiguoqing 发表于 2021-3-14 16:18
请教一下:
如果做个类似示波器的画图程序,需要多大的内存
需要内存中映射320*240点*2字节的缓冲区吗?
...


缓冲区内容用定时+DMA来传给LCD比较好

实际上波形区域不会全屏,比如300*200, 那么就只要更新这个区域就可以,减少传送数据量,其他区域显示内容即使有变化(比如x,y的量程),更新频率也不会高
回复 支持 反对

使用道具 举报

     
发表于 2021-3-15 03:21:21 来自手机 | 显示全部楼层
SDR搞起来了吗,我的基本画完了。不过感觉模拟是个巨坑。可能会改成二次变频
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-15 07:56:10 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-15 09:17 编辑
雨中狐狸 发表于 2021-3-15 03:21
SDR搞起来了吗,我的基本画完了。不过感觉模拟是个巨坑。可能会改成二次变频


还没呢,因为彩屏也是它的一部分,所以要先弄好,下一步才会具体去做,

我倒不着急,赶工容易疏忽,象一些器件选择都需要一个寻找对比的过程,这2天从立创支持SKYWORKS宽频模拟开关以及1ps低抖动的晶振(ADC用)
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-15 11:09:31 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-15 11:10 编辑
iffi123 发表于 2021-3-14 15:15
接下来我最想知道全屏刷新率究竟能到多少? (我居然最先想到的是这个疑问)

手册上有一个串口时序 ...


昨天在写字符显示,程序也在调整,早上重做刷新率测试, 每隔1s更新1次数字,结果在28和29之间跳动,接近计算值,这样就正常了。

1.jpg




回复 支持 反对

使用道具 举报

     
发表于 2021-3-15 12:26:16 | 显示全部楼层
还是彩屏好,像素多字符显示更美观
回复 支持 反对

使用道具 举报

     
发表于 2021-3-15 13:01:56 | 显示全部楼层
iffi123 发表于 2021-3-15 07:56
还没呢,因为彩屏也是它的一部分,所以要先弄好,下一步才会具体去做,

我倒不着急,赶工容易疏忽 ...

啥都用好器件,那成本是接受不了的。话说你用的到底啥adc,还保密,ad6654功耗太大,也早停产了,货源都是问题,不想用了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-15 14:27:12 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-15 14:28 编辑
雨中狐狸 发表于 2021-3-15 13:01
啥都用好器件,那成本是接受不了的。话说你用的到底啥adc,还保密,ad6654功耗太大,也早停产了,货源都 ...


这款芯片其实不错,就是BGA难搞,其实论性能,大厂14bit ADC随便一款都能胜任
回复 支持 反对

使用道具 举报

     
发表于 2021-3-15 15:12:09 | 显示全部楼层
iffi123 发表于 2021-3-15 14:27
这款芯片其实不错,就是BGA难搞,其实论性能,大厂14bit ADC随便一款都能胜任

我当然知道,就是想搞专用芯片,不用FPGA啊
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2021-3-21 09:30:24 | 显示全部楼层
本帖最后由 iffi123 于 2021-3-21 09:51 编辑

修正之前程序的一些小bug后,只要写象素通过后,其他的就不难了,比如用的更多的字符显示

分别测试ascii码8X16, 10X20, 12X24, 16X29, 支持任意宽/高的字模

顺便也试了中文24X31字符,  及简单画线,填充

11.png
回复 支持 反对

使用道具 举报

     
发表于 2021-3-21 10:02:04 | 显示全部楼层
用并口彩屏快很多。
我原来用9341做了个简单示波器,STM32F103的,忘了是RCT6还是RB了,原来也发过帖子。不过懒得去翻了,发帖后又优化了一下程序,测波形加显示能做到72帧。但是那个一般都是黑白显示,除了波形那条线带颜色。
要是显示图片的话要慢很多,我开机界面弄个Windows XP的启动界面,不是GIF,而是把GIF分解成单张的图片,从FLASH读取然后显示。没测帧数,不过不仔细看的话,看不出在刷屏。稍微仔细点能看出来,应该有40帧了。
9325好像还快一点,不过9325现在好像停产了。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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