Gamoover

[move]Bienvenue sur Gamoover, portail francophone de l'arcade.

Étude/Réalisation d'un Jumbo Multi Jamma Switcher up to 12-in-1

Démarré par gc339, Mardi 10 Mai 2011, 01:10:30 AM

AsPiC


Eko

rhooooo la vache !!!  :o :o :o
GC, le no limit de la compétence en électronique  =:))

Une nouvelle fois  <:)
Le RT, le WIP, des drogues dures ça nan ?

-RT Jeutel Mint !          -RT Twin STC          -WIP Twin STC         -RT Mini Jeutel    
-WIP Noami White       -WIP Noami Black    -WIP Gameroom      -WIP Mini Jeutel

gc339

Généralités :

Citation de: gc339 le Jeudi 11 Août 2011, 13:29:19 PM
Le boîtier de la télécommande du "truc" devra comporter :

  • Une touche pour chaque carte Jamma, soit 12 touches de sélection.
  • Une touche supplémentaire pour mettre le "truc" en veille. Cette 13ème touche désactivera la carte Jamma en service et imposera l'inactivité à toutes les autres.

Réflexion faite, pourquoi mobiliser une 13ème touche sur la télécommande pour désactiver les cartes, alors qu'il suffit de prévoir une fonction flip-flop pour chaque touche :

  • Un premier appui active la carte associée,
  • Un second appui sur cette même touche désactive la carte,
  • Un troisième appui la réactive,
  • Un quatrième la désactive à nouveau,
  • Et ainsi de suite...
L'appui sur une touche différente désactive immédiatement la carte active pour en activer une nouvelle.

Les 12 premières touches de 0 à 11 (0..9, A, B) seront alors utilisées pour activer/désactiver chacune des douze cartes.
Il restera donc 4 touches (C, D, ٭, #) pour émettre des commandes auxiliaires comme par exemple :

  • Créditer le jeux actif.
  • Modifier le réglage d'un triple potentiomètre électronique pour réajuster le niveau vidéo après la sélection d'une nouvelle carte.

D'ailleurs, pour une meilleure uniformisation, il vaudrait peut être mieux remodifier la disposition des cabochons du clavier de la télécommande pour réserver les 12 touches "téléphonique" (de 0 à 9, étoile et dièse ) à la sélection des cartes et dédier les 4 touches alphabétiques (de A à D ) aux commandes auxiliaires.


1234
5678
90٭#
ABCD
Ainsi les inscriptions sur les 9 premières touches correspondront directement au n° de connecteur du "truc", la touche zéro au connecteur n° 10 et les touches étoile et dièse respectivement au connecteurs n° 11 et n° 12.
Le code émis par la télécommande sera inférieur d'une unité par rapport au n° de connecteur concerné, la touche "1" émettra le code zéro pour activer/désactiver le connecteur n° 1, la touche "2" émettra le code un pour le connecteur n° 2 et ainsi de suite.




Le fonctionnement :


  • Activation/désactivation d'une carte, ce sont des ordres qui perdurent après leur disparition, 3 cas de figure :

    • Le code nouvellement reçu correspond à celui de la carte active :

      • Cette dernière est immédiatement désactivée (en fait toutes les cartes le seront en même temps pour une meilleure sécurité ).
    • Le code nouvellement reçu est différent de celui de la carte active :

      • Cette dernière est immédiatement désactivée (même remarque que ci-dessus ), la nouvelle ne sera activée que quand l'émission du code aura cessé, c'est à dire qu'à partir de l'instant où la touche de la télécommande aura été relâchée par l'utilisateur.
        La mise hors service immédiate de l'ancienne carte suivie de la mise en service différée de la nouvelle, puisque suspendue au relâchement de la touche sur la télécommande, devrait permettre de se passer d'une temporisation pour éviter une alimentation simultanée fugitive des deux cartes due au temps de réaction des relais.
    • Le code vient d'être reçu alors qu'aucune des cartes n'est active :

      • La carte désignée par ce code ne sera activée qu'au relâchement de la touche correspondante sur la télécommande.
  • Commandes auxiliaires, ce sont des ordres qui ne durent que le temps de leur présence :

    • La sortie correspondante sera :

      • Activée dés apparition du code.
      • Désactivée immédiatement après la disparition du code.
    • Ces commandes auxiliaires n'interfèrent pas avec les commandes d'activation/désactivation des cartes et n'impactent d'aucune manière la carte en service à ce moment là ainsi que les autres cartes qui sont hors service.




Le schéma coté réception télécommande.

La réception radio

Assurée par un module récepteur Aurel RX-4MM5






Aurel recommande de découpler le +5 volts au ras du module avec un condensateur céramique de 0,1 µF.
Un condensateur de 10 µF doit être connecté sur la sortie "RSSI Output" (broche 13 ).
L'entrée AGC On-Off (broche 11 ) doit être reliée à la masse pour que le CAG du récepteur soit activé.




L'interface avec le "truc"




1) Le décodage des trames reçues.

Assuré par le boîtier 45027.

Les trames issues du module récepteur Aurel RX-4MM5 (Data Out, broche 14 ) aboutissent sur son entrée Din (broche 9 ).
L'adresse ternaire présente dans la trame reçue étant identique à celle programmée sur ses entrées A1 à A5 (broches 1 à 5 ) :

  • L'activation du signal VT (broche 11 ) indique la réception d'un code valide.
  • Ce code est alors disponible sur les sorties D6 à D9 (broches 15 à 12 ).

2) La logique de traitement.

Assurée par un µcontrolleur PIC 16F84A.

Le mode oscillateur choisi pour ce µcontrolleur est le mode RC car une horloge précise n'est pas nécessaire, de plus avec ce mode il n'y a pas à subir la période de stabilisation de 1024 cycles d'horloge lorsqu'il est réveillé par une interruption.
Le seul hic avec ce mode est que Microchip ne fourni aucune abaque donnant la fréquence d'oscillation en fonction du produit RC, cette fréquence différant trop d'un µcontrolleur à un autre et étant grandement dépendante de la tension d'alimentation ainsi que de la température. Il va donc falloir déterminer la valeur de R et de C expérimentalement pour obtenir une fréquence entre 100 et 500 kHz.

En sommeil permanent, le  µcontrolleur est interrompu par un changement d'état sur le signal VT qui est connecté sur son entrée RB0/INT (broche 6 ).

Le n° de connecteur à activer/désactiver est figé sur les sorties RB4 à RB7 (broches 10 à 13 ). En fait c'est la valeur du code reçu (de 00H à 0BH,  en hexadécimal ) qui est transférée sur ces sorties à destination des multiplexeurs vidéo et de la commande des relais.
L'état de la sortie RA4/T0CKI (broche 3 )est fonction de l'interprétation du code reçu par le µcontrolleur, il détermine s'il s'agit d'un ordre d'activation ou d'inactivation.

Les deux bits de poids faible de l'ordre reçu (de 0CH à 0FH en hexadécimal) sont transférés sur les sorties RB2 et RB3 pour indiquer le n° de la commande auxiliaire reçue, l'état de la sortie RB1 (broche 7 ) indique quand une de ces commandes est activée.

3) La commande des relais.

