梁山派RGB接口屏幕学习

这篇具有很好参考价值的文章主要介绍了梁山派RGB接口屏幕学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

梁山派RGB接口屏幕学习

0. 目标和结论

0.1 学习RGB屏幕接口

  1. RGB接口的硬件连接
  2. RGB的软件控制
  3. SDRAM的使用

0.2 使用梁山派的RGB接口点亮之前买的屏幕TFT1P7148

  1. TFT1P7148屏幕使用的JLC大佬的转接板:https://oshwhub.com/qq_qq/rgb_tft

  2. TFT1P7148屏幕可以使用两种接口点亮,9bit的SPI接口和RGB接口,实际RGB接口也需要使用SPI先配置好才能使用

0.3 信息总结

  1. TFT1P7148屏幕的转接板的RGB数据引脚线序错乱,需要重新调整
  2. 40pin标准的RGB屏幕背光使用串联方式连接,5寸屏幕大概需要20V的电压才能点亮
  3. RGB接口的硬件连接可以通过灰度彩条显示来测试
  4. RGB接口的PCLK频率过高超过屏幕驱动芯片设定值可能会出现像素偏移
  5. 我手上的屏幕貌似都存在一定问题:白色竖条、灰度显示亮条纹、屏幕边沿亮条纹,也有可能是没调好
  6. TFT1P7148屏幕显示效果挺好的
  7. TFT1P7148屏幕的驱动IC(RM68041/2)使用RGB接口控制之前,需要先使用SPI口进行初始化和显示接口模式切换

0.4 遗留问题

  1. TFT1P7148屏幕使用RGB接口驱动,还存在一个两排像素点的白色竖条,应该是可以通过SPI配置解决的,需要仔细研究规格书,暂时没找到解决方案
  2. TFT1P7148屏幕转接板的RGB三个通道的线序有点问题,需要调整,判断标准为灰度显示是否正常

1. RGB接口学习

1.1 资料收集

  1. RGB屏幕接口介绍:https://blog.csdn.net/Oushuwen/article/details/110542307

1.2 Parallel RGB接口定义

rgb接口屏幕,单片机
  1. RGB信号线:

    RGB 信号线各有8 根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量

  2. 同步时钟信号CLK:

    液晶屏与外部使用同步通讯方式,以CLK 信号作为同步时钟,在同步时钟的驱动下,每个时钟传输一个像素点数据

  3. 水平同步信号HSYNC:表示屏幕上一行像素数据的传输结束

    水平同步信号HSYNC(Horizontal Sync)用于表示液晶屏一行像素数据的传输结束,每传输完成液晶屏的一行像素数据时,HSYNC 会发生电平跳变,如分辨率为800x480 的显示屏(800 列,480 行),传输一帧的图像HSYNC 的电平会跳变480 次

  4. 垂直同步信号VSYNC: 表示屏幕上一帧数据的传输结束

    垂直同步信号VSYNC(Vertical Sync)用于表示液晶屏一帧像素数据的传输结束,每传输完成一帧像素数据时,VSYNC 会发生电平跳变。其中“帧”是图像的单位,一幅图像称为一帧,在液晶屏中,一帧指一个完整屏液晶像素点。人们常常用“帧/秒”来表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像,如液晶屏以60 帧/秒的 速率运行时,VSYNC 每秒钟电平会跳变60 次

  5. 数据使能信号DE

    用于表示数据的有效性,当DE信号线为高电平时,RGB信号线表示的数据有效

2. 梁山派的RGB接口

2.1 梁山派有一款RGB屏幕拓展板

  1. 拓展版链接:https://oshwhub.com/li-chuang-kai-fa-ban/rgb_mcu_480x800
  2. 拓展版资料下载:https://lckfb.com/docs/lspi_rgb_mcu_lcd_ex/#/%E5%B1%8F%E5%B9%95%E6%89%A9%E5%B1%95%E6%9D%BF%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD

2.2 梁山派RGB接口电路连接

  1. 梁山派核心板工程使用LCEDA专业版绘制:https://oshwhub.com/li-chuang-kai-fa-ban/liang-shan

  2. 专用的屏幕接口有两种,RGB接口和8080并口
    rgb接口屏幕,单片机

  3. RGB接口使用16bit的模式,格式为RGB565

  4. 梁山派的RGB接口排线上,除了标准的RGB565接口外,还加入了一个SPI接口和一个触摸屏用的接口(目前没用到,没有触摸屏)

3. 直接点亮屏幕

