bluefeel 发表于 2019-2-10 12:54:34

驱动RGB接口的液晶,图像莫名其妙多了很多规律的列……

本帖最后由 bluefeel 于 2019-2-10 13:02 编辑

如标题所述,显示8*8方格,黑色方格变成9*8了。正常来说是程序问题,我也希望是程序编写有问题。但是我拿起板子摆弄到某个位置时候就正常了……我彻底不知道怎么办了。

这是显示有问题的时候


放大来看黑格变成9*8了,导致后面直接少了两个格子


我换个姿势,它就显示正常了。杜邦线太长?干扰?干扰能这么规律?


看在线仿真,黑格也是8列


液晶时序

bluefeel 发表于 2019-2-10 12:56:13

FPGA用verilog驱动的程序

//assign flag1 = ((cnt_h - 11'd25) / 8) % 2;
assign flag1 = ((cnt_h - 11'd24) / 8) % 2;
assign flag2 = ((cnt_v - 11'd8) / 8) % 2;

assign lcd_pclk = lcd_clk;      // RGB LCD显示模块采样时钟

//assign lcd_hs= (cnt_h <= H_SYNC - 1'b1) ? 1'b0 : 1'b1;
//assign lcd_vs= (cnt_v <= V_SYNC - 1'b1) ? 1'b0 : 1'b1;
assign lcd_hs= ((cnt_h == 11'd0) && (lcd_clk == 1'b1)) || ((cnt_h == 11'd4) && (lcd_clk == 1'b0)) || (cnt_h == 11'd1) || (cnt_h == 11'd2) || (cnt_h == 11'd3) ? 1'b0 : 1'b1;
assign lcd_vs= ((cnt_v == 11'd0) && (cnt_h > 11'd4)) || ((cnt_v == 11'd1) && (cnt_h < 11'd5)) ? 1'b0 : 1'b1;

//使能RGB565数据输出
//assign lcd_en= (((cnt_h >= 11'd25) && (cnt_h < 11'd345)) &&
assign lcd_en= (((cnt_h >= 11'd24) && (cnt_h < 11'd344)) &&
                  ((cnt_v >= 11'd8) && (cnt_v < 11'd328)))
               ? 1'b1 : 1'b0;

//RGB565数据输出
assign lcd_data = lcd_en ? (flag2 ? (flag1 ? 16'hffff : 16'h0000) : (flag1 ? 16'h0000 : 16'hffff)) : 16'hffff;

//行计数器对像素时钟计数
always @(negedge lcd_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
      cnt_h <= 11'd0;
    else begin
      if(cnt_h < H_TOTAL - 1'b1)
            cnt_h <= cnt_h + 1'b1;
      else
            cnt_h <= 11'd0;
    end
end

//场计数器对行计数
always @(negedge lcd_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
      cnt_v <= 11'd0;                                 
    else if(cnt_h == H_TOTAL - 1'b1) begin
      if(cnt_v < V_TOTAL - 1'b1)                                             
            cnt_v <= cnt_v + 1'b1;                              
      else
            cnt_v <= 11'd0;
    end
end

bluefeel 发表于 2019-2-10 12:59:50

怎么改程序换参数还是多那些列,涨姿势就恢复正常,但是那个姿势很难试出来,位置有点变化就不正常了。姿势影响结果我实在想不出怎么解决了。

90999 发表于 2019-2-10 13:02:30

示波器,逻辑分析仪

honami520 发表于 2019-2-10 14:39:10

线太长了,而且你用的杜邦线,线组很大。你要么把速度降低一些。要么用FPC排线,然后包上屏蔽线,就可以了。
这种规律性的错位我遇到过,解决方法就是这两种。

wye11083 发表于 2019-2-10 14:44:26

honami520 发表于 2019-2-10 14:39
线太长了,而且你用的杜邦线,线组很大。你要么把速度降低一些。要么用FPC排线,然后包上屏蔽线,就可以了 ...

时钟沿问题更有可能。我记得rgb lcd需要下降沿,而lz应该是上升沿

bluefeel 发表于 2019-2-10 14:59:13

wye11083 发表于 2019-2-10 14:44
时钟沿问题更有可能。我记得rgb lcd需要下降沿,而lz应该是上升沿

我试过下降沿了,直接不行,时序图最下是上升沿。你说的下降沿是什么控制器呢?比如ILI9xxx全部是上升沿锁存数据。

bluefeel 发表于 2019-2-10 15:02:12

honami520 发表于 2019-2-10 14:39
线太长了,而且你用的杜邦线,线组很大。你要么把速度降低一些。要么用FPC排线,然后包上屏蔽线,就可以了 ...

晚点试试,这个20cm的杜邦线确实是超强信号的天线,对讲机放到5米外还是有让人崩溃的噪音,还是很贵的建伍对讲机。

bluefeel 发表于 2019-2-10 22:44:28

honami520 发表于 2019-2-10 14:39
线太长了,而且你用的杜邦线,线组很大。你要么把速度降低一些。要么用FPC排线,然后包上屏蔽线,就可以了 ...

问题暂时解决,可能就是你说的。我用逻辑分析仪看HS和VS很多干扰,然后我把HS、VS、CLK分配到对面的IO BANK就行了,不过摆弄线偶尔也会出现错位。

奇怪的是,更换IO后逻辑分析仪看还是这么多干扰,没有变化。更换IO的分析图。

jarodzz 发表于 2019-2-10 22:55:47

VS, HS, DE 這幾根訊號最好是用FF output 去 drive I/O。
页: [1]
查看完整版本: 驱动RGB接口的液晶,图像莫名其妙多了很多规律的列……