Programmeerbare video-DAC: voor elk formaat tot RGB888
op
Wanneer je experimenteert met microcontrollers en video in VGA-kwaliteit voor retro-gaming of een andere toepassing, heb je een (DAC). Met dit flexibele ontwerp kun je allerlei videoformaten uitproberen voordat je de uiteindelijke resolutie vastlegt.
Een eenvoudige DAC
In een niet zo grijs verleden had je speciale video-IC’s nodig om een video-uitgang aan je computersysteem toe te voegen. Maar tegenwoordig kan bijna elke microcontroller een VGA-videosignaal ‘on the fly’ produceren. De resolutie en kleurdiepte hangen af van de hoeveelheid beschikbaar RAM en de snelheid van de MCU. Een eenvoudige digitaal/analoog-converter (DAC) is alles wat nodig is om digitale bitstromen om te zetten in analoge spanningen voor de rode, groene en blauwe kanalen van de VGA-monitor.
De vereiste woordbreedte van de DAC wordt bepaald door de resolutie en kleurdiepte van het gewenste videosignaal. Deze twee parameters zijn op hun beurt weer afhankelijk van de beschikbare rekenkracht in de MCU die het videosignaal genereert. Het is mogelijk dat aan het begin van het project nog niet duidelijk is waartoe je systeem in staat is, zodat je misschien liever begint met een DAC met geringe woordbreedte. Aan de andere kant is het mogelijk dat je, als een project bijna klaar is, merkt dat er nog ruimte is om de kwaliteit van het videosignaal te verbeteren. In dat geval zou je een DAC met een grotere woordbreedte willen.
De hier gepresenteerde schakeling kan in beide situaties worden gebruikt, en in alle andere situaties daartussen. Het is een driekanaals video DAC met programmeerbare woordbreedte, waarbij elk kanaal onafhankelijk van de andere kan worden ingesteld. Daarom kan hij worden gebruikt voor alles van RGB111 tot RGB888 (8bit-resolutie voor alle kleuren). Elk cijfer kan elke waarde hebben in een bereik van 1 tot 8; zo zijn RGB535 en RGB221 bijvoorbeeld mogelijke video-kleurformaten.
Schakeling
De schakeling is getekend in figuur 1. We zien hier slechts één kleurkanaal (rood), omdat de kanalen voor elke kleur hetzelfde zijn. De digitale video komt binnen op K1 met maximaal acht bit per kanaal. De bits worden gebufferd door IC1, die een R2R ladder-DAC aanstuurt. De DAC-uitgang is een videosignaal in het bereik van 0 V tot 0,7 V. Pull-down weerstanden aan de ingangen zorgen ervoor dat niet-aangesloten bits als nul worden gezien.
Het aantal bits per kleur wordt ingesteld met de DIP-schakelaars van SW3. Voor een 8bit-signaal moeten alle schakelaars uit staan. Om de woordbreedte te verkleinen, sluit je de schakelaars die onderaan beginnen met R1 en R0. Voor een woordbreedte van 4 bit sluit je bijvoorbeeld de vier onderste schakelaars. Sluit de bits van boven naar beneden aan, dat wil zeggen het meest significante bit aan respectievelijk R7, G7 of B7 en werk dan omlaagn. Op die manier kan de video-output altijd zijn maximale waarde (0,7 V) bereiken in plaats van zwakker te worden.
IC4 buffert de horizontale en verticale synchronisatiesignalen. De overige zes buffers kunnen voor iets anders gebruikt worden. Ze zijn beschikbaar op K5.
Om de video-DAC snel uit te proberen zonder uren te hoeven programmeren, sluit je hem aan op een Raspberry Pi Pico board en een VGA-monitor (zie figuur 2 en tabel 1). Gebruik HSYNC als synchronisatiesignaal. Download een demo hier, programmeer deze in de Pico en geniet van de graphics (figuur 3).
De demo’s op zijn in RGB332-formaat. Daarom moet je de onderste vijf schakelaars voor rood en groen en de onderste zes schakelaars voor blauw sluiten:
aantal te sluiten schakelaars = 8 – woordbreedte voor de kleur
Sommige demo’s voeren audio uit op GPIO19 van de Pico. Zet een weerstand van 1,5 kΩ in serie met de uitgang en voeg een condensator van 10 nF naar massa toe om een eenvoudig laagdoorlaatfilter voor het audiosignaal te maken.
De ontwerpbestanden van het project zijn beschikbaar hier.
Vragen of opmerkingen?
Hebt u technische vragen of opmerkingen naar aanleiding van dit artikel? Stuur een e-mail naar de redactie van Elektor via redactie@elektor.com.
Nota van de redactie: Mathias Claussen heeft aan dit ontwerp gewerkt en Clemens Valens heeft de tekst voor dit artikel verzorgd (220674-03). Het volledige artikel verschijnt in de Elektor Circuit Special 2023.
Discussie (0 opmerking(en))