huangxuejia-292 发表于 2018-6-2 17:36:10

TFT LCD 刷屏闪现白条(ILI9341)

背景:
使用2.8寸LCD做图片功能,驱动是9341。
在做速度优化时,发现一个怪异问题:
如果每次计算一个像素后,就发送到屏幕,没有问题。
代码如下,这个是发送一行数据的代码,外部还有一个for循环控制多少行:
for(i=0; i < xlen; i++)
                    {
                            /*3个字节1个像素,要进行对U16的转换
                                                rgb565
                                                #define BLUE                0x001F
                                                #define GREEN                0x07E0
                                                #define RED                0xF800
                                        */
                                        b = pdata;
                                        g = pdata;
                                        r = pdata;
                                       
                                        r = ((r<<8)&0xf800);
                                        g = ((g<<3)&0x07e0);
                                        b = ((b>>3)&0x001f);
                                        *(pcc+i) = r+g+b;

                                        /*得到一个像素就发送到LCD*/
                                        *LcdData = *(pcc+i);
                    }

如果改为整理好一行数据后再一次发送,LCD就闪现白条,只是刷新过程出现,一屏刷新完成后,图片是正常的。
刷屏是一行一行刷,白条就出现在列方向上,出现位置随机,可能出现多条。
代码如下:
for(i=0; i < xlen; i++)
                    {
                            /*3个字节1个像素,要进行对U16的转换
                                                rgb565
                                                #define BLUE                0x001F
                                                #define GREEN                0x07E0
                                                #define RED                0xF800
                                        */
                                        b = pdata;
                                        g = pdata;
                                        r = pdata;
                                       
                                        r = ((r<<8)&0xf800);
                                        g = ((g<<3)&0x07e0);
                                        b = ((b>>3)&0x001f);
                                        *(pcc+i) = r+g+b;

                                       
                    }
                                /*得到一行后像素就发送到LCD*/
                                for(i=0; i<xlen; i++)
                                {
                                        *LcdData = *(pcc+i);       
                                }但是这个程序在9325的屏幕上就没闪现白条。

不知道各位大侠是否有这方面的经验。
1 屏幕硬件有问题?
2 9341初始化配置不对?
3 兼容性?

百思不得其姐

与龙共舞 发表于 2018-6-2 21:24:53

我最近也在搞 就是这个芯片 3.5的 没有遇到这个问题 我用正点原子的函数跑的
用字模软件取出数组,送过去,没有体会到RGB

50031185 发表于 2018-6-2 22:02:32

   for(i=0; i<xlen; i++)
   {
          *LcdData = *(pcc+i);      
   }

你的这个发送 估计是太快了,
你原来的发送每发一行 跳出去后会有一些别的命令执行,起到了延时的作用,
另外你看看, 发送协议里 有没有发送后的总线状态复位,或者是 检测标志

feixiang20 发表于 2018-6-2 23:41:42

看看是不是连接问题

toofree 发表于 2018-6-2 23:55:35

分析结果,如楼上板凳楼层。

单像素发没有问题,一组发有问题,那基本就是发的太快了。
你的*LcdData在哪定义的?是一个地址指针,还是函数指针?
建议好好看TFT的时序,并且与你的作对比。

五哥1 发表于 2018-6-3 01:46:54

93412.4没有问题,有条件换个屏吗测试下,排除硬件

huangxuejia-292 发表于 2018-6-3 09:28:23

感谢大家的意见。
一开始我也以为是速度太快了,但是,白条只是闪现啊,最终的图片显示是对的,并没有白条。那么说明数据是对的,那是不是说明时序也是对的?那么速度并没有太快。仅仅是快速的刷屏影响了硬件。

为了验证这个问题,今天找一个焊一个新屏对比测试。

huangxuejia-292 发表于 2018-6-3 15:05:22

一开始我也觉得可能是发太快的问题,但是,
白条只是闪现,最后刷完屏幕,图片是正常的,
那就说明数据发送没有问题啊,进一步说,时序应该也没有问题吧?
屏幕是FSMC接口的,就是一个外部地址操作,没有设么状态查询。

找一个新屏幕对比一下先。

zhjb1 发表于 2018-6-4 09:15:13

huangxuejia-292 发表于 2018-6-3 15:05
一开始我也觉得可能是发太快的问题,但是,
白条只是闪现,最后刷完屏幕,图片是正常的,
那就说明数据发送 ...
也常完各种屏。如果是自己设计的LCDPCB,是否设计上存在干扰,这种干扰分全屏刷时可能出现麻点,刷完后正常,也有出现行或列的。别人的PCB自己焊接的,问题不好说,如果压紧LCD和PCB问题消失,有虚焊的可能。软件上的问题少有出现这类现象。总觉得还是硬件问题。多种方法试试吧。

huangxuejia-292 发表于 2018-6-28 16:49:28

结论:
厂家给的初始化代码配置电源不正确,更换初始化代码后正常了。
页: [1] 2
查看完整版本: TFT LCD 刷屏闪现白条(ILI9341)