Interface Contacts

Répondre
Avatar du membre
romain
Collec Perso: 11 flips
Rech/Achete: 0 flip
Messages : 2048
Enregistré le : 01/10/2002
Pas vu depuis 2 mois
Niveau : Expert
Pro / revendeur : non

Interface Contacts

Message par romain » ven. 29 06, 2007 23:12

Salut,

je vais vous présenter ici la partie Interface des Contacts.

Cette partie sert à récupérer l'état des contacts de tout le flipper et les transmet au PC.

Le microcontrôleur de l'interface des contacts scrute tous les contacts et ne communique avec le PC que pour lui indiquer que des contacts ont changés. Ainsi le débit de données utilisé est très faible et paradoxalement le temps de réponse est très élevé, car moins de travail est nécessaire pour "trier les données" entre celles utiles (un contacts modifié) et celles ne servant à rien.

Un premier prototype a été réalisé avec une carte microcontrôleur et une carte de câblage rapide.

Voici les fonctions supportées :
-gestion de la matrice des contacts (8 lignes x 8 colonnes).
-gestion des 8 contacts directs ("dedicated grounded switches")
-gestion de 8 contacts directs supplémentaires, utilisés sur les WPC Fliptronic.

Détails du fonctionnement :
Le PIC balaye les colonnes et lit l'état des lignes à la recherche d'un contact modifié. C'est le coeur du programme du PIC; En clair : il passe plus de 95% de son temps à surveiller la matrice. Dès qu'un contact diffère depuis la dernière lecture, la mémoire est mise à jour et la colonne (comprenant le contact) est transférée au PC.
Les contact généraux sont gérés par un circuit d'extension : le MCP23017 qui communique par le bus I²C avec le microcontrôleur PIC. Ce circuit "ajoute" 16 pattes au PIC et est indépendant dans la surveillance de ces contacts. En effet, il n'informe le PIC que lorsqu'un contact a changé d'état. Le PIC recopie alors la donnée et la transfert au PC.

Toute la carte fonctionne en 5V ainsi que la matrice et les contacts généraux. Ceci permet de relier directement toutes les lignes sur les entrées des composants sans devoir faire d'adaptation (augmentation du nombre de composants et de la complexité de la carte). De plus les circuits comportant en interne les résistances nécessaire au fonctionnement des contacts, ça simplifie encore le système en diminuant d'autant le nombre de composants.

Des essais sur un vrai plateau ont été faits et sont très concluants.

La carte me permettant de faire mes essais sur mon bureau et en fonctionnement sur le Terminator2.
Image Image

Voici la vidéo des test du premier prototype : http://www.youtube.com/watch?v=EpeeBJjY3AM (désolé pour la qualité pourrie de la vidéo. si vous voulez une voix OFF, tapez 1, si vous voulez une video de meilleure qualité tapez 2 ::)): )

