Bonsoir.
Ce qu'il restait à faire au niveau programme du PIC :
- Gérer le chien de garde.
- Lire les cavaliers de configuration et appliquer les paramètres pour chaque fréquence ligne à filtrer.
- Oblitérer une impulsion ligne sur deux dans le cas de la pseudo conversion 31 kHz vers 15 kHz.
Ce qui a été ajouté depuis :
- Afficher l'état du discriminateur à l'aide d'une LED :
- Verrouillé, présence de la bonne fréquence ligne : LED allumée fixe.
- Présence d'un signal de synchro ligne quelconque : LED clignotante.
- Absence de tout signal de synchronisation ligne: Led éteinte.
La gestion de la LED.
La LED devant être gérée hors temps réel, c'est à dire dans la boucle d'attente, il est très facile de l'allumer ou de l'éteindre en fonction d'un flag positionné par la routine traitant les interruptions.
Avec le clignotement se pose un petit problème : comment générer la temporisation qui va servir à la faire clignoter ?
La solution la plus simple que j'ai trouvée est celle d'utiliser le Timer1 qui était jusqu'alors inemployé :
- Le Timer1 est précédé d'un prédiviseur ou "prescaler". Ce prescaler reçoit un signal d'horloge dont on peut choisir la source par programmation.
- Quand le prescaler du Timer1 est piloté par le signal d'horloge externe au PIC, 20 MHz dans le cas présent, il ne peut l'être que par ce signal prédivisé par 4.
- Le rapport de division maximum du prescaler est de 23 donc de 8 (4 rapports possibles : 1, 2, 4 et 8 ).
- Le Timer1 est un compteur à 16 bits, son indicateur de dépassement est donc positionné toutes les 216 soit 65536 impulsions en provenance de son prescaler.
L'indicateur de dépassement du Timer1 est donc sollicité à la fréquence de : 20
× 10
6 ÷ 4
÷ 8
÷ 65536 soit 9,5 Hz.
Il suffit donc de faire surveiller cet indicateur de dépassement par la boucle de fond, de lui faire inverser l'état de la LED à chaque fois que l'indicateur apparaît pour qu'elle clignote à une fréquence deux fois moindre. C'est à dire 4,75 Hz, ce qui est tout à fait compatible avec la persistance rétinienne pour bien percevoir ce clignotement.
Le chien de garde (Watch Dog)La temporisation du chien de garde est générée en interne à partir d'un compteur qui évolue à une fréquence d'horloge de 31 kHz. La temporisation peut être choisie comme étant la période de l'horloge à 31 kHz divisée dans un rapport de 2
5 à 2
16 soit un rapport de 32 à 65536.
En choisissant la temporisation la plus petite, donc le coefficient 2
5 = 32, cette temporisation est de : (32
÷ (31
× 10
3 )) = 1,03
× 10
-3 soit à peu de chose près 1 ms.
Le chien aboiera donc au bout d'une période équivalente à ((1
× 10
-3 )
÷ (64
× 10
-6 )) soit 16 impulsions de synchronisation manquantes pour une fréquence ligne de 15 kHz et le double soit 32 impulsions manquantes pour une fréquence ligne de 32 kHz.
Quand le chien a aboyé suite à la disparition du signal de synchronisation, le PIC se réinitialise et le compteur programme est forcé à zéro comme à la mise sous tension.
Le programme développé ne fait pas la différence entre une réinitialisation suivant la mise sous tension et celle due au chien de garde, le système est déclaré déverrouillé, la LED indicatrice est éteinte, le by-pass interdit, puis il se met en attente des impulsions de synchronisation ligne.
La vérification du fonctionnement du chien a fait apparaître un dysfonctionnement. Le problème venait de la routine d'interruption : l'adresse de la routine est commune à toutes les interruptions, il faut donc faire un test en entrée pour en connaître la source :
- Changement d'état du signal de synchronisation trame.
- Front montant d'une impulsion de synchronisation ligne.
Ce choix permet d'exécuter la sous-routine correspondante à la source.
Ce test se faisait préalablement sur le flag "Interrupt-on-change" positionné par le changement d'état du signal de synchronisation trame.
Une analyse attentive à montré qu'il était impératif de le faire sur le flag de l'interruption due au signal de synchronisation ligne pour une question de séquencement car l'interruption due au signal de synchronisation trame est tributaire de celle due au signal de synchronisation ligne.
Ce test une fois modifié, tout est rentré dans l'ordre.
Lecture des cavaliers / paramètres selon fréquence ligne à filtrerLe programme de lecture des cavaliers est écrit mais non encore testé.
Les paramètres suivants ont été chronométrés a partir de :
- De la DreamCast comme source vidéo pour le 15 kHz et le 31kHz.
- D'une mesure réalisée par F4brice pour le 24 kHz car je ne dispose pas d'une carte ou d'un système délivrant cette fréquence de balayage.
Les valeurs chronométrées sont celles lues dans le Timer0 à l'aide d'un petit programme de lecture affichant les bits deux à deux sur les ports GP0 et GP1, sauf pour le 24 kHz évidemment.
- Chronomètre = 158 pour le 15 kHz (160 théorique).
- Chronomètre = 77 pour le 31 kHz (80 théorique).
- Duré ligne = 40,2 µs pour le 24 kHz, soit un chronomètre théorique de 40,2 ÷ 0,4 = 100,5. (0,4 µs étant le pas du chronomètre )
étant donné que le chronomètre théorique est supérieur de deux ou trois unités au chronomètre réel (temps de prise en compte des interruptions ), une valeur de 98 pour le chronomètre réel semble appropriée.
Les valeurs retenues pour encadrer la fenêtre du discriminateur sont les suivantes :
- 158 ± 5 pour le 15 kHz, donc 153/163.
- 98 ± 4 pour le 24 kHz donc 94/102.
- 77 ± 3 pour le 31 kHz, donc 74/80.
En fait je me suis basé sur la tolérance d'un moniteur Hantarex MTC9000, celui-ci accepte une fréquence ligne de 15625 Hz ± 500 Hz, ce qui correspond à une tolérance de 3%. Les valeurs limites choisies pour le chronométrage sont dans cet ordre de grandeur.
Plus concrètement, pour le 15 kHz par exemple, cela veut dire qu'un signal de synchronisation dont la période chronométrée entre deux impulsions est inférieure à 153 ou supérieure à 163 ne sera pas reconnu comme un signal de synchronisation à 15 kHz. Le PIC ne se verrouillera pas et le by-pass restera interdit.
Ce qu'il reste à faire :
- Tester le programme de lecture des cavaliers, vérifier que l'on filtre bien la fréquence ligne choisie à partir des cavaliers.
- Oblitérer une impulsion ligne sur deux dans le cas de la pseudo conversion 31 kHz vers 15 kHz.
- Tester le discriminateur en place sur le circuit imprimé de l'interface console2jamma
A suivre ...