HDMI not working with specific LCD

Hi,

I'm trying to get an LCD working using the HDMI port but get no image using the VidorDrawLogo example.

When I connect the Vidor to a monitor everything works fine and the logo is displayed.

When I connect the LCD to my notebook it also works fine so there is no issue with the LCD.

Just the LCD with the Vidor is not working. Can anybody help me with troubleshooting this?

After reading this thread HDMI - MKRVIDOR4000 - Arduino Forum I tried doubletapping the reset button, disconnecting and reconnecting the HDMI cable and powered the Vidor and the LCD with an external power source, but nothing helped.

I'm new to Arduino so take it easy on me.

Keola

Hi Keola,
Vidor outputs 640x480@60Hz and it is possible your LCD does not support this resolution. if your laptop OS supports it try setting its output resolution to 640x480 so that you can doublecheck the monitor is working at that resolution.
thanks,

Dario

Hi Dario,

when I connect the LCD to the Notebook it does not let me change the resolution. The LCD resolution is 800 x 800.

Is this a dead end?

Keola

Keola:
The LCD resolution is 800 x 800.

What a strange resolution. Is it a square lcd?

Do you have the model name or a link where you bought it?

Hi Keola,
i agree with Riccardo. likely your panel is only able to display that single resolution and is forcing PC to output it. at the moment Vidor does not check EDID (the memory which contains panel info) so it outputs a fixed resolution which by standard shall be supported by every display. apparently this is not the case for your panel... maybe you want to try with a different one?

Hi,

it is this one https://www.alibaba.com/product-detail/Raspberry-pi-3-model-b-HDMI_60779627341.html?spm=a2700.7724857.normalList.21.c36d221facIpph

Actually the pictures show the display, but the description is for the hdmi to mipi board which I am using to connect the display to the Vidor.
So I'm afraid you are right. Probably the panel only supports the native resolution. A different display is an option but I have not found another round display in a similar or slightly smaller size but lower resolution. So maybe I’ll have to bite the bullet and go for a 2,1” with a 320 x 320. Do you think this one will work?

Dario,

DarioPennisi:
Hi Keola,
i agree with Riccardo. likely your panel is only able to display that single resolution and is forcing PC to output it. at the moment Vidor does not check EDID (the memory which contains panel info) so it outputs a fixed resolution which by standard shall be supported by every display. apparently this is not the case for your panel... maybe you want to try with a different one?

I’m not sure I understand this. Do you mean the display will always have to scale the Vidor output of 640 x 480 to its size? So if the 320 x 320 display could scale it, it would scale it to 320 x 240?

Keola

If the HDMI-MIPI conversion board supports the EDID protocol, the parameters can be obtained to generate the correct signal.

I did so to drive a 480x800 display: is sold as 800x480 but in reality it should be piloted as 480x800 otherwise it does not work.

Hi Riccardo,

that's interesting. How did you force the Vidor to output the correct signal?

Here is the EDID Information of the Panel:

Vendor/Product Identification:

  • Monitor Name : LS060R1SX01*
  • Monitor Serial Number : 00000000*
  • Manufacturer Name : LZT*
  • Product Id : 1*
  • Serial Number : 0*
  • Week Of Manufacture : 12*
  • Year Of Manufacture : 2017*
  • EDIDVersion : V1.3*
  • Number Of Extension Flag : 1*
    Display parameters:
  • Video Input Definition : Digital Signal*
  • DFP1X Compatible Interface : False*
  • Max Horizontal Image Size : 0 mm*
  • Max Vertical Image Size : 0 mm*
  • Max Display Size : 0 Inches*
    Power Management and Features:
  • Standby : Not Supported*
  • Suspend : Not Supported*
  • ActiveOff : Not Supported*
  • Video Input : 1*
  • sRGB Default ColorSpace : False*
  • Default GTF : Not Supported*
  • Prefered Timing Mode : True*
    Gamma/Color and Etablished Timings:
  • Display Gamma : 2,2*
  • Red : x = 0,602 - y = 0,336*
  • Green : x = 0,306 - y = 0,526*
  • Blue : x = 0,151 - y = 0,12*
  • White : x = 0,313 - y = 0,329*
  • Etablished Timings : *
  • Display Type : RGB Color Display*
    Standard Timing:
    Preferred Detailed Timing:
  • Pixel Clock : 44,74 Mhz*
  • Horizontal Active : 800 pixels*
  • Horizontal Blanking : 92 pixels*
  • Horizontal Sync Offset : 40 pixels*
  • Horizontal Sync Pulse Width : 12 pixels*
  • Horizontal Border : 0 pixels*
  • Horizontal Size : 90 mm*
  • Vertical Active : 800 lines*
  • Vertical Blanking : 36 lines*
  • Vertical Sync Offset : 12 lines*
  • Vertical Sync Pulse Width : 12 lines*
  • Vertical Border : 0 lines*
  • Vertical Size : 160 mm*
  • Input Type : Digital Separate*
  • Interlaced : False*
  • VerticalPolarity : False*
  • HorizontalPolarity : False*
    Monitor Range Limit:
  • Maximum Vertical Frequency : 75 Hz*
  • Minimum Vertical Frequency : 23 Hz*
  • Maximum Horizontal Frequency : 240 KHz*
  • Minimum Horizontal Frequency : 15 KHz*
  • Maximum Pixel Clock : 300 MHz*

