Gamoover

Vous aimez GAMOOVER ? Vous avez trouvé la perle rare grâce à notre forum ?
Alors pourquoi pas nous soutenir en effectuant un petit don Paypal sur : contribution@gamoover.net
C'est peut être un détail pour vous, mais nous, ça nous aiderait beaucoup !

[WIP] Bidouilles autour de la conversion DisplayPort->VGA->SVideo/Composite

Démarré par njz3, Jeudi 07 Mai 2026, 10:41:28 AM

njz3

Salut à tous,
Je crée ce sujet comme une sorte de blog sur des bidouilles que j'ai faites récemment autour des sujets suivants :
- convertir du RGB sur VGA vers du SVideo/Composite.
- convertir un signal digital DisplayPort vers de l'analogique RGB sur VGA.

Il existe évidemment déjà ce type de convertisseurs sur étagère, à bas prix, alors pourquoi s'embeter ?

La première raison, c'est la curiosité ... et parce qu'un des développeurs du script 15kHz CRT pour Batocera (Rion), grand fan du VideoAmp, de Linux et de cartes graphiques AMD, m'a demandé s'il était possible de faire convertisseur VGA vers SVideo et composite d'excellente qualité, en particulier qui gère le luma trap du composite correctement, principalement pour les personnes n'ayant pas de CRT équipés en RGB.
Comme mes journées (et mes soirées) ne sont pas assez pleines, je me suis pris au jeu de regarder le sujet. Et en regardant le sujet, j'en ai profité pour aussi regarder si l'on pouvait dupliquer un convertisseur DisplayPort vers VGA qui gère les "low dotclock" et le EDID passthrough, ceci afin de compléter l'offre actuelle du VideoAmp.

L'objectif de ce sujet est de restituer ce que j'ai compris, et de répondre à vos questions si je peux. Il faut noter que je ne suis pas électronicien ni électricien. J'apprends par essai et erreur, et n'ai pas bcp d'expérience sur le domaine.

njz3

En tout premier lieu, le sujet du VGA vers S-Video/Composite.
Ce type de signaux vidéo sont présents sur la quasi totalité des TVs et moniteurs grands publiques bas/moyen de gamme de l'époque (la petite prise ronde à 4 broches pour le S-Video, et la fameuse prise RCA jaune pour le composite). C'est en particulier vrai dans les pays "NTSC" qui n'ont pas eu la chance comme nous d'avoir du RGB sur péritel imposé au niveau légal, bien qu'ils aient eu en compensation des entrées component YUV sur les modèles haut de gamme, inversement plus rare chez nous.

Rion et la communauté autour de Batocera et GroovyArcade ont déjà établi une liste de convertisseurs du marché compatible VGA (venant d'un PC, pas d'un mister):
https://github.com/ZFEbHVUE/Batocera-CRT-Script/wiki/Recommended-Adapters,-Sync-Solutions-&-Transcoders#-composite--s-video-transcoders

C'est adaptateurs sont souvent à base de transcodeurs, et non de convertisseurs qui bufferisent l'image.
Les transcodeurs n'introduisent pas de lag car ils traitent l'image à la volée, ligne par ligne, au fur et à mesure que le signal video est reçu.
Il apparait que les meilleurs convertisseurs sont ceux à base de Analog Device AD723 et AD725. Ces IC assez récents car datant de la fin de l'époque des CRT, ont la propriété de supporter une plage un peu plus large pour le trasncodage des signaux analogiques qui pourraient être légèrement différents des modes NTSC et PAL strictes.
Ils sortent directement les signaux Luma et Chroma pour le S-Video, mis en forme selon le standard choisi et peuvent mixer les signaux pour générer un signal composite qui intègre les deux (porteuse plus haute fréquence pour le Chroma).

En particulier, le transcodeur d'Antonio Villena est réputé pour fournir la meilleure qualité de signal en S-Video (Luma/Chroma séparé). Toutefois Rion m'a indiqué qu'en mode composite NTSC il ne gère par le Luma Trap et que malheureusement la qualité est mauvaise pour ce type de sortie. Le problème est également vrai pour pas mal de transcodeurs actuels.