3.1 点亮通用的40pin排线的RGB屏幕

  1. 接使用排线连接TFT1P7148屏幕(使用上接FPC座,实测下接的方向反了),发现只能点亮背光,同时背光可控,说明排线连接顺序正常

  2. 发现TFT1P7148屏幕转接板上还有40pin标准的RGB屏幕接口,屏幕接口连线为直通

    • 40pin标准的RGB屏幕背光使用串联方式连接,大概需要20V的电压才能点亮,直接使用可调电源限流10mA~50mA供电点亮背光

    • 背光需要将背光的排线单独拆下飞线用20V供电,否则可能会反向高电压供电烧掉核心板的电路

    rgb接口屏幕,单片机

    • 将fpc连接到TFT1P7148屏幕转接板,RGB屏幕成功点亮
      rgb接口屏幕,单片机

    • 实际电路连接,图片为后续补拍

      rgb接口屏幕,单片机

3.2 点亮TFT1P7148屏幕

  1. 寻找线索找到这款屏幕的驱动IC需要SPI配置成为RGB接口后才能使用,大佬给的SPI驱动代码中有切换RGB接口的配置

  2. 刚好看到梁山派配套的屏幕拓展板一样需要配置,且TFT1P7148屏幕转接板上预留有引出SPI接口的测试点

  3. 屏幕驱动IC(RM68041/2)规格书也有配置设定

rgb接口屏幕,单片机

  1. 飞线连接SPI接口
    rgb接口屏幕,单片机

  2. 替换屏幕初始化代码

    //************* Start Initial Sequence **********// 
    // RM68042+ AUO3.2 320*480
        LCD_WR_REG(0X11);
        delay(20);
        LCD_WR_REG(0XD0);//VCI1  VCL  VGH  VGL DDVDH VREG1OUT power amplitude setting
        LCD_WR_DATA(0X07); 
        LCD_WR_DATA(0X42); 
        LCD_WR_DATA(0X1D); 
        LCD_WR_REG(0XD1);//VCOMH VCOM_AC amplitude setting
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X1a);
        LCD_WR_DATA(0X09); 
        LCD_WR_REG(0XD2);//Operational Amplifier Circuit Constant Current Adjust , charge pump frequency setting
        LCD_WR_DATA(0X01);
        LCD_WR_DATA(0X22);
        LCD_WR_REG(0XC0);//REV SM GS 
        LCD_WR_DATA(0X10);
        LCD_WR_DATA(0X3B);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X02);
        LCD_WR_DATA(0X11);
        
        LCD_WR_REG(0XC5);// Frame rate setting = 72HZ  when setting 0x03
        LCD_WR_DATA(0X08);
        
        LCD_WR_REG(0XC8);//Gamma setting
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X25);
        LCD_WR_DATA(0X21);
        LCD_WR_DATA(0X05);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X0a);
        LCD_WR_DATA(0X65);
        LCD_WR_DATA(0X25);
        LCD_WR_DATA(0X77);
        LCD_WR_DATA(0X50);
        LCD_WR_DATA(0X0f);
        LCD_WR_DATA(0X00);    
                  
          LCD_WR_REG(0XF8);
        LCD_WR_DATA(0X01);    
    
        LCD_WR_REG(0XFE);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X02);
        
        LCD_WR_REG(0X20);//Exit invert mode
    
        LCD_WR_REG(0X36);//Set_address_mode.XY,rgb.bgroáêú?á
        LCD_WR_DATA(0X28);// 28
        
        LCD_WR_REG(0X3A);
        LCD_WR_DATA(0X55);//rgb565.16bit
    LCD_WR_REG(0xB4); //RGB
    LCD_WR_DATA(0x11);    
        LCD_WR_REG(0X2B);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X01);
        LCD_WR_DATA(0X3F);
        
        LCD_WR_REG(0X2A);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X00);
        LCD_WR_DATA(0X01);
        LCD_WR_DATA(0XDF);
    
        LCD_WR_REG(0X29);     
      delay(200);
    
  3. 成功点亮TFT1P7148屏幕,但是屏幕显示的文字貌似存在错位的问题
    rgb接口屏幕,单片机

  4. 反复对比查找问题,发现RM68041/2驱动IC使用RGB接口时,合适的驱动频率为11MHz,示波器实测屏幕上PCLK上的信号为24MHz