Keola

In the FBST module the current parameters should be changed:

  parameter pHRES=1280,
  parameter pVRES=720,
  parameter pHTOTAL=1354,
  parameter pVTOTAL=910,
  parameter pHSS=1300,
  parameter pHSE=1340,
  parameter pVSS=778,
  parameter pVSE=782

adapting them to those of your display:

  parameter pHRES=800,
  parameter pVRES=800,
  parameter pHTOTAL=892,
  parameter pVTOTAL=836,
  parameter pHSS=840,
  parameter pHSE=852,
  parameter pVSS=812,
  parameter pVSE=824

Furthermore, in the SYSTEM_PLL module it is necessary to modify the multipliers and dividers for the outputs c0 and c1, so that c0 is as close as possible to 44.74MHz and c1 is exactly 5 times c0.

Once this is done, the output signal should be corrected, the remainder of the FBST module remains to be modified to adapt the RAM to the new resolution.

In my case I wrote a new DVI module where the signal content is generated automatically, without any video RAM, just to test the display.

I assume you need the display to work with the Graphics Library, so you will have to wait for the complete publication of the sources before you can use it; from the recent postings of Dario should be lacking little time.

Hi,
A few remarks...

  1. LCD panels need to be fed with native resolution. You can slightly change frequencies and blanking but you can't absolutely drive them with a different resolution. Although you will see the LCD has a controller that is a tcon so it's only role is to generate low level LCD driving signals and doesn't do any scaling
  2. format converters such as the HDMI to mipi converter you're using are just converting the "protocol" so they don't perform any scaling. Even if it's edid reports variable scan frequencies it's just due to laziness of the developer... I bet that if you feed it with 300mhz clock it won't work.
  3. simple scaler boards don't have a frame buffer so they can scale image but vertical timing will stay the same. If for example you want to drive a panel with a 30 hz vertical frequency likely it won't work as panels usually accept vertical frequencies above 50hz.
  4. complex scaler boards have frame buffers and can perform scan conversion. The most sophisticated ones even do motion compensation, generating intermediate frames when upconverting say from 30 to 60 hz by analyzing moving portions...

Now, getting back to your issue, probably next week I'll release the full flow so you can modify output resolution. Actually it's also possible that we'll release a version that allows changing resolution at run time but that will come later as it requires run time reconfiguration of the pll as Riccardo mentioned.

Thanks guys. I'm very grateful for your help although most of the information is over my head.

I somehow misinterpreted this comment:

DarioPennisi:
…..

Vidor outputs 640x480@60Hz
…..

as "the maximum output is 640x480" so I thought all is lost with this display.

DarioPennisi:
Now, getting back to your issue, probably next week I'll release the full flow so you can modify output resolution. Actually it's also possible that we'll release a version that allows changing resolution at run time but that will come later as it requires run time reconfiguration of the pll as Riccardo mentioned.

Good stuff! I'm excited to try to get it working.

Keola

Hi Keola,
Max resolution really depends on several parameters. In Vidor the limiting factor is sdram. It runs at 100Mhz (it could run faster but not if the fpga is so full as in graphics image) and this means that at 16bits per pixel and 60 MHz pixel clock ( to have 1080p30 with reduced blanking) you would be consuming 60% of the bandwidth not considering addressing overhead. If you want to write in the memory then you have realistically bit more than 20mpixel/sec or even less if you perform random accesses. In graphics image we have 2 write and 2 read clients (camera read/write and image read/write) plus one if you use also neopixel so in order to prevent issues I limited resolution to 640x480 which requires around 24mpixel/sec bandwidth per client... Having these considerations in mind will allow you to push the limits. For example if you reduce the amount of logic you can get timing closure with sdram running at over 130Mhz...

Hi Dario,

Do you have any updates on this?

Thanks.

Keola

Hi Keola,

you can try this sketch : sketch_dvi_800x800

Regards
Philippe

Hi Phillipe,

thanks for sticking your head into this but also with this sketch I do not get an output on the screen.

Regards,

Markus

Ok,

so my last guess, with a reverse polarity for synchronization.

sketch_dvi_800x800_inv_pol

Philippe

Hi Philippe,

thanks again but, I'm sorry, it is still not working. I connected the LCD to my PC just to check if it is still working and there it is ok.

Keola