A chaque connecteur est associé une triplette de relais.

  • Un relais 1T ou 1RT pour commuter le rail +5 volts, modèle pressenti : 40.61 marque Finder.
  • Un relais 2T ou 2RT pour commuter les rails +12 volts et -5 volts, modèle pressenti : 40.52 marque Finder.
  • Un relais 2T ou 2RT pour aiguiller les fils de la sortie haut-parleur, modèle encore non choisi.
Les bobines des deux premiers relais ont déjà une consommation de 110 mA sous 12 volts, le transistor qui commandera les 3 en // devra donc être à même de supporter un courant permanent de l'ordre de 165 mA. Un transistor BS170 fera l'affaire avec ses 500 mA max ou éventuellement un boîtier VQ1000J avec ses 4 transistors mosfet indépendants donné chacun pour 225 mA max.

Le schéma original du "truc", celui avec le commutateur rotatif, doit être légèrement modifié puisque le commun des bobines de relais avec leurs diodes en // doit être maintenant être connecté au rail +12 volts et non plus à la masse ou 0 volt.

Le n° de connecteur issu du µcontrolleur (RB4 à RB7 ) est décodé par un circuit HC4514, seules ses 12 premières sorties sont utilisées et raccordées sur les gates des transistors BS170 qui commandent les bobines des relais.
L'ordre d'activation issu du µcontrolleur (RA4/T0CKI ) valide ce décodeur (entrée G/, broche 23 ) alors que celui de désactivation à pour effet de l'inhiber.

4) Les switches analogiques.

Ces switches de type HC4067, sont chargés d'aiguiller les 4 signaux vidéo : rouge, vert, bleu et synchronisation, un boîtier est dédié à chaque signal.
Seules les 12 premières entrées de chaque boîtier sont utilisées, chacune est connectée sur un connecteur différent mais toujours sur la même broche de sortie vidéo. Les entrées inutilisées sont raccordées à la masse.

Le n° de connecteur issu du µcontrolleur (RB4 à RB7 ) permet de sélectionner le switch adéquat dans chaque boîtier (S0 à S3, broches 10, 11, 14 et 13 ).
L'ordre d'activation issu du µcontrolleur (RB4/T0CKI ) valide l'ensemble des boîtiers HC4067 (entrée EN/, broche 15 ) alors que celui de désactivation à pour effet de les inhiber.
Afin de ressortir des signaux vidéo parfaitement nuls à destination du moniteur, la sortie de chaque boîtier HC4067 est court-circuitée à la masse par un des switches d'un boîtier HC4066 quand ces premiers boîtiers sont inhibés.

Chaque entrée de boîtier HC4067 est reliée à la masse à travers une résistance de 470 kΩ pour évacuer l'électricité statique qui pourrait s'accumuler sur les broches des connecteurs libres, ceux où aucune carte n'est enfichée.

5) Les sorties auxiliaires.

Le n° de commande auxiliaire issu du µcontrolleur (RB2 et RB3 ) est appliqué sur un boîtier décodeur double 4555B de type CMOS standard, le boîtier HC4555 n'existant pas.
Les deux décodeurs sont raccordés pour éviter que les entrées du deuxième soient en l'air. Seul le premier est utilisé et ses sorties commandent les gates de transistors BS170.
Le drain de l'un de ces transistors pourra par exemple être connecté sur l'entrée crédit (B16 du connecteur Jamma mâle du "truc" ) pour créditer la carte active à partir de la télécommande.

L'ordre d'activation issu du µcontrolleur (RB1 ) valide ces deux décodeurs (entrées EN/, broches 1 et 15 ) uniquement pendant la réception d'une des 4 commandes auxiliaires.

6) L'alimentation +5 volts

Elle n'est pas représentée sur le schéma.
Plutôt que d'alimenter directement à partir du rail +5 volts du connecteur Jamma encartable mâle, il est préférable de le faire à partir du rail +12 volts à travers un régulateur genre 7805 pour s'affranchir de toutes les perturbations aussi minimes soit-elles qui pourraient être véhiculées sur ces rails.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





Seyel


Iro

Que çà donne envie !!!
En plus d'être utilisé pour le Jamma , il pourra l'être pour le retro gaming !!!
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

AsPiC

Citation de: Iro le Mardi 11 Octobre 2011, 09:42:03 AM
Que çà donne envie !!!
En plus d'être utilisé pour le Jamma , il pourra l'être pour le retro gaming !!!


Le fantôme du commutateur péritel/rgb is back :ang:

Eko

Arfff trop court le soir du meeting pour discuter de tout ça  ;)
On continuera sur les Av  ^-
Le RT, le WIP, des drogues dures ça nan ?

-RT Jeutel Mint !          -RT Twin STC          -WIP Twin STC         -RT Mini Jeutel    
-WIP Noami White       -WIP Noami Black    -WIP Gameroom      -WIP Mini Jeutel

gc339

Généralités :

Citation de: gc339 le Mardi 11 Octobre 2011, 00:30:18 AM
D'ailleurs, pour une meilleure uniformisation, il vaudrait peut être mieux remodifier la disposition des cabochons du clavier de la télécommande pour réserver les 12 touches "téléphonique" (de 0 à 9, étoile et dièse ) à la sélection des cartes et dédier les 4 touches alphabétiques (de A à D ) aux commandes auxiliaires.


1234
5678
90٭#
ABCD
Ainsi les inscriptions sur les 9 premières touches correspondront directement au n° de connecteur du "truc", la touche zéro au connecteur n° 10 et les touches étoile et dièse respectivement au connecteurs n° 11 et n° 12.
Le code émis par la télécommande sera inférieur d'une unité par rapport au n° de connecteur concerné, la touche "1" émettra le code zéro pour activer/désactiver le connecteur n° 1, la touche "2" émettra le code un pour le connecteur n° 2 et ainsi de suite.

En fin de compte, comme il est difficile de trouver un clavier avec des touches hexadécimales, autant utiliser le clavier téléphonique 16KEY Velleman tel quel sans le démonter pour modifier la disposition des cabochons.
Le clavier se câble normalement comme suit sur les entrées de l'encodeur MM74C902 :







Clavier 16KEY
MM74C902
───COL1 / Pin 1──────X1 / Pin 11
───COL2 / Pin 2──────X2 / Pin 10
───COL3 / Pin 3──────X3 / Pin 8
───COL4 / Pin 4──────X4 / Pin 7
123A───ROW1 / Pin 5──────Y1 / Pin 1
456B───ROW2 / Pin 6──────Y2 / Pin 2
789C───ROW3 / Pin 7──────Y3 / Pin 3
٭0#D───ROW4 / Pin 8──────Y4 / Pin 4

Le code émis par chaque touche étant complètement différent de l'inscription sur son cabochon, il va donc être nécessaire de le transcoder. Le plus simple est de faire effectuer ce transcodage à la réception par le PIC 16F84A de la logique de traitement.












Touche clavier
:   1   2   3   4   5   6   7   8   9   0   ٭   #   A   B   C   D
Code émis/reçu
:0124568910131214371115
Transcodage
:12345678910111213141516
Connecteur n°
:123456789101112....
Télécommande n°
:............1234

