Arduino to VGA or HDMI output - is it possible, and how?

I'm trying to make a digital picture frame using an Arduino Uno and a 1366x768 monitor. I want to make a custom Arduino shield that would have a VGA or HDMI port so I can connect the Arduino to the monitor and send images to it as a slideshow. When it comes to circuitry, all I've found is an Arduino to VGA diagram that was only black and white and at a low resolution.

Is there hardware I can get to increase the Arduino's processing power to increase the resolution, and a way to add on a VGA or HDMI output port that includes multiple colors?

  • I know this project would be easier with a Raspberry Pi but those are expensive and I'm trying to use what I have to lower the cost of this project.

Edit: Yes, I have googled it, obviously. I have researched it and determined that anything you can find in a quick google search does not work for what I am trying to make. I assumed that the people who would respond to this post would be people who have experience doing things similar to what I am trying to do. If that is not you then don't provide an answer that won't be helpful.

The problem is the small memory in the UNO , that’s why you’ve only found low resolution examples .

You could look at other processors .. but the pi has the right outputs .

Digital photo frames themselves aren’t expensive .

Digital photo frames aren't expensive, but they also aren't customizable. Do you know of a way to increase the memory?

Buy another board

How would that work?

As in , look for a higher specification board and buy it .

If you are looking to do special effects ( some commercial do fade etc ) then you need even more faster performance.

Pi frame here

So there is no way to do this without a raspberry pi?

Have you tried google?
This took about 10 seconds to find: Make a Digital Photo Album by ESP32 : 6 Steps (with Pictures) - Instructables
and VGA: moefh.github.io

The Raspberry Pi Pico has projects to drive both VGA and HDMI monitors, I think.
It has more more memory than AVR-based Arduinos, is quite cheap, and is currently available from multiple sources.

Driving a high-res display from a Uno-class processor without adding a lot of additional electronics is essentially impossible. In addition to "not enough memory", the clock rate on an Uno (16MHz) isn't anywhere close to what you need for a 1024-pixel width display (~65MHz.)

Yes, it is very easy to find Arduino digital photo album instructions, but the screen is always less than 3 inches long. I'm trying to find a way to make it with a 15.6" monitor.

If you follow the 2nd link that I provided you can go with a VGA hookup

Do you even read what we write to you? Your project can't be implemented on arduino.

I have read your response. "Buy another board" isn't a very helpful.
I understand that the Arduino isn't powerful enough to give me the resolution I need (which I have mentioned in my question. You're one to talk about reading). I'm asking what modifications or shields/parts I need to make it more powerful. If that's not possible then I would appreciate you telling me in a more constructive and educational manner.

I think you don't quite understand. Arduino is dozens of boards with a variety of characteristics. On the classic arduino like Uno or Nano your task is unsolvable.

Nothing. There are no mods or shields that would allow you to make a 15' photo frame out of Nano.

However, there are many boards with much more powerful controllers and hundreds of times more memory - for example, esp32, stm32F407 or Teensy4.2
On these it is quite possible to run VGA with a resolution sufficient for a photo frame. Their capabilities are already approaching the capabilities of rasberry Pi. But the price is also no longer $2.
And most importantly - their programming requires much more knowledge and experience than standard arduino. Making a photo frame on these boards that you can just buy in a store is a waste of time.

You can not make a 16MHz processor more powerful by adding stuff to it. That is not the way processors work. The power of a processor is hard to classify because it is a product of the clock speed and the machine language instruction set it has. Meaning how many clock cycles it takes to perform one instruction. In some chips this is one or two, these are known as RISC (Reduced Instruction Set Computer), in other cases one machine code instruction can take over 100 clock cycles to complete, these are known as complex instruction set computers. The latter you will find in Intel based computers and the former in mobile phones (ARM chips)

As to other Arduinos that might work is the Arduino MKR Vidor 4000.
https://www.arduino.cc/en/Tutorial/VidorGSVHDL
This has onboard FPGA which is sort of configurable hardware. It also has a camera interface and examples of VGA video output. But no where close to the resolution you need. And if you think a Raspberry Pi is expensive, be prepared for a shock.

The point about the Raspberry Pi, is that the chip it is based on has video driver component built into it, because the chip was originally designed for making cable set top boxes. All other similar boards do not have specialised video generating circuits, just general purpose input and output that can mimic a video output, but can never be as good as hardware designed specifically to produce a video output.

2 Likes

It's direct, a lot of technical forum answers will be
The rest of that comment and some of your other replies show that you seem to think that we are hiding the answer from you. We aren't.

I provided you with the best possible combination of Arduino solutions and I'm not sure that you even considered combining them.

If you spend a little time reading and you notice a trend, like all Arduino digital frames have tiny screens, it's that way for a reason. In this case it's because Arduino generally sucks at video due to low memory and low processor speed.

If you think you'll achieve this and save money over buying a raspberry pi, you won't.

Your best solution is to buy a Linux capable SBC with HDMI or VGA output. If you want to save money, look for a used one or an off brand.

If you find later that you want to make a cool robot arm or an RC car, please come back and check out all the cool stuff that Arduino is intended to do.