Ne sachant pas ce que c'est que le Luma Trap, j'ai jeté un oeil à la datasheet du AD723 (disponible ici) et il s'agit d'un filtrage type coupe bande (notch filter ou comb filter en anglais) qui permet d'éviter un chevauchement des fréquences entre le Luma et le Chroma avant le mixage.
Pour ceux qui ne voient pas l'effet de l'absence de Luma Trap sur le signal composite NTSC, il faut regarder du côté de la communauté Mister, en particulier Mike Simone, qui a fait quelques vidéos à ce sujet :

C'est en particulier vrai pour les images noir&blanc avec du texte fin où l'on voit apparaitre des franges de couleur sur les caratères. Ici par exemple le signal composite d'un émulateur apple IIc:

(voir la page expliquant les artefacts et le filtrage sur le luma trap)

njz3

Dans les datasheets du AD723 et AD725, le Luma Trap est très bien expliqué.
Il s'agit d'un chevauchement des fréquences entre la partie Luma, qui donne l'intensité lumineuse, et celle du Chroma, qui donne la couleur. Le mélange des deux signaux par modulation entraîne une confusion au niveau du décodeur côté TV qui ne peut pas distinguer si le changement de fréquence est du au signal d'intensité lumineuse, ou s'il s'agit d'une couleur. Ceci n'est présent que pour le composite (un seul signal) puisque par définition en S-Video, les deux signaux sont séparés et donc le problème ne se pose pas. De plus, ceci n'apparait que si le signal de Luma contient des hautes fréquences qui chevauchent le spectre du Chroma.

La solution proposée par un circuit Luma Trap consiste donc à rejeter les fréquences de Luma qui pourraient perturber le décodage du Chroma (après le mixage), avec la contrepartie d'avoir une image un peu plus floue puisque les hautes fréquences du luma seront filtrées. Le filtre doit être accordé sur la fréquence de la porteuse du signal Chroma, à savoir 3.58MHz pour le NTSC et 4.43MHz pour le PAL.

La communauté Mister a finalement solutionné ce problème grâce à un traitement numérique à la source, dans le FPGA, avant sortie des signaux analogiques. Ainsi, les adaptateurs Mister vers S-Video ou Composite ne font que router les signaux déjà pré-traités en numérique vers des pins du VGA (qui n'est plus du RGB sur VGA) et le tour est joué, plus besoin de circuit analogique complexe.

Si l'on souhaite utiliser un PC avec une sortie vidéo RGB sur VGA, malheureusement il faut obligatoirement passer par un IC de transcodage et faire la correction du Luma Trap via un circuit électronique. Quand on lit la datasheet du AD723 ou du AD725, on voit que ce filtrage est prévu et il y a la présence d'une pin "YTRAP" pour relier un circuit résonant LC à un résistance interne afin d'avoir un filtre réjecteur. Mais il semblerait que les transcodeurs actuels fassent l'impasse sur ce circuit, pour une raison que j'ignore. Ou peut être volontairement pour retrouver le plaisir des artefacts du NTSC afin d'avoir les sensations "Retrogaming".

J'ai indiqué à Rion que ce serait tellement plus simple que ces adaptateurs soit modifiés par leur concepteur en rajoutant les 3 composants manquants, car pourquoi prendre le risque de refaire quelque chose qui fonctionne déjà ? Rion m'a indiqué avoir plusieurs fois demandé et insisté auprès des concepteurs de ces petits transcodeurs adaptés au retrogaming pour rajouter ce petit circuit mais malheureusement sans succès jusqu'à présent.
Et moi, dans une générosité qui me perdra certainement, j'ai finalement accepté de lui faire un petit proto de PCB sur la base du circuit exemple de la datasheet du AD723 pour essayer de refaire ce qui existe déjà et qu'il puisse essayer pour voir si le fameux circuit Luma Trap sert à quelque chose au final.

Me voilà donc embarqué sur la réalisation d'un PCB (enfin non, deux ;-) pour convertir du RGBHV de VGA vers du S-video/composite !



njz3

J'ai utilisé l'IA (Gemini) pour m'aider sur le choix de composants et pour essayer de faire au mieux l'intégration sur un PCB.
Beaucoup de gens utilisent maintenant l'IA tous les jours (pas vrai @Little_Rabbit ?) et je me suis dit que c'était l'occasion d'essayer aussi sur des sujets plus complexes que de rédiger un résumé d'un texte ou faire les devoirs à la maison.

On dit que l'IA est performante pour faire du code. Comme c'est mon métier, je peux juger et avouer que ce qu'elle fait est d'un niveau basique (souvent très buggés), mais effectivement ca fait gagner du temps. Là pour l'électronique, je me suis dis que j'aller essayer. Petit bilan à la fin ;-)