Avec ce transcodage, les connecteurs sont numérotés de 1 à 12, le connecteur zéro est donc fantôme. Le fait de sélectionner ce connecteur n° zéro permet alors d'inhiber tous les autres :

  • La sortie S0 ainsi que les sorties S13, S14 et S15 du décodeur HC4514 seront inutilisées. Seules les sorties S1 à S12 seront raccordées sur les gates des transistors BS170 qui commandent les relais.
  • L'entrée I0 ainsi que les entrées I13, I14 et I15 des switches HC4067 seront connectées à la masse. Les autres de I1 à I12 seront raccordées sur les sorties RVB/synchro des connecteurs Jamma. Le boîtier HC4066 n'est alors plus indispensable pour mettre les sorties RVB/synchro à la masse quand aucune carte physique n'est activée, le fait de sélectionner le connecteur fantôme n° zéro réalise cette opération.
Le schéma préalablement publié a donc été mis à jour :




Une inversion des broches du PIC qui validaient/inhibaient les boîtiers a été effectuée par la même occasion pour diminuer la consommation au repos :

  • Le décodeur HC4514 et les switches HC4067 sont maintenant validés/inhibés par la broche RB3 du PIC 16F84A
  • Le décodeur 4555B est maintenant validé/inhibé par la broche RA4.

Justification :

  • Les broches d'entrée/sortie du PIC (RB0...RA3 et RB0...RB7) sont du type CMOS, c'est à dire que chacune dispose de deux transistors :

    • Le 1er pour positionner la sortie à l'état haut quand il est ON, le 2ème étant alors OFF.
    • Le 2ème pour positionner la sortie à l'état bas quand il est ON, le 1er étant alors OFF.
    Les deux transistors ne sont jamais ON en même temps sinon l'alimentation +5 volts serait court-circuitée, par contre ils peuvent rester OFF en permanence quand la broche est déclarée comme entrée.
    Étant donné qu'il n'y a qu'un seul transistor qui est à l'état ON en même temps, la broche de sortie consomme aucun courant. Il est donc préférable d'utiliser une de ces broches, en l'occurrence la RB3 pour assurer un état logique durable, qui ne change qu'occasionnellement, sur l'entrée G/ du décodeur HC4514 ainsi que sur l'entrée EN/ des switches HC4067.
  • La broche RA4 du PIC est une sortie à drain ouvert, seul subsiste le transistor qui impose l'état bas, une résistance de rappel au +5 volts est donc nécessaire pour obtenir le niveau logique haut quand ce transistor est à l'état OFF. Quand ce même transistor est à l'état ON, la sortie RA4 est alors au niveau logique zéro et un courant non négligeable circule dans la résistance de rappel.
    Il est donc ici plus judicieux d'utiliser la broche RA4 car le niveau logique zéro nécessaire pour valider le décodeur 4555B par son entrée EN/ n'est que temporaire, la consommation de courant induite ne durant alors que le temps d'appui sur la touche alphabétique correspondante de la télécommande.




Le code source du PIC 16F84A

Citation de: gc339 le Mardi 11 Octobre 2011, 00:30:18 AM
Le fonctionnement :


  • Activation/désactivation d'une carte, ce sont des ordres qui perdurent après leur disparition, 3 cas de figure :

    • Le code nouvellement reçu correspond à celui de la carte active :

      • Cette dernière est immédiatement désactivée (en fait toutes les cartes le seront en même temps pour une meilleure sécurité ).
    • Le code nouvellement reçu est différent de celui de la carte active :

      • Cette dernière est immédiatement désactivée (même remarque que ci-dessus ), la nouvelle ne sera activée que quand l'émission du code aura cessé, c'est à dire qu'à partir de l'instant où la touche de la télécommande aura été relâchée par l'utilisateur.
        La mise hors service immédiate de l'ancienne carte suivie de la mise en service différée de la nouvelle, puisque suspendue au relâchement de la touche sur la télécommande, devrait permettre de se passer d'une temporisation pour éviter une alimentation simultanée fugitive des deux cartes due au temps de réaction des relais.
    • Le code vient d'être reçu alors qu'aucune des cartes n'est active :

      • La carte désignée par ce code ne sera activée qu'au relâchement de la touche correspondante sur la télécommande.

Le mode opératoire a été modifié en §1, la demande de désactivation de la carte en service ne sera effective qu'au relachement de la touche :

Citation
Le fonctionnement :


  • Activation/désactivation d'une carte, ce sont des ordres qui perdurent après leur disparition, 3 cas de figure :

    • Le code nouvellement reçu correspond à celui de la carte active :

      • C'est une demande de désactivation de la carte en service, elle ne sera effectivement désactivée que quand l'émission du code aura cessé, c'est à dire qu'à partir de l'instant où la touche de la télécommande aura été relâchée par l'utilisateur. (en fait toutes les cartes seront désactivées en même temps pour une meilleure sécurité ).
    • Le code nouvellement reçu est différent de celui de la carte active :

      • Cette dernière est immédiatement désactivée (même remarque que ci-dessus ), la nouvelle ne sera activée que quand l'émission du code aura cessé, c'est à dire qu'à partir de l'instant où la touche de la télécommande aura été relâchée par l'utilisateur.
        La mise hors service immédiate de l'ancienne carte suivie de la mise en service différée de la nouvelle, puisque suspendue au relâchement de la touche sur la télécommande, devrait permettre de se passer d'une temporisation pour éviter une alimentation simultanée fugitive des deux cartes due au temps de réaction des relais.
    • Le code vient d'être reçu alors qu'aucune des cartes n'est active :

      • La carte désignée par ce code ne sera activée qu'au relâchement de la touche correspondante sur la télécommande.

Le code source du programme à flasher dans le PIC a été écrit, assemblé, puis testé avec le simulateur intégré dans l'environnement de développement intégré MPLAB IDE que l'on peut récupérer gratuitement sur le site de Microchip.




Pour l'instant ce bout de programme n'a pas encore été testé en réel avec tous les autres boîtiers décodeurs et switches de l'interface. Il le sera dés que le prototype en mini-wrapping sera prêt, il faudra alors faire la mise au point finale et des modifications seront susceptibles d'y être effectuées.







;**********************************************************************
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename :     MJL.asm                                           *
;    Date :         26/10/2011                                        *
;    File Version : 1.0                                               *
;                                                                     *
;    Author : gc339                                                   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F84A.INC                                      *
;                                                                     *
;**********************************************************************


listp=16F84A; Directive to define processor
#include<p16F84A.inc>; Processor specific variable definitions

   __CONFIG   _CP_ON & _WDT_OFF & _PWRTE_OFF & _RC_OSC   ; Directive for embeding configuration bits within '.asm' file

UDATA0x0C; Variable definitions
NewKeyRES1
OldKeyRES1

ORG0x000; Reset vector
StartclrfPORTB; Preset PORTB outputs
movlwB'00000001'; RB0 as input, RB1 to RB7 as outputs
trisPORTB
gotoMain; Go to beginning of program

ORG0x004; Interrupt vector location
IntVectmovfPORTA,W; Read key code
callTranslt; Code translation
movwfNewKey; Save key
btfssINDF,INTEDG; Check which edge on RBO caused interrupt
gotoKeyOFF; Key released on failing edge

KeyONmovlw13; Check if command, code >= 13 (0DH)
subwfNewKey,W
btfssSTATUS,C; Skip if command
gotoKeyChk; Jump if selection, code < 13 (0DH)
addwfNewKey,W; To shift key code one step left
addlw-13
andlwB'00000110'; Keep only useful bits
iorwfPORTB,F; RB1 / RB2 bit setting
iorlwB'11111001'
andwfPORTB,F; RB1 / RB2 bit resetting
bcfPORTA,RA4; Unsetting RA4 enables the 4555B decoder
gotoIntEnd

