jeudi 13 août 2015

Tétéviseur conformiste

J'ai conçu plusieurs projets générant un signal NTSC monochrome et les ai branchés sur 3 téléviseurs différents avec succès. Mais voilà que dernièrement j'ai du remplacer mon téléviseur par un de modèle RCA. Comme cette semaine j'ai repris le projet CHIPcon dans le but de remplacer le clavier hexadécimal par un joystick Atari 2600. Je branche CHIPcon v2 sur mon téléviseur RCA... pas de vidéo! Pourtant il fonctionne très bien sur mon petit moniteur de développement. Je n'ai pas été long à figurer d'où provenait le problème.

Standard NTSC

En fait la sortie NTSC que j'utilise n'est pas conforme au standard. Il s'agit d'une version simplifiée appellée balayage progressif sans alternance de champ (field). De plus la synchronisation verticale est aussi simplifiée et consiste à simplement rallonger l'impulsion de synchronisation pour les lignes 1 à 3.

Le standard NTSC lui définie une alternance de field pair et impair. Chaque field ayant chacun 262,5 lignes pour un total de 525 lignes par image puisque les lignes des champs pair et impaire sont inter-lacées. Ceci a pour but d'éviter le scintillement de l'image tout en réduisant la bande passante requise par le signal vidéo puisqu'il n'y a que 262,5 lignes de transmise par champ. Chaque champ n'est affiché que 30 fois par seconde en alternance pair/impair même si le balayage vertical est à la fréquence de 60 fois par seconde. Astucieux!

Dans la version que j'utilise il n'y a que 262 lignes répétées 60 fois par secondes sans inter-lacement.

Solution au problème

Heureusement la solution à ce problème était simple et consistait à une modification de la routine d'interruption vidéo ISR(TIMER1_COMPB_vect) située dans le fichier tvout.c Voici la version originale présentée dans CHIPcon et la version conforme à NTSC corrigée pour CHIPcon v2.

NTSC balayage progressif

NTSC conforme

Notez que ceci n'augmente pas la résolution verticale qui demeure à 2621 lignes puisque le même video_buffer est utilisé pour les 2 champs pair et impair.

conclusion

La morale de cette histoire est que si vous voulez que votre projet fonctionne sur tous les téléviseurs il vaut mieux qu'il se conforme au standard NTSC, car on ne sais jamais quand on aura affaire à un téléviseur pointilleux.


NOTES:

  1. Les 262 lignes ne sont pas toutes visibles, 21 de ces lignes font partie du vertical retrace. De plus sur les téléviseurs que j'ai essayé il y a environ 230 lignes visibles en balayage progressif. En respectant le standard et en utilisant l'entre-lacement on obtiendrait donc 460 lignes au coup d'un buffer vidéo 2 fois plus grand.
  2. m.à.j. 2015-08-18, j'avais oublié le break; pour le case 272:. De plus j'ai supprimé le test if(!even) qui était inutile car si even est vrai line_counter est mis à -1 avant d'atteindre 272.

Aucun commentaire:

Enregistrer un commentaire