In fact the MKR VIDOR 4000 board should be able to output high resolutions.
The only limit is the Pixel frequency (no more than 80 or 90 Mhz).
I succeeded with resolutions up to 1400x900p60 with an USB video capture card connected to the VIDOR4000.

{ "1440x900@59,9" , VIDOR_SE_HDMI_MODE , VIDOR_SE_PIXEL_FREQ_88727 , 1440 , 1488 , 1520 , 1600 , 900 , 903 , 909 , 926 , VIDOR_SE_DVI_HPOL | VIDOR_SE_DVI_INV_VPOL },

But I don't know why I never did more than 800x600p60 with a real monitor
Perhaps that the "modelines" I used are wrong.

It is correct, and the best answer to your question.

Arduino Can!
There is library for software color VGA (640x480x60) output on Arduino - github smaffer/vgax
But, by frequency of 16Mhz Arduino can produce not faster then 1:5 px so software resolution was only 128px width.

You can flash alternate core Конструктор Bootloader`а для Arduino and clock arduino to ATMega standart 20Mhz mode, it produce not much bigger - 1:4 zoom 160px width.

  • and this can take not so universal compatible with timing critical libraries (this core fixes basic PWM, Serial, etc functions but not third software)

But i found another way to radical clock the signal. Without clock the arduino. You can add simple but fast BJT comparator by this schematic: https://www.falstad.com/circuit/circuitjs.html?cct=$+1+0.000005+14.235633750745258+54+5+43 t+240+160+240+192+0+1+-9.148915590723593+-4.999999996545533+100 t+240+288+240+256+0+-1+-0.23550799392262536+-0.6538718449901015+100 r+256+192+304+192+0+470 r+256+256+304+256+0+470 r+240+160+240+112+0+30000 r+192+112+192+160+0+50000 w+240+288+192+288+0 w+192+160+192+288+0 w+224+192+128+192+0 R+304+256+320+256+0+1+7+2.5+2.5+0+0.5 R+240+112+320+112+1+2+200+5+0+0+0.5 R+304+192+320+192+0+1+13+2.5+2.5+0+0.5 g+128+192+96+192+0 w+224+192+224+256+0 w+192+112+240+112+0 o+12+32+0+4099+0.0000762939453125+0.0125+0+2+12+3
(it was tested)
then you can clock this by PWM 8Mhz signal so (google stackexchange "Arduino constant clock output")
(schematic use complementary BJT so it freq was doubled and get 16Mhz at real. By the way 16Mhz arduino can produce only 8Mhz bitbanging by it self. Because of instruction timings of copy the data from RAM was 2 tick, But if calculate bit speed it was 8bit per 8Mhz or 1bit/64Mhz theoretical maximum. Very difficult to sync timing from external clocks but you can easy clock by Arduino it self by use 8Mhz PWM or by get 16Mhz reference frequency by switch fuse bits to become it to reset pin - with 20Mhz Arduino you can produce 2bitPer40Mhz bit bang by cascade of BJT comparators and in produce exact 640px width with CGA like 4colors ) But...

Much actual was 4bitPer16Mhz bitbang on classic Arduino with 1-4 BJT comparators (for 2-16 colors respectively) Because of you still have the problem with memory of 2Kbytes, and it cant to store frame buffer even for monochrome, however you can easy store tile-based information, and it make unimportant 2 or 16 colors you will use. But you need much time for tile engine.

So how found this time, if you need to bitbanging realtime? - Exactly not continuous!
The first fact is that VGA signal breaks on ray back porch by 10% of line time
(in 640x480x60 signal it happens 480x60= 28800 times, so it can used for another synthesis 28.8Khz Audio and/or PS/2 peripheral read and/or slow UART serial)
2nd fact - That your soft resolution width 1:2 zoom aspects to height same 1:2 (or you can use ever 1:3)
so tiles line need to render once per 2 - 3 times writing to the port.
3rd - you can interlace soft rendered lines tice to 30Hz frame and it still insensibly (this was tested to)
It down tile renderer limitations to once compute per 4-6 real lines (copy byte from ROM on Arduino need 3 tick. With SO much time you can done ever sprites, if you need)
(in fact you can interlace ever trice to 20Hz and it stil ok, but a little blinky and fade)
4th fact is that VGA signal has vertical back porch 20% pause of all time - these guarantee that you have 20% of all CPU time for logic
5th fact after that render will work is that you can store 10x more graphics in ROM
(you can ever allow sort animations like 3-frame old "Kings Bounty")
6th is that if you load in you ROM it 8x6 symbols you can render 25x40 byte charters with 1Kb memory frame bufer - witch is standart CGA terminal! - and that was really practical case!

So if somebody tells me that Arduino is week microcontroller, i sad that week the newbies geeks.
Somebody Olds who know AVR, write for them game engine already. It was "arduino Unity3d" exact all thay whant.
By the way 3d... Arduino Can raycast Doom-like 3d, if you rotate the monitor 90deg for the VGA lines turn to down-to-up columns
Arduino Can!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.