Le premier PCB que j'ai fait est pour le AD723 et se base sur le schéma issu de la datasheet.

Je n'ai fait que reprendre ce dernier et ajouter un oscillateur de Pierce à base d'un quartz à 20ppm et d'une porte inverseur 74HC04 pour générer les clocks 4FSC (4 fois la fréquence NTSC soir environ 14MHz, ou 17MHz en PAL) comme demandé dans la datasheet, et le circuit du Luma Trap.

Après réception, montage d'un banc de test avec une TV, une video amp, un convertisseur hdmi2vga, soudure des composants, et premiers essais : c'était (presque) la cata !

En mode NTSC, j'arrive à avoir une image en S-Video, mais en composite image en noir et blanc, problème de synchro, bref pas top. En PAL pas de couleur et pas de synchro. Armé d'un oscilloscope et d'un peu de volonté, j'ai essayé d'investiguer :
- j'ai un problème de raccordement ou de routage ?
- mes modelines ne sont pas bons ? (pourtant faites avec switchres)
- l'oscillateur n'est peut etre pas à la bonne fréquence ? (ou mon oscilloscope ne mesure pas correctement, va savoir !)
- ma TV a un problème ?
- mon schéma est pas bon ?
- ?

Du coup, je tatonne, je change les condensateurs de mon oscillateur (ca fait changer la fréquence mais je ne sais pas si c'est mon oscillo qui mesure mal ou mon circuit qui est pas bon), je controle les signaux VGA en entrée, le Luma/Chroma en sortie. Je demande de l'aide à Gemini qui m'indique de vérifier si le signal de sortie contient bien le burst sur le chroma qui sert à calibrer le noir sur les convertisseurs DC (ceci est fait à chaque ligne). Pratique mon oscillo a une fonction de décodage de trame NTSC ou PAL, alors je l'utilise et effectivement j'ai bien le burst et tout semble correct, mais toujours pas de couleur ! Mais je remarque qu'en mettant mes doigts un peu partout au niveau de la zone oscillateur, parfois j'arrive à accrocher la couleur quelque fraction de seconde. Il semble donc que le soucis vienne bien de l'oscillateur.

En creusant sur internet (cette fois sans l'IA), je me rends compte que l'oscillateur n'a probablement pas la bonne fréquence. La datasheet indique qu'il faut rajouter une trimmer cap pour régler finement l'horloge, ce que je n'ai pas fait ! Les signaux NTSC et PAL sont extrêmement sensibles à la fréquence, cela se joue à quelques 100Hz près, et c'est probablement mon problème. Notez que l'IA ne m'a pas alerté sur ce point, mais qu'après lui avoir demandé elle m'a dit avoir oublié ce point très important ;-)

Je refais un PCB en ajoutant cette trimmer cap, j'en profite pour corriger quelques points comme la partie régulation du 3.3V, j'attends les PCB, et je reteste et presque le même problème ! Cette fois, c'est plus stable, ca accroche mieux mais le réglagle avec la trimmer cap ne change que de quelques Hz la fréquence et la mesure à l'oscillo semble toujours assez éloignée de la valeur théorique. Comme indiqué plus haut, je ne sais pas si c'est mon oscillo qui ne mesure pas assez précisemment, ou si c'est mon oscillateur qui n'est pas bon.

Alors pour éliminer cette inconnue, je demande à l'IA comment je peux générer une fréquence parfaite pour faire mes tests. Elle/il m'indique que le module DIY Si5351 peut m'aider. Pour ceux comme moi qui ne connaissent pas, c'est un module pour Arduino en 3,3V qui permet de générer des clocks quasi parfaites (0ppm de déviation) entre 8kHz et 160MHz, sur la base d'un quartz 27MHz (qui lui peut dériver). Il faut obligatoirement un Arduino 3.3V pour l'utiliser car il se configure en bus I2C et la config est perdue après extinction, ce qui veut dire qu'il faut le reconfigurer à chaque allumage.

J'achète ce module, je le branche, je contrôle avec mon oscillo et bonne nouvelle : mon oscillo donne une mesure finalement plutôt correcte (au 4ème digit) et c'est donc bien mon oscillateur à quartz qui n'est pas correct. Je connecte alors ce module Si5351 à mon PCB pour remplacer l'oscillaeur et fais un petit programme pour balayer une zone de fréquence autour des 14MHz nécessaires au NTSC afin de voir si j'arrive à obtenir la couleur.
Et là, youpi, j'y arrive ;-)

Il semblerait que c'est du à la porte logique inverseuse (une 74HC2G04GV, pourtant bien de la série des 74HC04) qui ne convient probablement pas et fait un signal trop "péchu". A nouveau, l'IA ne m'a pas conseillé sur ce choix mais après l'avoir questionné, elle me conseille d'utiliser un inverseur du type 74HCU04, qui a un comportement linéaire et non brutale sur ses sorties.
Nouvelle itération à venir !

Petit bilan sur la conception assistée par IA pour l'électronique : alors déjà elle ne comprends rien aux schémas et se trompe dans pas mal de chose, notamment les pins et la connexion des condensateurs ou autre petits éléments. Elle arrive bien à comprendre les datasheets et fait remonter les points essentiels à vérifier. Elle peut aider au diagnostique (bien qu'elle fasse fausse route on l'a vu sur le burst couleur) mais elle tombe souvent sur les pièges que, je pense, un vrai électronicien ne ferait pas (comme pour mon cas sur la conception de l'oscillateur qui ne marche pas).

J'en profite pour ajouter quelques images du premier proto de la carte où l'on voit le port VGA d'entrée à gauche, la sortie S-Video et RCA composite à droite, les quartz et l'oscillateur en bas à côté de l'USB, le régulateur et l'alimentation USB à côté et enfin en haut le AD723 avec les composants nécessaires à son fonctionnement (voir schéma extrait de la datasheet):


Et voilà la nouvelle version en attente de réception où l'on voit :
- en jaune des jumpers ajoutés pour choisir si l'on envoie une synchro séparée ou combinée sur le H, le choix d'avoir une terminaison 75ohm sur l'entrée VGA, et le choix du mode de transcodage pour le PAL South America (qui sera probablement jamais changé).
- en rouge la zone Luma Trap (dont on verra son efficacité dans une prochaine photo/vidéo)
- en vert la zone oscillateur avec maintenant deux trimmer cap pour régler la fréquence d'horloge NTSC ou PAL.


njz3

Je vais aborder maintenant le cas du AD725 dont la datasheet est dispo ici.
Ce dernier est plus récent que le AD723, et semble plus simple d'intégration. Il reprends le même principe d'oscillateur 4FSC et de Luma Trap mais est basé sur des sorties analogiques avec un bias DC (offset) qu'il faut supprimer en utilisant un couplage AC en sortie, c'est à dire en ajoutant des condensateurs de large valeur pour supprimer l'offset et ne laisser passer que les hautes fréquences.
Voilà le schéma extrait de la datasheet, où j'ai volontairement supprimer la partie basse qui montre une seconde sortie pour un moniteur supplémentaire, inutile pour ma carte.


On pourra remarquer que le schéma est très proche du AD723, avec quelques pins en moins, notamment la correction d'offset qui disparait (CVSET, YSET, CSET), la suppression de la possibilité de faire une terminaison 75Ohm (RT,GT,BT) et d'autres petites options.


Little_Rabbit

Salut,

Merci de partager avec nous ces recherches : c'est super intéressant !  ^-^

Durant tous tes essais, as-tu essayé de faire l'impasse sur le Luma Trap, en ne connectant rien à la broche YTRAP, histoire de valider tout le reste du montage, et t'assurer que tu as déjà un signal vidéo composite certes imparfait, mais qui donne une image couleur dans la majorité des cas ?

A+
The early 80's : the arcade golden age !
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room