KeyChkmovfOldKey,W; Is new key same as previous ?
subwfNewKey,W
btfssSTATUS,Z; Nothing to do if so
gotoDisabl; Else disable all connectors including the one currently selected
gotoIntEnd

KeyOFFmovlw13; Check if command, code >= 13 (0DH)
subwfNewKey,W
btfssSTATUS,C; Skip if command
gotoConSel; Jump if selection, code < 13 (0DH)
bsfPORTA,RA4; Setting RA4 disables the 4555B decoder
gotoIntEnd

ConSelmovfOldKey,W; Is new key same as previous ?
subwfNewKey,W
btfscSTATUS,Z; Select new connector if not
DisablclrfNewKey; Connector zero is dummy, disable all connectors
movlwB'00001111'
andwfPORTB,F; Disables all connectors before updating
movfNewKey,W; Reload key, Z flag is updated
movwfOldKey; Update OldKey
swapfOldKey,W
andlwB'11110000'; Keep only left nibble
iorwfPORTB,F; Update PORTB
bcfPORTB,RB3; Enables HC4514 decoder and HC4067 switches

IntEndbcfINTCON,INTE; Interrupt will be enabled further
retfie

MainmovlwB'00010000'; Setting RA4 disables the 4555B decoder
movwfPORTA
movlwB'00001111'; RA4 as output, RA0 to RA3 as inputs
trisPORTA
clrfOldKey
clrfNewKey
movlwOPTION_REG; Indirect addressing for reaching option register
movwfFSR
bsfINDF,INTEDG ; Set INTEDG for RB0 interrupt on rising edge
bsfINTCON,GIE; Enable global interrupt

LoopbcfINTCON,INTF; Clear RB0 interrupt flag
bsfINTCON,INTE; Enable RB0 interrupt
sleep; Waiting, waken up by a pressed/released key
nop
movlwOPTION_REG; Indirect addressing for reaching option register
movwfFSR
movlwB'01000000'; Bit mask to toggle edge select bit for RB0 interrupt
xorwfINDF,F; Toggle bit INTEDG
gotoLoop

TransltandlwB'00001111'; Keep only right nibble
addwfPCL,F; Code Translation
retlw1
retlw2
retlw3
retlw13; Key 'A', command n° 1
retlw4
retlw5
retlw6
retlw14; Key 'B', command n° 2
retlw7
retlw8
retlw9
retlw15; Key 'C', command n° 3
retlw11; Key '٭', connector n° 11
retlw10; Key '0', connector n° 10
retlw12; Key '#', connector n° 12
retlw16; Key 'D', command n° 4

END; Directive 'end of program'
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





nintenping

Bon dieu, c'est du très beau boulot, on dirait du bricolage a la benheck   :-*

gc339

Le câblage de l'interface

Le câblage sera réalisé en mini-wrapping, les barrettes à wrapper et les supports de circuits intégrés montés face composants sur un circuit imprimé ECS3 Velleman qui végétait au fond d'un tiroir.


Ce circuit imprimé avec ses pastilles rectangulaires reliant les trous par groupe de 3 convient parfaitement pour cette réalisation. Un seul bémol, il ne reste que 135 mm d'utilisables pour installer les barrettes de mini-wrapping sur une longueur de carte de 160 mm, cette surface perdue aurait pourtant été la bienvenue vu le nombre de composants à y installer.




Le raccordement de la vidéo en provenance des connecteurs Jamma ainsi que les commandes à destination des bobines de relais s'effectueront sur la carte interface par l'intermédiaire de connecteurs achetés sur iB :


L'intérêt de ces connecteurs, c'est qu'ils sont auto-sertissants et qu'ils peuvent s'embrocher sur des barrettes à wrapper. Les connecteurs approvisionnés ne disposant que de 7 contacts, 2 de ces connecteurs seront nécessaires par couleur pour raccorder le signal vidéo en provenance de chacun des 12 connecteurs Jamma. Deux connecteurs seront aussi nécessaires pour relier la carte interface aux bobines des relais, plus un derniers pour sortir les commandes auxilliaires.




La disposition des supports et des barrettes à wrapper sur la carte ECS3 Velleman :


Commentaires :

  • Le récepteur radio Aurel Rx-4MM5 est disposé à plat contre le circuit-imprimé.
  • Les connecteurs auto-sertissants viendront s'embrocher sur les barrettes à wrapper latérales. Ces 11 barrettes sont différentes de celles utilisées pour le câblage des circuits intégrés car elles sont 6 mm plus longues pour pouvoir enrouler un fil à la base de chaque broche tout en disposant d'une longueur libre suffisante au dessus pour y embrocher le connecteur auto-sertissant.
  • Pour la facilité du câblage, des boîtiers VQ1000J comportant 4 mosfet's ont été préférés aux 16 transistors BS170. En cas de problème il sera toujours possible de remplacer ces boîtiers par des plates-formes sur lesquelles auront été soudés 4 mosfet's BS170.


  • Au niveau de chaque paire de connecteurs vidéo auto-sertissants :

    • Le connecteur supérieur véhiculera les signaux d'une même couleur en provenance des connecteurs Jamma 1 à 7
    • Toujours pour la même couleur, le connecteur inférieur véhiculera les signaux issu des connecteurs 8 à 12, plus le signal en direction du connecteur encartable Jamma mâle. La masse pourra éventuellement être connectée sur la dernière broche disponible.


    ┌──────────┬────────────────────┐
    │Connecteur│      Broche N°     │
    │   auto-  ├──┬──┬──┬──┬──┬──┬──┤
    │sertissant│ 1│ 2│ 3│ 4│ 5│ 6│ 7│
    ╞══════════╪══╪══╪══╪══╪══╪══╪══╡
    │          │ Connecteur Jamma N°│
    ├──────────┼──┼──┼──┼──┼──┼──┼──┤
    │Supérieur │ 1│ 2│ 3│ 4│ 5│ 6│ 7│
    ├──────────┼──┼──┼──┼──┼──┼──┼──┤
    │Inférieur │ 8│ 9│10│11│12│ MS
    └──────────┴──┴──┴──┴──┴──┴──┴──┘
    "M" pour masse, "S" pour sortie vers connecteur encartable Jamma mâle

    Les résistances destinées à évacuer les charges électrostatiques éventuelles seront réparties sur deux réseaux, un premier de 7 résistances et un second de 5 disposés contre les barrettes qui accueillent la paire de connecteurs.
  • Idem pour la paire de connecteurs auto-sertissants véhiculant les commandes des relais :

    • Connecteur supérieur : commandes des relais commutant l'alimentation sur les connecteurs Jamma 1 à 7.
    • Connecteur inférieur : commandes des relais associés aux connecteurs Jamma 8 à 12, 2 contacts restent inutilisés donc disponibles.
  • Le connecteur des sorties auxilliaires disposant de 3 contacts libres, ils pourront être utilisés à profit pour raccorder le +12 volts en provenance du connecteur encartable Jamma mâle sur l'alimentation de la carte.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#90
Reprise du wip après quelque temps de mise en veille.

Câblage de l'interface (suite)