Je tiens à préciser que je tente de limiter le nombre de composants au strict minimum (et donc le prix, et donc la complexité du système). Par exemple voici quelques composants et spécificités présents sur les CPU qui ne le seront pas ici :
- les résistances sur les fils des contacts (jusqu'à 4 par ligne sur les WPC).
- les diodes (sur la carte).
- les amplificateurs (lm339).
- alimentation en 12V des fils des contacts.
- tout circuit logique (TTL ou CMOS).
- circuit de reset.

[AJOUT du 5/7/07]

La première carte prototype a été réalisée :

Réalisation du circuit imprimé et photo du premier essai raté avec la 2e carte réussie.
Image Image

Côté pile pendant le soudage des supports et composants; et le côté face.
Image Image

Liste des composants présents sur cette carte :
- microcontrôleur PIC 16F877A
- 2 circuits d'extension MCP23017
- un support (en bas a droite) pour le branchement du convertisseur.
- 2 optocoupleurs juste à sa gauche.
- Régulateur d'alim 5V, fusible et zener de protection.
- quelques condos sur les pistes d'alim, quelques résistances.
C'est tout !

Cette carte fait 100*200mm, dans le but de pouvoir en tirer 3 sur une plaque vierge de 200*300... :wink:

[/AJOUT du 5/7/07]
[AJOUT du 9/7/07]
La carte étant terminée, je vais vous la présenter :
Image


en haut a gauche le bornier 3 fils sert à l'alimentation des circuits de la carte. Le bornier du milieu est la masse, celui de gauche permet l'alimentation directement en +5V et celui de droite entre 7V et 30V.
Vient en dessous le régulateur 7805 qui rabaisse la tension à 5V si la carte est alimentée entre 7 et 30V.
Sous ce régulateur, un petit fusible associé à une diode zener de 5.6V (commandée, pas reçu donc pas soudée) pour la protection en cas de surtension ou d'inversion de polarité.
Puis un condensateur de 1000µF lissant la tension pour une alimentation bien propre et bien stabilisée.

Les 2 circuits intégrés verticaux à droite de l'alimentation sont les MCP23017, circuits d'extension au microcontrôleur. Ils communiquent avec lui grâce au bus I²C et l'informent d'un changement sur une de leurs entrées grâce à des sorties d'interruption (2 par circuit).
Le bus I²C communique à la vitesse de 1Mbps (plus de 128.000 octets par seconde).

Le microcontrôleur à droite est cadencé par le quartz à une fréquence de 20MHz (le maximum supportable par ce CI). Un condensateur a été rajouté de l'autre côté de la carte, une nouvelle fois pour des raisons de stabilité d'alimentation.

La rangée de picots sur le haut de la carte correspond à toutes les entrées/sorties possibles offertes par l'interface. Elles peuvent soit être utilisées de façon matricielle, soit une à une indépendamment.

En bas à droite de la carte nous observons le convertisseur USB/Série enfiché sur un support et un petit condensateur pour le lissage du +5V venant de l'USB.
La communication entre le PIC et le PC passe par ce convertisseur à une vitesse de 38400bps, avec un peu de travail elle pourra encore être augmentée.

Viennent ensuite et enfin les 2 optocoupleurs qui font l'isolation électrique totale entre la carte et le convertisseur USB. Ils permettent également la communication entre le PIC et le convertisseur. Ainsi, si une surtension intervient sur la carte, le convertisseur sera protégé, et également votre cher PC :,):

Etant donné qu'aucun typon n'est parfait, le miens n'a pas échappé à la règle. 2 petites erreurs m'ont obligé à détourner une piste et à créer 2 petits ponts sous la carte. Promis le prototype 2 sera NICKEL :,):

[/AJOUT du 9/7/07]

Pour toute question, complément d'info ou suggestion : ne vous privez pas !!!
@+
Modifié en dernier par romain le lun. 09 07, 2007 15:52, modifié 3 fois.
Addams - T2 - Fathom - Special Force - Robocop - OxO - EATPM - Silverball Mania - TZ - BK2K - Totem
ex : RFM - Judge Dredd - RoadShow - NBA - ToM - WoZ

Avatar du membre
Papo06
Dept: 06
Collec Perso: 1 flip
Rech/Achete: 0 flip
Messages : 4904
Enregistré le : 30/03/2005
Pas vu depuis 4 mois
Niveau : Confirmé
Pro / revendeur : non
Localisation : Mougins

Message par Papo06 » sam. 30 06, 2007 08:26

Yo,

Super !

Juste un truc si par hasard tu n'y a pas pensé, je ne sais pas à quelle fréquence le pic scrute les contacts mais il se pourrait que si la matrice tourne trop vite tu ais des faux rebonds, dans ce cas si plusieurs codes pour un même contacts sont envoyés ajoute un anti-rebond sur les contacts pour éviter que le pic envoie 2 ou 3 fois contact fermé/ouvert à quelques ms d'intervalle pour le même contact.

Pascal

Avatar du membre
tony49
Dept: 85
Collec Perso: 3 flips
Rech/Achete: 0 flip
Messages : 757
Enregistré le : 01/10/2002
Pas vu depuis 3 an(s)
Niveau : Confirmé
Pro / revendeur : non
Localisation : Vendée

Message par tony49 » sam. 30 06, 2007 10:00

Marrant, je viens de terminer un séquenceur de tir pyrotechnique qui utilise une matrice 10x10 qui permet de tirer 100 lignes. Et comme toi je suis parti d'un 16F877A, je pilote les optos via des PCF8574 (bus I2C) ce qui peut être une bonne idée pour ta carte qui commandera les bobines et lampes ???

Enfin je dis ça mais je n'ai surement rien à t'apprendre...

Si tu as besoin du schema que j'ai fais, tu me le dis
(par contre la partie que j'ai fait après opto ne te permettra pas de commander des bobines et lampes car mon schéma est fait pour inflammer une charge sous 48V-1A et j'utilise de ce fait des TIC106 sur mes colonnes et des TIC116 sur mes lignes. toi il faudrait plutôt commander des triac).

Avatar du membre
romain
Collec Perso: 11 flips
Rech/Achete: 0 flip
Messages : 2048
Enregistré le : 01/10/2002
Pas vu depuis 2 mois
Niveau : Expert
Pro / revendeur : non

Message par romain » sam. 30 06, 2007 14:24

