pico RGB2HDMI
A microprocessed on the fly RBG to HDMI and USB converter
"A simple board where the main component is the raspberry pico microcontroller and a triple S&H ADC that allows capturing RGB into HDMI or USB"
About
With the appearance of the RP 2040 line of microcontrollers and the use of their capabilities, it was possible to consider a development that previously remained in the field of FPGA-based solutions such as OSSC or SCART converters, both of which have much higher final value and with limitations. in rendering fidelity (scaling) or in latency.
You can also check the documentation for details.
Additionally I made a full article in spanish if you like to get details and a lot of nostalgia.
Functionality
The System allows the capture of RGB video and its representation in HDMI (Video) and USB (Photo)
It has a keyboard for basic control, on-screen menus and a USB console.
Specifications
HDMI modes: 640x480, 800x600, 960x540, 1280x720(HD) all 60 hertz
Capture modes: 320x240@16bits, 640x240@8bits
4 keys: reset, select, up, down
Usb: CDC serial port with console terminal support
Input: Red,Green, Blue, HSYNC, VSYNC, GND
Schematics
Use Mode
Connect retro computer through RGB video with its 2x5 , connectors can be provided
Power device through USB
Configure screen with buttons (alpha)
S2 Button : Alter between X and Y axis
S3 Button: Move left of up
S4 Button: Move right or down
Pushing S3+S3+S4: Activate USB
Console use:
Connect through USB with PC/Mac
Open a Serial port application (putty, arduino/monitor)
Configure 115000 8N1
Use comands with the following shape: <command> <space> <value> and hit enter
USB Commands
The USB commands allow you to speak directly with the microcontroller to command it, it is necessary (momentarily) to activate it by pressing the S2+S3+S4 buttons.
The USB mode affects the stability of the image, that is why it must be activated and is in test mode.
The list of commands may change in the future as needed, but at the moment the ones that are supported are:
up: Move screen up, argument must be an integer (up 1)
down: Move screen down, argument must be an integer (down 1)
left: Move screen to the left, the argument must be an integer (left 1)
right: Move screen to the right, the argument must be an integer (right 1)
info: show info menu, argument must be true/false (info true)
capture: capture the current screen in csv format. (capture)
id: display the unique device id (id)
version: show the version of the device (version)
Firmware Update
Firmware updates for the device will be shared in uf2 format files, the update steps are as follows:
Press and hold the BOOT button contained in the raspberry pico board
Plug in or reset the device (S1) if it was already plugged in
Release the BOOT button
The pico device enters uf2 mode, which accepts updates from the computer as if it were a pendrive, just drag the uf2 file from the computer to the device
This will generate an automatic reset
If there is any doubt about this process check the Pico SDK on how to deploy the firmware
Hardware Access
Hardware is available through pcbway service as a shared project, you'll be able to see the schematic there too for reference.
Hardware design required a lot of work from people collaborating to the project, if you can donate (argentina / us) it would be really appreciated.
Firmware Access
Firmware source is now public! you can access it here, so if you want it you can contact me to get a built copy of the firmware specific for your raspberry pico but I encourage you to build it yourself!
The solution is under the MIT license that allows comercial terms, if you plan to use it for your own there are no actions to be made, if you plan to sell it please email me to get written permission.
Additional tools
A series of python application are shared to allow the ease of use:
Csv2png: transform comma separated files captured through the console into a png image
GUIApp: allows full control of the system with a friendly user interface, mac, windows and linux support
Gui Application
The Gui application summarizes all command line options that the device supports into a friendly interface.
Autodetects the port of the device and connects
Licenses
This solution uses Wren6991 implementation of DVI for Raspberry pico microcontrollers, license can be checked here https://github.com/Wren6991/PicoDVI/blob/master/LICENSE
Known Bugs
Activating USB support adds jitter to the image
Aliasing in low resolution mode (320x240)
Intensity variation in some scenarios
Care of the device
The device works at high frequencies to capture and generate HDMI, which makes it extremely sensitive to contamination by fluids or dust, which affect its frequency profile.
The capture system uses an electrostatically sensitive device, you should avoid touching it
Possible list of failures
Information screen with AFE or SCAN error codes: The micro could not detect the AFE, it happens due to dirt on the chip or poor contact.
Glitches in the video even without connecting capture: Error in the HDMI, possibly a line with poor contact, short or dirt from the micro to HDMI.
Image shifts: When the USB is activated, interferes with the scan, producing slight shifts. Until the usb solution is found, this functionality is activated on demand.
Noise on the captured image: If the input signal has noise, it is displayed in the same way on the screen, there is no natural interpolation such as that produced by the CRT phosphor.
No Boot - If the video signal is present from boot up, the device may not boot. The options are reset and it takes immediately or start video after power on.
Noice on image: the converter is NOT bandwith limited, hence HF noises and armonics will be shown on the capture. EACH cable has to provide it's own means to adapt the signal (e.g: a first order filter at least)
More details at: rgb2hdmi Q&A
Disclaimers
This solution (HW / FW /SW) is provided as is without any express or implied warranties.
While every effort has been taken to ensure the solution will work as is, the authors & contributors assume no responsibility for errors or omissions, or for damages resulting from the use of the solution of the information contained herein.
There is no guarantee as to the suitability of said source code, executable scripts, circuits and other information, for any purpose whatsoever other than as a self-training aid.
I.E. If it blows your equipments, trashes your hard disc, wipes your backup, burns your building down or just plain don't work, IT ISN'T MY FAULT
I will not be held responsible for any damages or costs which might occur as a result of the usage of the beforementioned solution, USE IT AT YOUR OWN RISK
You are NOT allowed to use any part or complete part of the solution for commercial purposes without my written authorisation
Collaborations
Collaborations can come in different ways, the best is by donating (cafecito / paypal) coffes (I'm an engineer, I drink high dosis of black mana)
Other ways to collaborate is to spread the word, the videos or to share experiences of your usage of the solution, even to propose HW and FW improvements (code & PCB improvements over wish lists)
Collaborators
Espacio Tec: Francisco Manera, Sebastian Rho, Juan Pablo Chucair
Retro computacion: Jorge Castillo
Otto
Francisco Maqueira
Alejandro Perez
Jose Gumersindo
Leandro Galvano
Ernesto Uriburu
Carlos Masciarelli
Marcelo Barbalace
Fernando Bugallo
Gabriel Garcia
Gaston Ferreiros
Aldo Ibañez
Emiliano Escobar
Questions?
Fill the form!