Le câblage réalisé en mini-wrapping va être effectué en plusieurs étapes avec test du fonctionnement à chaque avancée.

La 1ère de ces étape concerne le câblage du récepteur Aurel et du décodeur 45027 :



  • La circuiterie de l'interface est destinée à être alimentée en +5 volts  à partir de son propre régulateur, lui même alimenté par le +12 volts issu du connecteur Jamma encartable. Ce régulateur n'étant pas encore câblé, c'est un bloc d'accumulateurs Ni-MH qui va lui être substitué pour les premiers tests.
  • Dans l'immédiat pas besoin de connecter une antenne de réception, la sensibilité du récepteur est telle que, sur l'oscilloscope, je vois passer des trames de temps à autre sur la sortie data du récepteur. Trames que j'impute aux télécommandes d'ouverture de portail d'immeubles ou de portières de voiture de mes voisins, autant dire qu'il ne devrait pas y avoir de problème de réception avec la télécommande qui est manipulée à moins de 50 cm de l'interface.
  • Les entrées de configuration de l'adresse ternaire ne sont pas câblées, elles sont en l'air c'est à dire à OFF aussi bien sur le 45026 de la télécommande que sur le 45027 de l'interface, le second devrait donc accepter les trames émises par le premier sans sourciller.

Première vérification avec l'oscilloscope, les trames émises par la télécommande sont bien disponible sur la sortie data du récepteur Aurel (broche 14 ) mais rien ne bouge sur la sortie VT du 45027 (broche 11 ) !
RAS après une nouvelle vérification du câblage...
Relecture attentive du datasheet du 45027 pour essayer de comprendre où ça cloche...

Restent les valeurs des résistances/condensateurs car, lors du dessin du schéma initial, j'ai repris celles de l'animation ci-dessous sans effectuer de vérification :


Il suffit de comparer ces valeurs avec celles préconisées dans le tableau du datasheet pour vérifier si elles sont appropriées ou tout au plus plausibles :


C'est le couple RTC/CTC du 45026 émetteur qui détermine les autres couples R/C sur le 45027 récepteur. Les valeurs de ce premier couple étant de 51 kΩ/5,6 nF, c'est donc la dernière ligne du tableau qui correspond le mieux au cas présent.

  • Pas de souci entre le couple R1/C1 = 51 kΩ/22 nF de l'animation et celui du tableau préconisant 50 kΩ/20 nF, les valeurs sont relativement proches et c'est bien ce premier couple que j'ai soudé sur la plaque à wrapper.
  • Idem avec R2/C2 = 200 kΩ/100 nF, les valeurs sont même identiques entre l'animation et le tableau. Par contre j'ai du déconner quelque part quand j'ai reporté les valeurs sur le schéma de l'interface car j'ai indiqué une valeur de 51 kΩ pour R2 au lieu de 200 kΩ. Et conformément à mon schéma, c'est bien une résistance de 51 kΩ que j'ai soudée.

Tout rentre dans l'ordre après remplacement de la résistance R2 par une de 200 kΩ, la sortie VT du 45027 passe bien à 1 dés appui sur une touche de la télécommande et ce dernier reste bien disponible sur les sortie D6 à D9 même après relâchement de cette même touche.


Il ne reste plus qu'à corriger la valeur de la résistance R2 sur le schéma avant de passer à l'étape suivante ...
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

Revérification des valeurs des composants autour des circuits intégrés 45026/45027

Pour éliminer tout futur problème, la revérification des valeurs des résistances et condensateurs autour de couple 45026/45027 s'impose car déjà la valeur pour CTC de 5,1 nF donnée dans le tableau est une valeur de la série E24 quasi impossible à trouver. C'est pour cela qu'une valeur de 5,6 nF, la plus proche dans la série E12, lui a été préférée dans l'animation.

A vrai dire, on trouve facilement toutes les valeurs de la série E24 pour les résistances, par contre il vaut mieux se limiter aux valeurs de la série E6 pour les condensateurs afin de faciliter leur approvisionnement. C'est pour cela que les calculs doivent être refaits à chaque fois avec une valeur imposée pour le condensateur, il y aura toujours une valeur de résistance à moins de 5% de celle calculée.


Tous les formules données sur le datasheet sont basées sur le produit RTC × CTC ou constante de temps τ = 51 × 103 ×5,6 × 10-9 = 285,6 × 10-6 soit τ = 285,6 µs.

  • On en déduit la période Tosc = 2,3 × τ soit 656,88 µs d'où fosc = 1 ÷ Tosc = 1522 Hz
    La fréquence résultante est de 11% inférieure aux 1710 Hz du tableau, le recalcul des autres valeurs est donc bien justifié.
  • C1 possède une capacité de 22 nF dans l'animation, c'est bien une valeur de la série E6.
    Avec R1 × C1 = 3,95 × τ, il en résulte pour R1 une valeur théorique de 51,28 kΩ.
    La valeur standardisée de 51 kΩ convient donc parfaitement (différence de 6‰ ). Le schéma n'a pas besoin d'être modifié.
  • C2 possède une capacité de 100 nF dans l'animation, c'est aussi une valeur de la série E6.
    Avec R2 × C2 = 77 × τ, il en découle une valeur théorique de 219,91 kΩ pour R2.
    La valeur standardisée la plus approchée de 220 kΩ convient donc plus que parfaitement et est bien plus appropriée que celle de 200 kΩ de l'animation.


C'est donc cette valeur de 220 kΩ qui sera retenue pour la mise à jour du schéma et le remplacement de la résistance soudée par erreur sur la plaque à wrapper.




Ajustement de la fréquence d'horloge du PIC16F84A

Citation de: gc339 le Mardi 11 Octobre 2011, 00:30:18 AM
2) La logique de traitement.

Assurée par un µcontrolleur PIC 16F84A.

Le mode oscillateur choisi pour ce µcontrolleur est le mode RC car une horloge précise n'est pas nécessaire, de plus avec ce mode il n'y a pas à subir la période de stabilisation de 1024 cycles d'horloge lorsqu'il est réveillé par une interruption.
Le seul hic avec ce mode est que Microchip ne fourni aucune abaque donnant la fréquence d'oscillation en fonction du produit RC, cette fréquence différant trop d'un µcontrolleur à un autre et étant grandement dépendante de la tension d'alimentation ainsi que de la température. Il va donc falloir déterminer la valeur de R et de C expérimentalement pour obtenir une fréquence entre 100 et 500 kHz.

La fréquence de l'oscillateur intégré au PIC18F84A doit être vérifiée pour savoir si le couple 10 kΩ/1 nF sur sa broche 16 (OSC1/CLKIN ) est approprié pour lui faire générer une horloge comprise entre 100 et 500 kHz.

L'opération consiste à faire exécuter d'entrée une boucle sans fin au PIC18F84A, l'essentiel étant que ses bits de configuration soient correctement positionnés par la directive "__CONFIG" du programme. Les signaux carrés de l'horloge peuvent alors être observés sur sa broche 15 (OSC2/CLKOUT ). Ce n'est pas la fréquence de l'oscillateur que l'on observe directement mais celle de l'horloge interne qui est quatre fois moins rapide.

Le bout de programme :






