A development board designed around the ESP 32 WROOM module. Theoretically capable of On Screen Display (OSD) comparable with standard FPV racing drone.
Using the information found on OSD systems, I started building a prototype. The chosen microcontroller for this board is the Espressif ESP32, a chip intended mainly for IoT applications, since it features Wi-Fi connectivity and BLE (Bluetooth Low Energy), not only for its connectivity, but due to the great expandability of the platform. With a dual core architecture, we have plenty of resources even for problems that are considered hard for a microcontroller to do, such as composite video generation, and 3D rendering. The communication capabilities of the chip are not used fully in this application, but the board is designed in a way that allows further development and use of these features.
One the important peripheral is the I2S port, that is leveraged in order to generate the composite video, due to the high data rates and parallel processing capabilities. More information can be found at Bitluni's lab video: https://www.youtube.com/watch?v=5t1_XNc3vNw
A breadboard circuit was made to test out the functionality of the microcontroller, an LM1881 sync separator. The circuit was made to accompany the ESP32CompositeVideoLM1881 project that is based heavily on Bitluni's ESP32CompositeVideo project. The LM1881 project tries to use Bitluni's code to generate some sort of OSD, but is incomplete at the moment. However, this was enough to test the components and set a final hardware configuration.
This is what we have at this point, besides all the cool example demos. The LM1881 is read by the ESP32 and the vertical and horizontal sync intervals are shown on screen. Since no major problems have been found, the schematic gets the green light as the next step.
OSD stands for On-Screen Display, and is a way of overlaying information over the existing video feed. Flight data is sent over SPI from the flight controller, and the chip switches between the external video source and the internal pixel generator before each pixel that needs to be drawn. For this, the chip needs to know when the line starts and when the frame starts from the video feed. This is achieved with a Maxim MAX7456, but since that chip is not manufactured anymore, designers turned to the AT7456 clone, that implements all the functions identically and is pin compatible.
The current system does provide adequate information, but only according to a grid of characters, and all characters must be specified by the microcontroller through SPI. This proves to be a bottleneck, because of the limited memory. Drawing lines, for example is pretty hard on this chip, so we can not draw vectors or polygons.
This internal schematic represents a starting point for our project, designed to replace or provide an alternative for this ageing and discontinued chip.
The video timing generator role is filled by the LM1881 on our board, the generator and DAC will be done by the ESP32 and the MUX role can be accomplished using the analog video switch.
That's a neat idea!!! I would love to see this through, we need more "game modes" in FPV racing!!
I have no idea how to fix this, but it might be the supporting circuitry of the MAX7456, since on your video, only one of the OSD's goes out, and the standard flight controller one is still the MAX7456 / AT7456, which does not??
It might also be the fact that you are chaining two OSD's (if that's what happens) but i don't think it should matter that much.
It would be great if you documented your project here or on github so we can take a closer look ;)
This project does NOT use the classic MAX7456 / AT7456, but rather was built as a hardware platform to replace the functionality. Sadly, I don't yet have working code for it, and this project is shelved for the time being. If anyone is interested I will open source the hardware, but as of right now, the code does not yet implement OSD functionality.
As for your problem, I think generic Arduino libraries for the MAX7456 (such as https://github.com/neomilium/arduino-max7456) should work if you don't want to code your own. I never tested this however, and you'll have to try this on your own.
Very cool Project ;-) i looking for something like this.... i plan a game for FPV Racing called "Capture the Flag" i need an osd with wifi to push in the game points in the osd. The Problem i currently have is that the max7456 goes to grey if there is an desync pal frame.
That's a neat idea!!! I would love to see this through, we need more "game modes" in FPV racing!!
I have no idea how to fix this, but it might be the supporting circuitry of the MAX7456, since on your video, only one of the OSD's goes out, and the standard flight controller one is still the MAX7456 / AT7456, which does not??
It might also be the fact that you are chaining two OSD's (if that's what happens) but i don't think it should matter that much.
It would be great if you documented your project here or on github so we can take a closer look ;)