rgb接口屏幕,单片机

  1. 修改代码,直接强制将RGB接口时钟设置为4分频,屏幕上文字显示错位消失

    
        switch (tli_clk.v)
        {
        case 2:
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV2);
          break;
        case 4:
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV4);
          break;
        case 8:
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV8);
          break;
        case 16:
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV16);
          break;
        default:
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV4);
          break;
        }
        }
        else
        {
        /* configure the PLLSAI clock to generate lcd clock */
        if (ERROR == rcu_pllsai_config(192, 2, 3))
        {
          while (1)
            ;
        }
        rcu_tli_clock_div_config(RCU_PLLSAIR_DIV2);
        }
        
          rcu_tli_clock_div_config(RCU_PLLSAIR_DIV4);  
    
  2. 屏幕上文字显示错位问题消失,但屏幕旁边还存在一个白色的竖条,大概占据2排竖直像素点

    rgb接口屏幕,单片机

  3. 反复尝试修改配置代码,白色的竖条均无法去掉,问题暂留,看后续能否解决

    • 尝试修改分辨率,发现只要横向分辨率不为480,均会显示异常,而40pin标准的RGB屏幕,分辨率改小只会导致超出设定分辨率的部分显示重影,但是设定分辨的区间内显示正常

    • 尝试修改初始化寄存器,可以将白色竖条切换到左边,但是依然不会消失

      LCD_WR_REG(0X36);//Set_address_mode.XY,rgb.bgroáêú?á
      LCD_WR_DATA(0X38);// 28
      //0x38和0x28可以将白条切换到左边和右边
      //‘0’ = LCD Refresh Top to Bottom
      //‘1’ = LCD Refresh Bottom to Top 
      

rgb接口屏幕,单片机

4. 尝试显示图片

4.1 调整好程序

  1. 尝试抄一个图片显示的写入函数,就是简单粗暴的向SDRAM中写入数据

    void LCD_ShowPicture(uint8_t layer, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t *data)
    {
        uint16_t i = 0;
        uint16_t j = 0;
        uint16_t *lcd_framebuf;
        for(i = 0; i < height; i++)
        {
            if((y+i) >= ACTIVE_HEIGHT)   
                break;
            lcd_framebuf = ltdc_framebuf[layer] + (  ((y+i) * ACTIVE_WIDTH + x) ) ;
            for(j = 0; j < width; j++)
            {
                if((x+j) >= ACTIVE_WIDTH) 
                    break;
                *(lcd_framebuf + j) = *(data + i*width + j);
     
            }
        }
        
    }
    
  2. 直接使用Img2Lcd转换图片成为数组

    const unsigned char gImage_cat[64800] = { /* 0X00,0X10,0XB4,0X00,0XB4,0X00,0X01,0X1B, */
    0XE6,0X49,0XC5,0X49,0XC5,0X49,0XC5,0X49,0XC5,0X49,0XC5,0X49,0X84,0X41,0X64,0X39,
    0X44,0X39,0X64,0X39,0X64,0X41,0X64,0X39,0X64,0X41,0X23,0X31,0X64,0X39,0X44,0X39,
    0X44,0X39,0X64,0X39,0X64,0X39,0X64,0X39,0X64,0X39,0X85,0X41,0X64,0X39,0X44,0X31,
    ...
    
  3. 同时需要学习以下指针加一的操作:https://blog.csdn.net/speargod/article/details/90144041

    • 指针加一,结果是对该指针增加1个存储单位
    • 所以uint16_t *的指针,直接加一就是后一个元素了,不用手动计算字节数

4.2 显示到屏幕上

  1. 40pin标准的RGB屏幕显示相对正常,但是有不正常的亮点,TFT1P7148屏幕显示图形正常,颜色完全异常

rgb接口屏幕,单片机

4.3 找到显示异常的原因

  1. 写了一个灰度显示的彩条程序用于测试

    #define C_COLOR_REPEAT 14
    void LCD_draw_colorgradation(uint8_t layer, uint16_t x, uint16_t y)
    {
        //color level
        uint16_t color_level = 0;
        uint16_t cnt_color = 0;
        uint8_t cnt_repeat = 0;
        for(color_level = 0; color_level <= 0x1F; color_level ++)
        {
            for(cnt_repeat = 0; cnt_repeat <C_COLOR_REPEAT;cnt_repeat++)
            {
                for(cnt_color = 0; cnt_color < 50 ; cnt_color++)
                {
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat +x) + (cnt_color+y)*ACTIVE_WIDTH ) = (uint16_t)color_level<<11;//0x7000;//
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat+x) + (50+cnt_color+y)*ACTIVE_WIDTH ) = (color_level)<<6;
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat+x) + (100+cnt_color+y)*ACTIVE_WIDTH ) = (color_level)<<0;
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat+x) + (150+cnt_color+y)*ACTIVE_WIDTH ) = ((color_level)<<11)+((color_level)<<0);
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat+x) + (200+cnt_color+y)*ACTIVE_WIDTH ) = ((color_level)<<11)+((color_level)<<6);
                    *(ltdc_framebuf[layer] + (color_level*C_COLOR_REPEAT +cnt_repeat+x) + (250+cnt_color+y)*ACTIVE_WIDTH ) = ((color_level)<<0)+((color_level)<<6) +((color_level)<<11);
                }
            }
        }
    }
    
  2. 40pin标准的RGB屏幕灰度显示出现亮条纹,还只占横向显示的一个像素点,而软件上最少会有5个以上的像素的竖条,应该是屏幕问题

    rgb接口屏幕,单片机

  3. TFT1P7148屏幕灰度显示完全不按顺序排列,换一个40pin标准的RGB屏幕灰度显示正常,但是边沿也有条纹