;**********************************************************************
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename :     OscTest.asm                                       *
;    Date :         06/03/2012                                        *
;    File Version : 1.0                                               *
;                                                                     *
;    Author : gc339                                                   *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F84A.INC                                      *
;                                                                     *
;**********************************************************************


listp=16F84A; Directive to define processor
#include<p16F84A.inc>; Processor specific variable definitions

   __CONFIG   _CP_ON & _WDT_OFF & _PWRTE_OFF & _RC_OSC   ; Directive for embeding configuration bits within '.asm' file

ORG0x000; Reset vector
LoopgotoLoop; Endless loop

END; Directive 'end of program'


La programmation du PIC avec un clone chinois d'ICD2





Prélèvement de la fréquence d'horloge du PIC sur sa patte 15 (OSC2/CLKOUT ) avec la sonde de l'oscilloscope.

La mesure sur le réticule de l'oscilloscope donne une période de 55 µs soit une fréquence d'horloge de 18,2 kHz. Ce n'est pas assez rapide, il faudrait au moins 5 à 6 fois plus.
Il faut donc remplacer le couple 10 kΩ/1 nF dont le produit ou constante de temps τ = 10 µs par un autre couple ayant un "τ" 5 à 6 fois moindre.

  • Microchip recommande une valeur supérieure à 2,2 kΩ pour la résistance afin d'éviter l'instabilité ou l'arrêt de l'oscillateur. Une résistance de 4,7 kΩ semble être un bon compromis et elle permet réduire le "τ" de plus de 50% par rapport à l'ancienne de 10 kΩ.
  • Recommandation similaire pour le condensateur, sa valeur doit être supérieure à 20 pF pour éviter les problèmes de bruit et stabilité. Une valeur décuple, en l'occurrence 220 pF permet de "noyer" toutes les capacités parasites du câblage et assure une réduction de plus de 25% du "τ" par rapport au condensateur précédent de 1 nF.
La nouvelle constante de temps est de 4,7 × 103 × 220 × 10-12 soit τ = 1,034 µs. Avec cette nouvelle valeur dix fois moindre, on peut espérer obtenir une fréquence d'horloge presque 10 fois plus rapide.


Le signal d'horloge tel qu'il est affiché sur l'oscilloscope, malheureusement les graduations du réticule ne sont pas visibles sur la photo.

Après remplacement du couple 10 kΩ/1 nF par le couple 4,7 kΩ/220 pF, la période est mesurée à 6,2 µs soit une fréquence d'horloge de 161,3 kHz, c'est presque 9 fois plus rapide qu'avec l'ancien couple.
Le test du programme sera donc effectué avec cette horloge à 161,3 kHz, l'augmenter encore impose de réduire la valeur de la constante de temps et fait courir un risque de dysfonctionnement en se rapprochant des contraintes imposées sur les valeurs des deux composants du couple.

A suivre...

Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





olschool

Même si je ne poste plus depuis un petit moment sur ce tread je le lis avec attention,

mon intêret n'a pas baisé d'un iota bien au contraire.

J'avoue cependant avoir décroché au niveau technique depuis un petit moment,autant le principe est compris mais la mise en oeuvre me dépasse totalement.

On est passé depuis un bon moment à la réalisation "pro" du truc et je pense que peu de personnes sont/seront capables de reproduire un tel travail.
De toute façon ce n'étais pas le but au départ.

en tout cas super boulot

^-^

par contre comme je te l'avais indiqué il y a un bout de temps,il faudra faire les comptes à l'arrivée
pour mettre en balance avec ce qui existe dans le commerce même si c'est incongru de comparer une dacia et une ferrari


Ton jumbo Multi-Jamma Switcher up to 12-in-1

est bien plus performant et offre bien plus de possibilité que tout ce qui existe sur le marché.

et les systèmes valable coutent une somme dèja bien rondelette (vf un de mes premier post)
nous en reparlerons donc plus tard le moment venu...

La question qui me taraude est la suivante :

Compte tu lancer une mini production de ce système ?

une fois la réalisation finie ?



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



Citation de: ducatman1098 le Lundi 05 Novembre 2018, 22:45:37 PM
En rentrant le camion au garage,  je me suis aperçu que j avais récupérer une after burner  ;D

gc339

Citation de: olschool le Mercredi 07 Mars 2012, 10:12:51 AM
J'avoue cependant avoir décroché au niveau technique depuis un petit moment,autant le principe est compris mais la mise en oeuvre me dépasse totalement.

Je suis bien conscient que la plupart des personnes qui lisent ce fil de discussion n'ont que faire des explications détaillées et/ou ont du mal à les comprendre car leur formation ou leur métier n'a rien à voir avec ce genre de réalisation.
J'essaie de mettre un maximum de photos pour montrer ce dont il est question, aux personnes curieuses d'approfondir les explications qui vont avec.
S'il y a autant de détails, c'est aussi par ce que je me sers du fil de discussion un peu comme d'un bloc-notes pour retrouver ce que j'ai fait ou écrit précédemment, pas besoin de conserver une foultitude de documents qu'ils soient papier ou qu'ils encombrent inutilement mon disque dur.

Citation de: olschool le Mercredi 07 Mars 2012, 10:12:51 AM
On est passé depuis un bon moment à la réalisation "pro" du truc et je pense que peu de personnes sont/seront capables de reproduire un tel travail.

Tout dépend du système de commutation adopté, tout au long de ce fil de discussion j'ai exposé différentes solutions avec leur réalisation pratique. A chacun de s'inspirer du meilleur pour sa propre réalisation personnelle.
Il est bien évident que la télécommande par radio rend l'entreprise plus complexe et nécessite des connaissances en l'électronique et en programmation des micro-contrôleurs pour la mener à bien.
Cependant la réalisation d'un "truc" à base d'un commutateur rotatif devrait être accessible à la plupart des personnes qui ont quelques connaissances en électricité, savent souder à l'étain et ont accès à un minimum d'outillage comme une perceuse à colonne.

Citation de: olschool le Mercredi 07 Mars 2012, 10:12:51 AM
par contre comme je te l'avais indiqué il y a un bout de temps,il faudra faire les comptes à l'arrivée
pour mettre en balance avec ce qui existe dans le commerce même si c'est incongru de comparer une dacia et une ferrari

La je crains que le bât blesse, il n'y a sans doute que la réalisation d'un "truc" avec commutateur qui devrait être plus abordable et encore elle ne serait justifiable que pour un système disposant de plus de 6 connecteurs.
C'est sans compter sur le plaisir de disposer d'un système original, d'une plus grande capacité que ce qui existe dans le commerce, de la fierté d'avoir mené sa réalisation à bien, cela vaut bien quelques sacrifices sans doute.
En ce qui me concerne, j'ai essayé de minimiser les dégâts en contactant directement les vendeurs qui proposaient ce dont j'avais besoin sur des plates-formes du net. J'ai aussi malencontreusement grillé certains composants comme un récepteur Aurel que j'ai du racheter.

Citation de: olschool le Mercredi 07 Mars 2012, 10:12:51 AM
les systèmes valables coutent une somme dèja bien rondelette (vf un de mes premier post)

Pas tant que cela si on les compare au prix de détail ou par petite quantité des composants majeurs dont ils sont constitués.

Citation de: olschool le Mercredi 07 Mars 2012, 10:12:51 AM
La question qui me taraude est la suivante :
Compte tu lancer une mini production de ce système ? une fois la réalisation finie ?

