Before the Spresense version, NTSC video output was implemented using a different approach — the CH32V003, an ultra-cheap 48MHz RISC-V microcontroller costing just a few cents each. Connect two resistors and it outputs NTSC composite video.
-> x : ch32v003j4m6_NTSC
The concept is simple:
CPU (48MHz) → GPIO timing control → Resistor DAC (2 resistors generate voltage levels) → CVBS (Composite Video Signal) → TV
The CPU generates video in real time — horizontal sync pulses, vertical sync pulses, and video data, all directly controlled by the CPU.
This approach has many historical precedents:
- AVR TVout library → ATmega + GPIO
- PIC TV output → PIC + GPIO
- ESP32 Composite → ESP32 + I2S
- Arduino TVout → Arduino + GPIO
All follow the same pattern. The CPU generates video signal in real time. This is the defining characteristic of Generation 1.
The CH32V003 version worked. However, this method has limitations.
Because the CPU is generating video in real time, it cannot do anything else. To perform other tasks while outputting video, interrupts must be controlled with extreme precision. Any timing deviation causes video corruption.
And more importantly — it never escapes the idea that "the CPU makes the video."
This brings us back to the original question.
"Audio signals and video signals are essentially the same thing. So the Audio DAC should be able to output video."
Having built the CH32V003 version made this question even more meaningful. Outputting video via GPIO was already solved. What is the next stage?
Not "CPU generates video" — but a world where "data becomes video."
chrmlinux03
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.