rgb接口屏幕,单片机

  1. 灰度显示测试结论文章来源地址https://www.toymoban.com/news/detail-598111.html

    • TFT1P7148屏幕的RGB颜色通道的线序应该是乱的
    • 灰度显示有亮条纹的40pin标准的RGB屏幕应该本身存在时序问题
    • 可以通过灰度测试来检测RGB接口线序是否正常

到了这里,关于梁山派RGB接口屏幕学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【【51单片机实现LED点阵屏幕和动画显示】】

    我们先搞清楚74HC595的原理 sfr 特殊功能寄存器声明 sbit 特殊位声明 就举个例子,我们在之前的各种测试中对LED进行控制会直接输入P2=什么什么,那我想问你怎么知道P2口控制的就是LED呢,其实这些就是已经在内部声明完成了,我们可以直接拿来使用 内部

    2024年02月11日
    浏览(48)
  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(56)
  • STM32 CubeMX (H750)RGB屏幕 LTDC

    RGB屏幕线束定义: 这里设置的时钟,关于刷新速度 举例子 :LCD_CLK=24MHz 时 刷新率 = 24MHz /((Width + HSYNC_W + HBP + HFP) (Height + VSYNC_W + VBP + VFP)) = 24000000/((800 + 96 + 10 + 10) (480 + 2 + 10 + 10)) = 24000000/(916*502) = 52Hz

    2024年02月10日
    浏览(42)
  • STM32 RGB屏幕驱动+LVGL移植 从底层到应用小项目

    项目使用正点原子STM32F767阿波罗开发板+IPS TFT-LCD屏幕(非正点原子屏幕)进行开发,应用层移植轻量级GUI库LVGL实现列表按键点击,切换,显示当前内部工作电压功能。重点在于对于RGB屏幕驱动普适性的学习和LVGL开发的理解。希望我实习期间的项目学习过程能对大家有所帮助

    2024年02月15日
    浏览(36)
  • FPGA驱动RGB888屏幕——基于正点原子达芬奇FPGA开发板

    RGB888简介 一个像素点由三种颜色控制,每个颜色8bit,共24bit,三个字节,这就是RGB888。同样的还有RGB565等。 LCD屏幕介绍 1、HSYNC(水平同步信号、行同步信号):产生此信号,说明开始显示新的一行。 2、VSYNC(垂直同步信号、帧同步信号):当产生此信号的话就表示开始显示

    2024年02月04日
    浏览(48)
  • 单片机原理及接口技术期末复习

    1.单片机又称单片微计算机,最初缩写为 SCM (Source Code Management,源代码管理),它集成了中央处理单元CPU( 包含 运算器、控制器 ),并行I/O、串行I/O、定时器/计数器,中断系统,系统时钟电路及数据总线。也称(微控制器,嵌入式控制器) 2.Intel的8051单片机已经称为国内外

    2024年02月05日
    浏览(39)
  • MDIO接口协议与其详解——单片机

    MDIO(Management Data Input/Output)接口协议是一种常用于管理和配置网络设备的串行通信协议。在单片机领域,MDIO接口常用于与网络交换机、PHY芯片等外部设备进行通信。本文将详细介绍MDIO接口协议的原理和使用方法,并提供相应的源代码示例。 一、MDIO接口协议原理 MDIO接口协

    2024年02月22日
    浏览(64)
  • GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)

           不久前我们收到用户反馈问题中,多次反馈各种不同型号的屏幕驱动不起来,从0开始编写代码花费大量时间,也有不少初次学习驱动屏幕代码编写经验过少等问题,为此我们决定以文章的形式发布到CSDN来分享相应的一些经验以及收集整理好的资料,希望可以帮助用

    2024年01月25日
    浏览(45)
  • 单片机原理与接口技术(汇编语言)

    学习建议 结合哈工大的教程视频及课件学习 【公开课】哈工大 单片机原理及应用 单片机基础 计算机 计算机只能识别存储数码0和1 微型计算机中,负数常用补码表示 电子元器件的电位被区分为两种状态:高电位和低电位 常见高电位范围:2V ~ 5V 常见低电位范围:0V ~ 0.8V 正

    2024年01月20日
    浏览(48)
  • 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕

    说明:此篇为学习记录。可能存在错误或者不足。如有问题请指出。 主控芯片:STM32F411CEU6 主控开发板:WeAct STM32F411CEU6最小系统板 TFT-LCD屏幕:合宙1.8寸TFT-LCD,驱动为ST7735s MDK版本:5,32 HAL库版本:1.27.1 STM32CubeMX版本:6.7.0 ST7735s支持8080并口,3线和4线串行接口,模块的驱动方

    2024年02月03日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包