Déjà la réalisation n'est pas terminée, elle risque d'évoluer en fonction des problèmes rencontrés, qu'ils soient mécaniques, électriques ou logiciels.
J'espère que le bêta testeur que j'ai déjà préventivement sollicité et qui m'avait donné son accord de principe est toujours prêt à risquer ses précieuses cartes car je ne dispose pas d'assez de celles-ci pour tester le truc à capacité maximale.

Je ne compte pas fournir de système clef en main. Il reviendrait trop cher en main d'oeuvre rien qu'avec le nombre de diodes à souder ! Il est préférable que ce genre de "truc" hors gabarit soit réalisé sur le mode "DIY" pour en limiter le coût.
Cependant ce serait envisageable en le rendant modulaire et évolutif dans le genre de celui de Clay Cowgill : www.multigame.com , j'y ai déjà réfléchi. Avec une possibilité de commuter jusqu'à 16 connecteurs pour le rendre encore plus attractif, c'est réalisable puisque 4 des 16 entrées des switches cmos 4067 restent actuellement inemployées. Des liaisons par câbles plats entre la carte mère centrale et les cartes filles déportées permettraient d'éloigner les cartes de jeu les unes des autres plus facilement.


Ceux qui voudraient réaliser un "truc" à base de commutateur rotatif sont à même de trouver tous les composants nécessaires : circuit imprimés pré-percés, relais, diodes, connecteurs, mécanisme et galettes de commutateur, entretoises ... car j'ai spécifiés les références avec les fournisseurs potentiels tout au long du fil de discussion. Quand aux profilés aluminium, ils sont disponibles dans toutes les grandes surfaces de bricolage.

J'ai comptabilisé 3 dispositifs dont l'étude d'un circuit imprimé en faciliterait la réalisation :

  • Le dispositif temporisateur pour éliminer les commutations intempestives des alimentations.
  • L'encodeur/émetteur de la télécommande.
  • L'interface actuellement en cours de description.
Si un volontaire veut bien se proposer pour les étudier, j'en serai enchanté. Il devrait alors être possible soit de mettre les fichiers nécessaires soit les typons à disposition. A chacun alors d'en assurer la gravure ou bien de les faire graver par un artisan proposant ses services sur le net.

Idem pour ceux qui voudraient réaliser un système à télécommande, tous les fournisseurs ainsi que toutes les références ont été donnés pour tout ce qui est spécifique. Ils/elles le seront aussi pour toutes les adjonctions ou modifications qui surviendraient avant la fin du wip.
Nonobstant que l'étude et la réalisation des circuits imprimés puisse aboutir, le câblage de ceux-ci devra être réalisé par soi-même.
Quand au programme du PIC, le fichier source a déjà été publié, il peut être sujet à modification(s) car il n'a pas encore été testé.
Je compte publier le fichier du code au format IntelHex dés que le programme sera déverminé, ce format est généralement accepté par tous les programmateurs de PIC.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





gc339

#94
Test et déverminage du programme du microcontroleur PIC 16F84A

Tout d'abord les modifications des valeurs  de R3 et C3 à modifier sur le schéma initial pour augmenter la fréquence d'horloge à la valeur souhaitée :





La premier test va consister à vérifier l'activation/désactivation du connecteur sélectionné par la télécommande, ou plus exactement à surveiller les 4 bits qui adressent les switches des HC4067 et le décodeur HC4515 ainsi que le bit qui permet de valider/inhiber ces circuits. Ce dernier bit est disponible sur la sortie RB3 alors que l'adresse l'est sur les sorties RB4 à RB7 du PIC.

  • Un afficheur hexadécimal TIL311 a été câblé provisoirement pour afficher l'adresse disponible en sortie du PIC.
  • Dans un premier temps l'entrée "blanking" a été raccordée au 0 volt pour avoir un affichage permanent. La phase suivante consistera à connecter cette entrée sur la broche RB3 pour autoriser l'affichage, l'extinction de l'afficheur correspondant alors à l'inhibition du décodeur HC4515 et des switches HC4067.


L'afficheur TIL311 vient juste d'être câblé.
Ses entrées sont en l'air puisque le PIC 16F84A n'est pas installé sur son support, par conséquent elles sont considérées à "1" ce qui lui fait afficher un "F".
Les accumulateurs sont un peu déchargés, une recharge leur fera du bien avant de poursuivre les tests.

Avant de pousser plus en avant les vérifications et après maintes hésitations, j'ai préféré revenir en arrière en implantant le HC4066 du schéma original. Ce dernier permettait à l'origine de court-circuiter à la masse les sorties des HC4067 quand les switches de ceux-ci étaient inhibés.
Il était devenu superflu après avoir modifié le logiciel du PIC 16F84A pour créer un connecteur Jamma fantôme n° zéro associé de fait au switch zéro de chaque HC4067. Une modification mineure du câblage de l'interface permettait de réaliser cette mise à la masse à travers le switch zéro de chaque HC4067 à chaque fois que le connecteur fantôme n° zéro était sélectionné.
Il a donc fallu rapprocher les rangées de picots accueillant les connecteurs femelles auto-dénudants afin de libérer un peu de place pour un nouveau support.
Cette dernière opération m'a fait réaliser qu'il était alors plus pratique d'installer des réseaux de résistances DIL (Dual In Line ) 13×R plutôt que les couples de réseaux SIL (Single In Line ) 5×R et 7×R initialement prévus sur le schéma d'origine.







  • Deux paires de connecteurs femelles auto-dénudants sur les quatre possibles sont ici photographiées en place sur leurs picots :

    • Chaque paire de connecteurs est dédiée à un seul signal vidéo : rouge, vert, bleu ou synchronisation.
    • Les deux connecteurs de chaque paire sont installés en vis à vis et les sorties de fil de chacun se font face.
    • Les fils de chaque paire à destination des connecteurs Jamma seront regroupés en toron comme ceux figurés sur la photo pour les signaux vidéo rouge et vert.
  • Le réseau de résistances DIL spécifique à chaque signal vidéo prendra place entre la double rangée de picots dédiée à ce même signal.
    Les réseaux jaunes de la photo sont provisoires en attendant les définitifs qui ont été commandés.
  • Il y a maintenant assez de place pour installer le support du HC4066 entre le récepteur Aurel et le quatrième réseau DIL.




Après cette digression, il est grand temps de passer au test du programme proprement dit.

Premier écueil, le programme source est bien assemblé mais l'éditeur de lien affiche maintenant une erreur alors que tout se passait bien lors de son écriture quelques mois auparavant :
Citation
MPLINK 4.42, Linker
Device Database Version 1.7
Copyright (c) 1998-2011 Microchip Technology Inc.
Error - section '.udata' can not fit the absolute section. Section '.udata' start=0x0000000c, length=0x00000002
Errors    : 1


Link step failed.

La seule évolution qui s'est produite depuis l'écriture du programme, c'est le chargement de la toute dernière version du logiciel MPLAB IDE et c'est probablement elle qui est en cause.

Une recherche rapide avec Google fait ressortir que le fichier script 16f84a_g.lkr utilisé par l'éditeur de lien a été modifié depuis lors.
Avec cette nouvelle version, la zone mémoire RAM à partir de 000CH est considérée comme non paginée, c'est à dire commune aux deux pages existantes de la mémoire du PIC 16F84A, la directive "udata" doit alors être remplacée par la directive "udata_shr" (shr pour shared, partagé(e) ) en tête du programme source :