Papo06 a écrit :Juste un truc si par hasard tu n'y a pas pensé, je ne sais pas à quelle fréquence le pic scrute les contacts mais il se pourrait que si la matrice tourne trop vite tu ais des faux rebonds, dans ce cas si plusieurs codes pour un même contacts sont envoyés ajoute un anti-rebond sur les contacts pour éviter que le pic envoie 2 ou 3 fois contact fermé/ouvert à quelques ms d'intervalle pour le même contact.
Salut,

c'est effectivement un problème que je rencontre, c'est pour cette raison que des petits condensateurs sont indispensables sur les retours des contacts. La fréquence de balayage reste à fixer, mais ça n'empêche pas la réalisation de la première carte... c'est juste du programme.
je pilote les optos via des PCF8574 (bus I2C) ce qui peut être une bonne idée pour ta carte qui commandera les bobines et lampes ???
le MCP23017 que j'utilise correspond à 2 PCF8574 (soit 16 pattes d'E/S). Il est par contre plus complet et largement paramétrable en interne (pullup, différents modes d'interruptions...)
Pour la puissance, j'utiliserai des MOSFET comme suggéré par Pascal. Ce circuit d'extension sera donc aussi utilisé sur les autres cartes pour commander les MOSFET. Des Triacs sont injustifiés car les alimentations sont en courant continu.

Je fais des derniers essais et je commence le routage de cette première carte.
@+ et merci de vos réponses et suggestions !
Addams - T2 - Fathom - Special Force - Robocop - OxO - EATPM - Silverball Mania - TZ - BK2K - Totem
ex : RFM - Judge Dredd - RoadShow - NBA - ToM - WoZ

Avatar du membre
tony49
Dept: 85
Collec Perso: 3 flips
Rech/Achete: 0 flip
Messages : 757
Enregistré le : 01/10/2002
Pas vu depuis 3 an(s)
Niveau : Confirmé
Pro / revendeur : non
Localisation : Vendée

Message par tony49 » sam. 30 06, 2007 15:06

Des Triacs sont injustifiés car les alimentations sont en courant continu.

Exact, autant pour moi :oops:

Avatar du membre
Papo06
Dept: 06
Collec Perso: 1 flip
Rech/Achete: 0 flip
Messages : 4904
Enregistré le : 30/03/2005
Pas vu depuis 4 mois
Niveau : Confirmé
Pro / revendeur : non
Localisation : Mougins

Message par Papo06 » sam. 30 06, 2007 21:43

romain a écrit : c'est effectivement un problème que je rencontre, c'est pour cette raison que des petits condensateurs sont indispensables sur les retours des contacts. La fréquence de balayage reste à fixer, mais ça n'empêche pas la réalisation de la première carte... c'est juste du programme.
Berk les capas on est plus en 1980 :))

Il faut faire un anti-rebond software :wink:

Pour le faire c'est facile il faut conserver l'état précédent de la matrice + un compteur par contact, il faut donc 64 compteurs pour une matrice 8x8.

L'algo est le suivant:

Pour chaque contact
__Si compteur > 0 Alors
____décrémenter compteur du switch
__Fin Si
__Si contact <> valeur précédente alors
____Si compteur du contact à 0 alors
______envoyer code sur usb
______mettre le compteur du switch à N
______mettre à jour l'état précédent
____Fin si
__Fin si
Fin Pour

Tu choisi N en fonction de la vitesse de rotation de la matrice et du temps d'anti-rebond que tu veux, plus N est grand moins tu auras de rebonds

Par exemple si tu veux un anti-rebond de 10ms et que ta matrice tourne à 1Khz, tu mets N=10

Pascal

Avatar du membre
romain
Collec Perso: 11 flips
Rech/Achete: 0 flip
Messages : 2048
Enregistré le : 01/10/2002
Pas vu depuis 2 mois
Niveau : Expert
Pro / revendeur : non

Message par romain » sam. 30 06, 2007 22:24

Salut Pascal et merci pour le bout de code !

Ayant subit une cure intensive d'algo pendant un an et ayant 2 projets robot derrière moi, le programmation ne me pose pas de réelles difficultés :,): :D:

Pour mon code, je travaille plus "proprement" :,): et avec un seul compteur.
J'ai effectivement ralenti ma scrutation et je n'ai plus aucun rebond sur la matrice des contacts. Les condensateurs disparaissent donc. :x26: :x24:

en gros mon code ça donne :

décalage sur les colonnes
si colonne != état précédent alors
__envoyer colonne
fin si

Pour les contacts directs branchés sur les circuits d'extension MCP23017, leur broche d'interruption passe à 1 si le port change d'état... fastoche ! 8)

et j'ai une fonction d'émission qui se charge de la transmission vers le PC.
Tout ceci fonctionne en scrutation, mais je pense tout passer en interruption avec un timer.

@+ et merci encore :s1:
Addams - T2 - Fathom - Special Force - Robocop - OxO - EATPM - Silverball Mania - TZ - BK2K - Totem
ex : RFM - Judge Dredd - RoadShow - NBA - ToM - WoZ

Avatar du membre
damien d.
Dept: 000
Rech/Achete: 0 flip
Messages : 4328
Enregistré le : 01/10/2002
Pas vu depuis 2 an(s)
Niveau : Débutant
Pro / revendeur : non
Localisation : 4NG1C0URt
Contact :

Message par damien d. » sam. 30 06, 2007 23:15

Plus de condos, mais, que restera t'il sur cette carte ? ;)

Encore merci pour ton boulot! :wink:
Damien D. - centinex.wizard@gmail.com

Band Wagon^Jungle^Jubilee^OXO^Little Chief^Space Mission^Royal Flush^Silverball Mania^Embryon^Speakeasy 4^Black Hole^Black Hole^Blackbelt^Genesis^Cyclone^Black Knight 2000^Star Trek^Star Wars^Twilight Zone

Avatar du membre
Papo06
Dept: 06
Collec Perso: 1 flip
Rech/Achete: 0 flip
Messages : 4904
Enregistré le : 30/03/2005
Pas vu depuis 4 mois
Niveau : Confirmé
Pro / revendeur : non
Localisation : Mougins

Message par Papo06 » dim. 01 07, 2007 02:28

romain a écrit : Pour mon code, je travaille plus "proprement" :,): et avec un seul compteur.
J'ai effectivement ralenti ma scrutation et je n'ai plus aucun rebond sur la matrice des contacts. Les condensateurs disparaissent donc. :x26: :x24:

en gros mon code ça donne :

décalage sur les colonnes
si colonne != état précédent alors
__envoyer colonne
fin si
Sans parler de code propre ou sale, chacun son point de vue :mrgreen:, mais ralentir la matrice va supprimer les rebond évidemment mais au détriment de la sensibilité, dans ton code cité rien n'empèche les rebonds.

Je te l'accorde et globalement ça marchera, mais il peut arriver (rarement certes) que des fermetures soient ratés:

Typiquement sur les roll-over l'appui est extremement bref quand la bille file dessus elle le frole à peine, c'est pourquoi il y avait des capas sur les vieux flips, si ta matrice tourne trop lentement elle peut 'rater' un passage, typiquement si le rollover est sur la colonne 1 et que ta matrice commence à scruter la colonne 2 à l'instant où la bille passe sur le rollover 1, le temps qu'elle fasse les colonnes 2 à 8, la bille est partie et la lecture de la colonne 1 ne donne rien...

Pareil avec les rebonds: imagine qu'à l'instant où tu scrutes la colonne 1, la bille passe bien sur le contact à cet instant mais pas de bol t'es pile poil dans un rebond et la colonne ne voit pas le contact, le tour d'après la bille est partie, le contact est raté.

Plus le contact est vieux et crado (comme les flips :)) ) , et plus il y a de ratages et de rebonds.

Mettre un compteur par contact (et pas simplement par ligne sinon ça fera n'importe quoi si plusieurs rollover alignés sur le plateau sont sur la même colonne de la matrice ou en multiball) garanti la sensibilité pour chaque contact, on peut faire tourner la matrice à fond tout en évitant les rebonds.

L'anti rebond peut être implémenté dans le programme du pc qui va gérer le flip et pas obligatoirement sur la carte contacts, c'est juste une donnée importante à prendre en compte.

Pascal

Avatar du membre
Mimosa
Dept: 000
Rech/Achete: 0 flip
Messages : 355
Enregistré le : 26/06/2007
Pas vu depuis 3 an(s)
Niveau : Débutant
Pro / revendeur : non
Localisation : Pithiviers/Loiret
Contact :

Message par Mimosa » dim. 01 07, 2007 11:12

Bonjour,

petite idée peut-être un peu bête :mrgreen:
Pourquoi ne pas utiliser directement un clavier de PC en usb; ça coute que dalle et ça permet de détecter 105 contacts différents :?:

A+
BayWatch SEGA - Jurassic Park DE - Apollo13 SEGA - World CUp Soccer - Dr Dude - Cactus Jack - Mario Brs - Star Wars DE - LethalWeapon 3 - Tales from the Crypt - Theatre Of Magic

Répondre