Auteur Sujet: Etude/Réalisation d'un générateur de mires 15/24/31 kHz  (Lu 26159 fois)

Hors ligne spectroman

  • alias Tondu
  • Beta Testeur
  • *
  • Messages: 2248
  • Localisation: aubagne
    • Voir le profil
Etude/Réalisation d'un générateur de mires 15/24/31 kHz
« Réponse #48 le: Mercredi 08 Avril 2015, 09:23:18 am »
  • Hier je n'ai pas eu le temps de faire les manips que je voulais, les journées de 24H sont trop courte

    Après Spectroman n'en est pas à son premier circuit programmé, donc le mystère reste entier...

    Ce n'est que la deuxième fois que je programme ce chip. Si ça ne fonctionne pas c'est que j'ai du me planter.

    Je teste le chip de olschool que j'ai programmé en même temps ce midi.

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2248
    • Localisation: aubagne
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #49 le: Mercredi 08 Avril 2015, 12:09:07 pm »
  • C'est confirmé, je me suis planté en le programmant. Celui d'olschool ne génère rien du tout.



    Hors ligne olschool

    • ✌(◕‿◕)✌ Donateur 2018
    • Arcade Killer
    • *
    • Messages: 2977
    • Localisation: nice
    • Le JR's est Immortel
      • Voir le profil
      • Le JR's
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #50 le: Mercredi 08 Avril 2015, 13:05:26 pm »
  • C'est confirmé, je me suis planté en le programmant. Celui d'olschool ne génère rien du tout.




     :-(( :-(( :-(( :-(( :-(( :-(( :-((

    Winner's Don't Use Drug mais ça aide quand même pour finir Ghost & Goblins.


    Recherche Bornes: Punch Out / Gauntlet.


    En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

    Hors ligne olschool

    • ✌(◕‿◕)✌ Donateur 2018
    • Arcade Killer
    • *
    • Messages: 2977
    • Localisation: nice
    • Le JR's est Immortel
      • Voir le profil
      • Le JR's
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #51 le: Mercredi 08 Avril 2015, 13:06:53 pm »
  • Spectroman, voleur escroc !!!! jouer de gameboy !!!!!


     :D :D :D :D


    nan je déconne  :D

    c'est cool que tu te soit aperçu du problème avant que je la récupère

     :-*  ^-^
    Winner's Don't Use Drug mais ça aide quand même pour finir Ghost & Goblins.


    Recherche Bornes: Punch Out / Gauntlet.


    En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

    Hors ligne Fred G5

    • ✌ Donateur depuis 2018
    • Pratiquement VIP
    • *
    • Messages: 1494
    • Localisation: 67 - Bas-Rhin
    • Leaf switch are Forever
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #52 le: Mercredi 08 Avril 2015, 13:34:25 pm »
  • Le soucie doit être le même, mauvaise fréquence de synchro du cout sa génère rien..

    Comme on dit: l’erreur est humaine, qui celui qui ne s'est jamais trompé te jette la première pierre
    Flipper: DE "Laser War"- WMS "F14-Tomcat"- GTB " Hollywood Heat"
    Borne: Konami "Lethal Enforcers" - New Game "N'Styl"- René Pierre 1982 - Jeutel Neo Geo 16/9 - Simulateur Twin Konami "Midnight Run Road Fighter 2"
    Jeu/Système de jeu: 42 PCB Jamma, 7 cartouches MVS, slot Neo-Geo MV-1T, MV-2F, MV-6F
    Console: Nintendo SNES + 21 jeux

    Hors ligne olschool

    • ✌(◕‿◕)✌ Donateur 2018
    • Arcade Killer
    • *
    • Messages: 2977
    • Localisation: nice
    • Le JR's est Immortel
      • Voir le profil
      • Le JR's
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #53 le: Mercredi 08 Avril 2015, 13:49:48 pm »



  • dans sa gueule


     :D
    Winner's Don't Use Drug mais ça aide quand même pour finir Ghost & Goblins.


    Recherche Bornes: Punch Out / Gauntlet.


    En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

    Hors ligne spectroman

    • alias Tondu
    • Beta Testeur
    • *
    • Messages: 2248
    • Localisation: aubagne
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #54 le: Mardi 12 Mai 2015, 09:41:35 am »
  • Je n'arrive pas a programmer les fuse et fusex. Lors de la programmation ca dit ok et quand je relis le chips après la programmation, j'ai fff fff au lieu de 3fa f3f



    Je fais passer le chip a gc339 pour qu'il le teste avec son programmateur.

    Hors ligne Fred G5

    • ✌ Donateur depuis 2018
    • Pratiquement VIP
    • *
    • Messages: 1494
    • Localisation: 67 - Bas-Rhin
    • Leaf switch are Forever
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #55 le: Mercredi 13 Mai 2015, 13:09:10 pm »
  • Ceci explique le pourquoi des fréquences fausses de synchro
    Flipper: DE "Laser War"- WMS "F14-Tomcat"- GTB " Hollywood Heat"
    Borne: Konami "Lethal Enforcers" - New Game "N'Styl"- René Pierre 1982 - Jeutel Neo Geo 16/9 - Simulateur Twin Konami "Midnight Run Road Fighter 2"
    Jeu/Système de jeu: 42 PCB Jamma, 7 cartouches MVS, slot Neo-Geo MV-1T, MV-2F, MV-6F
    Console: Nintendo SNES + 21 jeux

    Hors ligne Fred G5

    • ✌ Donateur depuis 2018
    • Pratiquement VIP
    • *
    • Messages: 1494
    • Localisation: 67 - Bas-Rhin
    • Leaf switch are Forever
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #56 le: Mardi 26 Mai 2015, 08:23:50 am »
  • Des news par rapport à ces registres récalcitrants  =?=
    Flipper: DE "Laser War"- WMS "F14-Tomcat"- GTB " Hollywood Heat"
    Borne: Konami "Lethal Enforcers" - New Game "N'Styl"- René Pierre 1982 - Jeutel Neo Geo 16/9 - Simulateur Twin Konami "Midnight Run Road Fighter 2"
    Jeu/Système de jeu: 42 PCB Jamma, 7 cartouches MVS, slot Neo-Geo MV-1T, MV-2F, MV-6F
    Console: Nintendo SNES + 21 jeux

    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2224
    • Localisation: Lyon
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #57 le: Mardi 08 Septembre 2015, 16:37:44 pm »
  • Des news par rapport à ces registres récalcitrants  =?=

    Ayant hérité du SX28 récalcitrant de Fred G5, je viens de le reprogrammer sans problème. La prochaine étape est la vérification de ce SX28 en le substituant à celui de mon propre générateur.

    Le programmateur et le logiciel utilisés :



    Les fichiers du générateur de mires :
    « Modifié: Dimanche 13 Septembre 2015, 12:14:28 pm par gc339 »
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



    Hors ligne Fred G5

    • ✌ Donateur depuis 2018
    • Pratiquement VIP
    • *
    • Messages: 1494
    • Localisation: 67 - Bas-Rhin
    • Leaf switch are Forever
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #58 le: Jeudi 10 Septembre 2015, 08:58:45 am »
  • Un petit programmateur simple et efficace, sa me rappel celui que j'avais fait à l'époque pour les PIC
    Flipper: DE "Laser War"- WMS "F14-Tomcat"- GTB " Hollywood Heat"
    Borne: Konami "Lethal Enforcers" - New Game "N'Styl"- René Pierre 1982 - Jeutel Neo Geo 16/9 - Simulateur Twin Konami "Midnight Run Road Fighter 2"
    Jeu/Système de jeu: 42 PCB Jamma, 7 cartouches MVS, slot Neo-Geo MV-1T, MV-2F, MV-6F
    Console: Nintendo SNES + 21 jeux

    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2224
    • Localisation: Lyon
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #59 le: Lundi 14 Septembre 2015, 17:44:59 pm »
  • Le fait d'avoir dû ressortir le matériel pour programmer le SX de Fred G5 m'a encouragé à replonger dans le logiciel du générateur pour y incorporer une nouvelle mire.
    Pour ce nouvel exercice, j'ai choisi arbitrairement la mire clignotante plutôt que la mire quadrillée (cross-hatch) parmi celles que j'avais prévues à l'origine. J'ai préféré implanter celle de droite en premier car elle sollicite un peu moins le bloc THT avec ses trois bandes alternées.

    De plus la 4ème mire, celle affichant un écran uniformément blanc, n'est pas d'une très grande utilité. Il serait préférable de la remplacer par une mire alternant images ou larges bandes noires et blanches pour vérifier la stabilité de la THT :

       

    En effet, une image noire demande aucun courant au bloc THT alors qu'une image uniformément blanche lui en soutire un maximum. Si le bloc THT est sous dimensionné ou mal en point, la tension s'affaissera avec le courant délivré, les électrons seront alors moins accélérés et seront donc plus facilement déviés par les bobinages du yoke, l'image affichée augmentera de taille et les zones blanches seront moins lumineuses.

    Quand on analyse la constitution de ces mires clignotantes, on se rend compte qu'elles sont obtenues par la juxtaposition de 3 types de lignes élémentaires :
    • Des lignes complètement blanches pour les traits inférieur et supérieur du cadre.
    • Des lignes blanches délimitées par les montants verticaux du cadre, elles sont juxtaposées pour former les bandes blanches de la mire.
      Chaque ligne blanche comporte ainsi :
      • Les pixels blancs du montant gauche du cadre.
      • Les pixels noirs de la marge verticale gauche.
      • La ligne blanche en question.
      • Les pixels noirs de la marge droite.
      • Les pixels blancs du montant droit.
    • Des lignes noires délimitées par les montants verticaux du cadre. Leur juxtaposition permet de former les bandes noires de la mire.
      Les pixels des marges verticales étant confondus avec les lignes noires, chaque ligne noire comporte donc :
      • Les pixels blancs du montant gauche du cadre.
      • La ligne noire en question, marges confondues.
      • Les pixels blancs du montant droit.
      Et ces lignes noires sont aussi employées pour réaliser les marges horizontales entre les bandes blanches et les traits blancs du cadre, ces marges se confondant alors avec les deux bandes noires quand c'est à leur tour d'être affichées.



    Le compteur qui va piloter le clignotement toutes les 30 trames soit ≈ ½ seconde a déjà été incorporé préventivement dans le programme existant :

    Citer

    ;---------------------------- PROGRAMME PRINCIPAL -----------------------------
                                                                                                    
    MainsetbSyncH
    setbSyncV
    clrFlipFlop; Initialisation du flip flop
    jmpPresetFrCnt

                            ; Compteur de trames pour clignotement, absorbe 7 µCycles
    MainLoopdjnzFrameCounter,NoPreset; 2/4 µC
    notFlipFlop; 1 µC, inversion du flip flop
    PresetFrCntmovFrameCounter,#30; 2 µC, clignotement toutes les 30 trames (½ seconde)
    skip; 2 µC, ajustement à 7 µC si rechargement FrameCount
    NoPresetjmp$+1; 3 µC, ajustement à 7 µCycles pour décomptage normal
                                                                                                    



    Le meilleur endroit pour insérer le code de cette nouvelle mire se situe assurément au niveau de la génération du motif de la mire à barres colorées. Une interception au tout début du palier de suppression arrière (back-porch ) permet de récupérer bien plus d'une centaine de µCycles inactifs avant d'afficher les lignes de cette nouvelle mire clignotante, la reprise s'effectuant juste devant le palier de suppression avant (front-porch ).
    Exemple pour le programme de la mire à 15 kHz en page 1 (0200H), les modifications du code existant sont surlignées couleur fuchsia . Le principe est identique pour le code 24 et 31 kHz :
    • Le switch concerné sur rb.6 (patte 16 du SX28 ) est testé.
    • Le code de la mire clignotante est exécuté si le switch est à ON.
    • Après affichage d'une ligne de cette nouvelle mire, la reprise du cours normal du programme doit s'effectuer juste devant le palier de suppression avant, sur la nouvelle étiquette "Pattern15k:FrontPorch".
    • La durée du palier de suppression arrière est minorée de 2 cycles pour tenir compte du test.

    Citer

    ;****************************** Affichage du motif de la mire ******************************
                                                                                                    
    Pattern15kSET$
    :SetUpPresetCount224; 224 Nombre de lignes allouées pour afficher la mire
    jmpPattern15k:Start

                            ; Palier de suppression arrière (Back Porch), suite
    Pattern15kSET$
    :LoopsetbSyncH; Effacement de l'impulsion de synchronisation horizontale
                                                                                                    
                            ; Lecture en tout début de palier du dip-switch affecté au choix de la mire  
    jnb  rb.6,Twinkle15k  ; Absorbe 2 µC, 4 µC si dérivation vers mire clignotante  

    Wait323-2  ; Durée du palier arrière - 2 µCycles  
                                                                                                    
                            ; Affichage des 8 barres colorées de la mire
    ColorBars307; Chaque barre occupe 307 µcycles
                                                                                                    
                            ; Palier de suppression avant (Front Porch)
    Pattern15k  SET  $  
    :FrontPorchSetColorBlack,161-14; Contenu = niveau du noir + palier avant, minoré de 14 µcycles
                                                                                                    
                            ; Décomptage des lignes du bloc en fin du palier de suppression avant (14 µcycles)
    NextLinePattern15k,Leading15k; Décomptage lignes et test si zéro
                                                                                                    
                            ; Impulsion de synchronisation horizontale
    Pattern15kSET$
    :Startjmp$+1; Absorption de 3 µcycles
    clrbSyncH; Emission de l'impulsion SyncH
    Wait238; Durée de l'impulsion
                                                                                                    
                            ; Palier de suppression arrière (Back Porch)
    jmpPattern15k:Loop; Rebouclage avec absorption de 3 µcycles
                                                                                                    
    ;************** Champ précédant l'impulsion de synchronisation trame (blanking avant) **************




    La nouvelle mire étant constituée des 3 types de ligne précédemment évoqués, il va falloir comparer le numéro de celle qui va être affichée à ceux de chaque bande horizontale pour savoir à laquelle elle appartient et ainsi connaître son type afin de sélectionner le sous-programme concerné.
    Le compteur de lignes "LineCounter" étant sur 16 bits, la création d'une nouvelle macro s'avère nécessaire pour effectuer cette comparaison sur deux octets.

    Citer

    ;-------------------------- DEVICE DIRECTIVES --------------------------
                                                                                                    
    IFDEF__SASM;SASM Directives
    DEVICESX28AC, OSCHS3, TURBO, BOROFF, SYNC, OPTIONX, CARRYX
    IRC_CALIRC_SLOW
    ELSE; Parallax Assembler Directives
    DEVICESX28AC, OSCXT2, TURBO, BOROFF, SYNC
    ENDIF
    ID"PATGEN"
    RESETInitialize; Reset vector


    La comparaison s'effectuant à l'aide de deux soustractions, il a fallu effacer la déclaration du fusible CARRYX qui avait été déclaré à tord, l'algorithme employé étant perturbé par la propagation de la retenue issue d'une opération précédente.

    La nouvelle macro qui compare le compteur de ligne LineCount à la valeur passée comme paramètre (la dernière ligne d'une bande horizontale ) :

    CheckCount   MACRO   LastLine   ; Test sur le comteur ligne, absorbe 6 µcycles
    MOVW,#LastLine/256; +1 µC
    MOVW,LineCounter+1-W; +1 µC, soustraction entre octets de poids fort
    JNZ$+3; +2/4 µC
    MOVW,#LastLine//256; +1 µC
    MOVW,LineCounter-W; +1 µC, soustraction entre octets de poids faible
    ENDM; C=1 si LineCounter >= LastLine



    En 15kHz le nombre de lignes affichées est de 224, avec un trait de cadre d'une épaisseur d'un pixel (1 ligne ) et une marge horizontale de 2 pixels d'épaisseur (2 lignes ), il reste 224-6 soit 218 lignes pour les 3 bandes clignotantes soit 72,67 lignes pour chaque bande. Les lignes n'étant pas fractionnables, les 3 bandes ne pourront pas toutes être d'une même épaisseur :
    • la 1ère bande : 73 lignes,
    • la 2ème : 72 lignes,
    • et la 3ème : 73 lignes.
    Soit un total de 218 lignes, le compte est bon.

    Le palier de suppression arrière comporte, quelque soit la fréquence ligne, un bon nombre de µCycles inactifs dont les premiers vont pouvoir être réaffectés au test sur le numéro de ligne courant. De ce test va être déterminé le type de ligne à afficher et par conséquent la portion de code adéquate à exécuter .


    ;********************** Affichage de la mire clignotante noir/blanc (fréquence 15 kHz) *********************
                                        
    Twinkle15kEQU$

    LastStripeLineSET224; Une seule ligne blanche pour le cadre

    Stripes15kSET$; 4 µCycles déjà absorbés sur les 323 du back porch
    :Stripe1CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe2; +2/4 µC
    Wait323-15; Ici 12 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:FrameLine; +3 µC, le trait est entièrement blanc

    LastStripeLineSETLastStripeLine-2; Marge en dessous du cadre : 2 lignes/pixels

    Stripes15kSET$; Ici 14 µC d'absorbés
    :Stripe2CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe3; +2/4 µC
    Wait323-25; Ici 22 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:BlackLine; +3 µC, la marge supérieure est noire

    LastStripeLineSETLastStripeLine-73; 1ère bande : 73 lignes/pixels

    Stripes15kSET$; Ici 24 µC d'absorbés
    :Stripe3CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe4; +2/4 µC
    jbFlipFlop.0,Stripes15k:Toggle3; +2/4 µC
    Wait323-37; Ici 34 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:WhiteLine; +3 µC, la 1ère bande est blanche
    Stripes15kSET$
    :Toggle3Wait323-39; Ici 36 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:BlackLine; +3 µC, la 1ère bande est noire

    LastStripeLineSETLastStripeLine-72; 2ème bande : 72 lignes/pixels

    Stripes15kSET$; Ici 34 µC d'absorbés
    :Stripe4CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe5; +2/4 µC
    jnbFlipFlop.0,Stripes15k:Toggle4; +2/4 µC
    Wait323-47; Ici 44 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:WhiteLine; +3 µC, la 2ème bande est blanche
    Stripes15kSET$
    :Toggle4Wait323-49; Ici 46 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:BlackLine; +3 µC, la 2ème bande est noire

    LastStripeLineSETLastStripeLine-73; 3ème et dernière bande : 73 lignes/pixels

    Stripes15kSET$; Ici 44 µC d'absorbés
    :Stripe5CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe6; +2/4 µC
    jbFlipFlop.0,Stripes15k:Toggle5; +2/4 µC
    Wait323-57; Ici 54 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:WhiteLine; +3 µC, la 3ème bande est blanche
    Stripes15kSET$
    :Toggle5Wait323-59; Ici 56 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:BlackLine; +3 µC, la 3ème bande est noire

    LastStripeLineSETLastStripeLine-2; Marge au dessus du cadre : 2 lignes/pixels

    Stripes15k
    SET$; Ici 54 µC d'absorbés
    :Stripe6
    CheckCountLastStripeLine; +6 µC pour la macro
    jncStripes15k:Stripe7; +2/4 µC, trait inférieur du cadre
    Wait323-65; Ici 62 µC d'absorbés, +3 µC du jmp suivant
    jmpStripes15k:BlackLine; +3 µC, la marge inférieure est noire

    Stripes15kSET$; Reste une ligne pour le cadre
    :Stripe7Wait323-64; Ici 64 µC d'absorbés

    ;***********************************************************************************************************

    On peut considérer le code ci-dessus composé de 7 blocs distincts, autant que d'éléments horizontaux (traits de cadre, marges et bandes clignotantes ) à afficher.
    A l'intérieur de chaque bloc :
    • Le numéro de la ligne courante est comparé à la dernière ligne d'un élément horizontal de la mire. Si non concordance, elle est comparée à celle de l'élément suivant.
    • S'il y a concordance :
      • Avec un trait de cadre : une ligne complètement blanche doit être affichée.
      • Avec une marge horizontale : une ligne noire doit être affichée
      • Avec une bande clignotante : le choix de la couleur de la ligne à afficher est déterminé par le compteur de clignotement (variable FlipFlop).
        Ce choix est inverse pour la bande centrale sinon un seul pavé clignotant serait affiché et on obtiendrait alors la mire de gauche présentée en début du message.
    • Les comparaisons successives absorbant un nombre de µCycles proportionnel au nombre de celles effectuées, un délai approprié à chacune est appelé pour compléter le palier de suppression arrière.
    • Le code correspondant au type de ligne à afficher est enfin exécuté.
    Le principe est le même pour les fréquences 24 et 31 kHz à condition de prendre en compte un palier de suppression arrière plus court (respectivement 222 et 161 µCycles au lieu de 323 ) ainsi qu'un nombre de lignes accru attribué à chaque élément horizontal de la mire.
    « Modifié: Samedi 26 Septembre 2015, 10:46:10 am par gc339 »
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



    Hors ligne Fred G5

    • ✌ Donateur depuis 2018
    • Pratiquement VIP
    • *
    • Messages: 1494
    • Localisation: 67 - Bas-Rhin
    • Leaf switch are Forever
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #60 le: Lundi 14 Septembre 2015, 18:47:13 pm »
  • Moi je dit chapeau bas  <:) <:)

    Sa me rappel des souvenir à l'époque ou je m’amuser avec du code en assembleur sur Thomson ST6 ou 68HC11. Aujourd'hui c'est bien loin tout cela et comme je bosse quasi que dans l'analogique j'aurai bien du mal à m'y remettre ....

    Reste à confirmer que cela fonctionne bien à 24 et 31KHz
    Flipper: DE "Laser War"- WMS "F14-Tomcat"- GTB " Hollywood Heat"
    Borne: Konami "Lethal Enforcers" - New Game "N'Styl"- René Pierre 1982 - Jeutel Neo Geo 16/9 - Simulateur Twin Konami "Midnight Run Road Fighter 2"
    Jeu/Système de jeu: 42 PCB Jamma, 7 cartouches MVS, slot Neo-Geo MV-1T, MV-2F, MV-6F
    Console: Nintendo SNES + 21 jeux

    Hors ligne Stek

    • ✌(◕‿◕)✌ Donateur 2019
    • Arcade Killer
    • *
    • Messages: 2974
    • Localisation: Metz
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #61 le: Lundi 14 Septembre 2015, 19:53:10 pm »
  • Ce type est un malade.... ;D


    moi je vais prendre un doliprane    (:x  :fleche:


    "Fun and nostalgia through gaming and beer is what we’re all about."

    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2224
    • Localisation: Lyon
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #62 le: Mardi 15 Septembre 2015, 00:15:11 am »
  • Maintenant au tour du code pour l'affichage des lignes des mires clignotantes.

    D'entrée, l'objectif est d'avoir visuellement sur l'écran une épaisseur similaire pour tous les cotés du cadre, qu'ils soient horizontaux ou verticaux. La même considération se doit aussi d'être appliquée aux marges.

    A 15 kHz, l'écran affiche 224 lignes ayant une durée de 2456 µCycles du SX28 cadencé à 50 Mhz. En considérant un écran au format 4/3 avec des pixels carrés :
    On a donc 2456 ÷ ((224 ÷ 3) × 4) = 8,22 µCycles par pixel, valeur que l'on peut arrondir à 8, ce qui donne alors 0,97 pixel par µCycle.
    Avec une épaisseur d'un pixel pour le trait horizontal, cela correspond à 8 µCycles pour le montant vertical et 16 µCycles pour une marge verticale fixée à 2 pixels.

    Le code pour l'affichage des 3 types de lignes à 15 kHz est alors le suivant :
                                        
    Stripes15kSET$; Affichage d'une ligne blanche sans marge verticales (cadre)
    :FrameLineSetColorWhite,2456-3; -3 µC pour le jmp suivant
    jmpPattern15k:FrontPorch

    Stripes15kSET$; Affichage d'une ligne blanche avec marges verticales
    :WhiteLineSetColorWhite,8; Egal à 0,97 arrondi à 1 pixel blanc pour 224 lignes au format 4/3
    SetColorBlack,16; Marge gauche, équivaut à 2 pixels noirs
    SetColorWhite,2456-( 2*24 ); Moins 2×3 pixels en largeur pour le cadre et les marges
    SetColorBlack,16; Marge droite, équivaut à 2 pixels noirs
    SetColorWhite,8-3; Equivaut à 1 pixel blanc, -3 µC pour le jmp suivant
    jmpPattern15k:FrontPorch

    Stripes15kSET$; Les marges sont confondues avec la ligne noire
    :BlackLineSetColorWhite,8; Egal à 0,97 arrondi à 1 pixel blanc
    SetColorBlack,2456-( 2*8 ); Moins 2×1 pixels en largeur pour le cadre
    SetColorWhite,8-3; Equivaut à 1 pixel blanc, -3 µC pour le jmp suivant
    jmp      Pattern15k:FrontPorch

    Au passage, la macro "SetColor" boguait avec des faibles valeurs de temporisation. La coupable était une de ses macros subalternes, la macro "BasicDelay" qui interprétait un délai nul comme étant égal à 256.
    Un simple test sur la nullité du délai permet de corriger ce bogue:

    Citer
                                                                                                    
    BasicDelayMACROValue; Absorbe un nombre de µcycles = (Value × 4)
     LOCALLocLoop; Etiquette interne à la macro
     IF Value>0 ; Test pour éviter qu'une valeur nulle génère 256 bouclettes
       movLoopCounter,#Value; 2 µC, initialisation du compteur de bouclettes
    LocLoop    djnzLoopCounter,LocLoop; 4 µC sinon 2 en sortie de boucle
     ENDIF
    ENDM




    En 24 kHz, le nombre de µCycles/pixel est de 1336 ÷ ((384 ÷ 3) × 4) ≈ 2,61 µC/pixel et encore moins en 31 kHz, ce nombre est alors de 1184 ÷ ((480 ÷ 3) × 4) = 1,85 µC/pixel.

    Le problème est que la macro "SetColor" absorbe déjà 4 µCycles avec une temporisation nulle et que 3 autres µCycles sont nécessaires (jmp) pour reprendre le cours du programme en Pattern24k:FrontPorch ou Pattern31k:FrontPorch. L'épaisseur du montant vertical de cadre ou de sa marge ne peut donc être inférieur à 7 µCycles.

    En se basant sur une épaisseur de 8 µCycles pour le montant vertical, le double pour sa marge et en respectant les règles édictées plus en avant pour le 15 kHz, on peut en déduire toutes les autres caractéristiques :
    • En 24 kHz :
      • épaisseur du trait horizontal : 8 ÷ 2,61 = 3,065 lignes soit 3 lignes, donc 6 pour la marge horizontale
      • par conséquent il reste 384-18 lignes pour les 3 bandes, soit 122 lignes pour chacune.
    • En 31 kHz :
      • épaisseur du trait horizontal : 8 ÷ 1,85 = 4,32 arrondi à 4 lignes et par conséquent 8 lignes pour la marge horizontale.
        Dans ces conditions la marge verticale pourrait être ramenée à 8 × 1,85 = 14,8 soit 15 µCycles au lieu des 16 prévus.
      • par conséquent il reste 480-24 lignes pour les 3 bandes, soit 152 lignes pour chacune.



    Prochaine étape la mire quadrillée :


    Pour cette mire, le même principe peut être repris car il n'y a besoin que de deux type de lignes : une ligne complètement blanche et une ligne avec les pixels blancs des lignes verticales. La contrepartie est que cette mire nécessitera autant de comparaisons sur le compteur de lignes que le double de ses lignes horizontales.
    L'autre écueil est que les pages 1, 2 et 3 de la mémoire programme du SX28 sont presque complètes avec la mire clignotante, il faudra nécessairement passer au SX48 en boîtier TQFP48 pour disposer de 2k octets supplémentaires : https://www.parallax.com/product/sx48bd-g
     
    « Modifié: Samedi 26 Septembre 2015, 13:27:28 pm par gc339 »
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



    Hors ligne gc339

    • Beta Testeur
    • *
    • Messages: 2224
    • Localisation: Lyon
      • Voir le profil
    Etude/Réalisation d'un générateur de mires 15/24/31 kHz
    « Réponse #63 le: Vendredi 18 Septembre 2015, 14:41:24 pm »
  • Préambule matériel à l'adjonction de la mire mire à quadrillage

    D'entrée la mémoire programme du SX28 n'est pas suffisante à moins de réétudier les algorithmes en introduisant des boucles de programme, opération trop fastidieuse et chronophage. Donc passage quasi obligé au SX48 ou accessoirement au SX52 pour doubler la taille de la mémoire programme de 2 kOctets à 4 kOctets.
    Le passage du SX28 au SX48/SX52 n'est pas une opération bénigne car le SX48 n'existe qu'en boîtier TQFP48 au pitch de 0,5 mm et le SX52 qu'en boîtier PQFP52 au pitch de 0,65 mm.


    Le SX48 : pitch 0,5 mm
    36 ports d'E/S

    Le SX52 : pitch 0,65 mm
    Idem SX48 + 4 ports d'E/S

    • Un adaptateur s'avère nécessaire pour éclater le brochage au pas usuel de 2,54. Il y a bien ce genre d'adaptateur multi-boîtier de 16 jusqu'à 64 pattes que l'on peut obtenir pour une fraction d'euro :
       


      Malheureusement il faut effectuer la délicate soudure des pattes au pitch de 0,5 mm ou celle à peine moins fastidieuse à celui de 0,65 mm, cela parait presque facile sur certaines vidéos. Le secret de la réussite semble résider dans le flux généreusement étalé et la forme de la panne du fer qui doit être adaptée à la méthode employée.


      Il existe heureusement une autre solution bien plus pratique quoique nettement plus onéreuse car le prix de ces adaptateurs est voisin ou supérieur aux 50 euro.
      Ai cependant trouvé ce modèle TQFP48/DIP48 à 22€45 ($25) sur AliExpress (le vendeur accepte PayPal) :









      D'après l'inscription en relief que l'on peut lire sur la photo centrale,
      le support clamshell  (littéralement coquille de palourde )  serait le
      modèle IC51-0484-806 du japonais Yamaichi.  

    • L'approvisionnement du SX48 n'est pas mission impossible, il n'y a que son coût qui est prohibitif chez certains.
      Le calcul est vite fait, pour un peu plus de 30 euro , on peut en acquérir 6 exemplaires chez Mouser (prix de revient unitaire ≈5€02) alors que sans dépasser ce budget il n'est possible d'en acquérir que 2 chez Selectronic et All Electronique et aucun chez Parallax.
    • Quant à l'outsider, le SX52, n'en ai vu que sur AliExpress, des Ubicom récents et aussi des Scenix plus anciens. Trouvé quelques uns à moins de $5, des Ubicom, frais d'expédition en sus.
    • La programmation du SX48/SX52 :
      • Le logiciel IC-Prog connait le SX48 et même le SX52, il sont répertoriés dans la liste déroulante "Currently selected device".
      • La programmation des SX's s'effectue en mode ISP, le bus ISP comporte 4 fils, deux pour l'alimentation (0 volt et +5 volts ), un troisième pour l'application de la tension de programmation et le dernier pour émettre les commandes vers le SX.
        Fortuitement ces 4 fils sont disponibles sur un connecteur annexe du programmateur Fluffy2, le connecteur blanc sur la photo :



        D'après le schéma du Fluffy2, 5 connections sont nécessaires sur le SX dont 4 correspondent au bus ISP.
        Ainsi l'adjonction d'un support LQFP48 ne nécessitera pas de raccordement de fils autres que les 4 fils du bus ISP à condition d'installer la résistance de polarisation directement entre une patte Vdd et la patte MCLR du reset.
        Ainsi sur le support (DIP48 ou autre ) recevant l'adaptateur TQFP48 ne devront être raccordés que :
        • Les 2 fils d'alimentation sur les pattes Vss et Vdd.
        • Les 2 autres sur les pattes d'horloge OSC1 et OSC2.
        • Plus la résistance de polarisation entre MCLR et Vdd.


    « Modifié: Vendredi 18 Septembre 2015, 23:56:41 pm par gc339 »
    Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard