This board switches between two video inputs and an internal composite video generator. Complete with a LM1881 hardware sync separator
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.