listp=16F84A; Directive to define processor
#include<p16F84A.inc>; Processor specific variable definitions

   __CONFIG   _CP_ON & _WDT_OFF & _PWRTE_OFF & _RC_OSC   ; Directive for embeding configuration bits within '.asm' file

RAMUDATA_SHR0x0C; Start of unbanked RAM, shared across all banks
; Variable definitions
NewKeyRES1
OldKeyRES1


Tout le processus de construction se déroule correctement à partir de cette modification :
Citation
MPLINK 4.42, Linker
Device Database Version 1.7
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

MP2HEX 4.42, COFF to HEX File Converter
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0


Loaded C:\Users\W7\Documents\Microchip\Projects\TeleCmde\TeleCmde.cof.
----------------------------------------------------------------------
Release build of project `C:\Users\W7\Documents\Microchip\Projects\TeleCmde\TeleCmde.mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.44, mplink.exe v4.42, mplib.exe v4.42
Mon Mar 12 00:32:07 2012
----------------------------------------------------------------------
BUILD SUCCEEDED

Il ne reste plus qu'à programmer le PIC avec le programmateur clone de l'ICD2, l'insérer dans son support sur l'interface, mettre sous tension et appuyer sur les touches de la télécommande en vérifiant à chaque fois ce qui est affiché sur le TIL311.
Tout semble fonctionner correctement pour les trois premières lignes du clavier, le code de la touche, qui est aussi le n° de connecteur Jamma associé, s'affiche sur le TIL311 dés que celle-ci est relâchée sur la télécommande :















Valeur zéro affichée à la mise sous tension :
C'est celle du n° du connecteur jamma fantôme.




Valeur affichée pour la touche "1"




Valeur affichée pour la touche "2"




Valeur affichée pour la touche "3"




Valeur affichée pour la touche "4"




Valeur affichée pour la touche "5"




Valeur affichée pour la touche "6"




Valeur affichée pour la touche "7"


Valeur affichée pour la touche "8"


Valeur affichée pour la touche "9"




Il subsiste cependant un problème avec la dernière ligne du clavier :

  • La touche étoile fait afficher un  "1" au lieu d'un "B".
  • La touche zéro fait afficher un "0" au lieu d'un "A".
  • La touche dièse fait afficher un "2" au lieu d'un "C".





Valeur affichée pour la touche "٭"


Valeur affichée pour la touche "0"


Valeur affichée pour la touche "#"


Le défaut constaté avec la dernière ligne du clavier pourrait provenir de la table de transcodage des touches, vérification immédiate sur le listing généré :










0041      
0042
0043
0044
0045
0046
0047
0048
0049
004A
004B
004C
004D
004E
004F
0050
0051
0052

000B

390F   
0782
3401
3402
3403
3413
3404
3405
3406
3414
3407
3408
3409
3415
3411
3410
3412
3416

00109   
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128

Translt   

andlw   
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

END

B'00001111'   
PCL,F
1
2
3
13
4
5
6
14
7
8
9
15
11
10
12
16

; Keep only right nibble
; Code Translation



; Key 'A', command n° 1



; Key 'B', command n° 2



; Key 'C', command n° 3
; Key '٭', connector n° 11
; Key '0', connector n° 10
; Key '#', connector n° 12
; Key 'D', command n° 4

; Directive 'end of program'


C'est bien le cas, l'assembleur est configuré à l'installation pour considérer tous les nombres du programme source comme des nombres hexadécimaux plutôt que décimaux, par exemple le chiffre onze n'est pas transcrit 0BH mais 11H ce qui explique pourquoi la touche étoile s'affiche "1" au lieu de "B", le transcodage n'utilisant que le quartet de droite :



L'onglet de configuration de l'assembleur.

Le bouton "Default Radix" est positionné à l'origine sur "Hexadécimal" dans l'onglet de configuration de l'assembleur. La tentation serait de cocher immédiatement le bouton "Decimal" à la place mais il y a plus efficace si l'on veut que le programme source soit un peu plus indépendant de la configuration par défaut de l'assembleur, il suffit d'ajouter la directive "radix dec" dans le programme source. Il est aussi possible de le spécifier en ajoutant "r=dec" dans la liste des options de la directive "list".
Comme cette dernière directive est déjà présente dans le programme source, autant lui rajouter cette nouvelle option.








      list   p=16F84A, r=dec, c=200, b=10; Directive to define processor, radix + line width and tab spaces inside '.lst' file
#include<p16F84A.inc>; Processor specific variable definitions

   __CONFIG   _CP_ON & _WDT_OFF & _PWRTE_OFF & _RC_OSC   ; Directive for embeding configuration bits within '.asm' file


Les options "C=200" et "b=10" ont été rajoutées par la même occasion, elles améliorent la présentation dans le fichier du listing :

  • La première définit 200 caractères par ligne, au lieu de 132 en standard, pour éviter le repli des lignes longues.
  • La seconde définit 10 espaces par tabulation, le nombre de 8 par défaut est trop juste pour certaines instructions car plusieurs de leurs champs peuvent se retrouver désalignés verticalement et/ou empiètent dans les colonnes voisines.

Maintenant tous les valeurs du tableau sont considérées comme décimales par défaut y compris les quelques autres nombres présents dans le programme source :










0041      
0042
0043
0044
0045
0046
0047
0048
0049
004A
004B
004C
004D
004E
004F
0050
0051
0052

000B

390F   
0782
3401
3402
3403
340D
3404
3405
3406
340E
3407
3408
3409
340F
340B
340A
340C
3410

00109   
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128

Translt   

andlw   
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

END

B'00001111'   
PCL,F
1
2
3
13
4
5
6
14
7
8
9
15
11
10
12
16

; Keep only right nibble
; Code Translation



; Key 'A', command n° 1



; Key 'B', command n° 2



; Key 'C', command n° 3
; Key '٭', connector n° 11
; Key '0', connector n° 10
; Key '#', connector n° 12
; Key 'D', command n° 4

; Directive 'end of program'


Une nouvelle reprogrammation du PIC 16F84A et tout rentre dans l'ordre, le dysfonctionnement de la dernière ligne du clavier à disparu :









Valeur affichée pour la touche "٭"


Valeur affichée pour la touche "0"


Valeur affichée pour la touche "#"


La fonction flip/flop de chaque touche fonctionne aussi :

  • Le premier appui fait afficher le n° de connecteur associé.
  • Le second fait afficher un zéro, plus aucun connecteur Jamma physique n'est sélectionné puisque le zéro correspond au n° du connecteur Jamma fantôme.
  • Le troisième fait réafficher ce n° de connecteur.
  • Et ainsi de suite ...









Premier appui sur la touche "0"
Le connecteur n°10 est sélectionné.


Second appui sur la touche "0"
Le connecteur n°10 n'est plus sélectionné puisque
c'est le connecteur fantôme n° zéro qui l'est.


Troisième appui sur la touche "0"
Le connecteur n°10 est sélectionné à nouveau.


Maintenant il ne reste plus qu'à câbler un deuxième TIL311 pour tester les ordres émis par les 4 touches alphabétiques du clavier. A suivre ...
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





Iro

"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO