Simubaron

 Amélioration Master

Accueil Interfaces Logiciels Pedestal et throttle Tableau de bord Savoir faire Programmation SIOC Téléchargements Contact et liens Les auteurs
 

Remonter

 

Amélioration de la MasterCard

La MasterCard d'OpenCockpit souffre d'un gros défaut, malgré ses nombreux avantages : certaines entrées ne sont pas lues correctement en cas de redémarrage de SIOC (ou de FS), particulièrement quand ces entrées ne sont pas directement liées à un offset de FS, mais plutôt à une programmation interne (prise de park, inter radios, etc.).

Pierre01 a trouvé une solution simple, qui assure que SIOC va correctement relire toutes les entrées, afin d'assurer, si le programme le prévoit, la cohérence entre les inters physiques et leur fonction logicielle.

Vous pouvez lire son tuto ci-dessous ou le télécharger ici en PDF.

1 – Le problème

Eliminer ou du moins minimiser le problème qui survient lors d’un « reload » de SIOC lorsque FS est lancé.

Ce problème se matérialise par une « non lecture » de certaines entrées, principalement lorsqu’elles ne sont pas associées à des offsets (Modules radios par Ex.).

Il s’en suit un mauvais redémarrage de ces modules (état des modules non-conforme à FS), par Ex. : si les radios sont ON avant le « reload », elles vont rester OFF après, obligeant à faire un power Off, power On de ces modules pour redevenir conforme à FS et au matériel.

Ce problème à fait l’objet de divers posts sur différents forums.

A ce jour (Janvier 2010), les gens d’Opencockpits (bien sûr au courant du problème) n’ont pas donné de solution. Il est possible que ce problème puisse se résoudre par une reprogrammation du PIC de la carte USB, mais seul Opencockpits peut envisager de le faire.

Donc, pour l'instant, il n’y a que la « bidouille » pour contourner ce problème.

2 – Solutions envisagées

Il a été remarqué par plusieurs utilisateurs qu’il suffit de faire bouger une entrée de chaque groupe pour « obliger » SIOC à relire toutes les entrées de ce groupe ; d’où une première idée :

  • Bien sur, un power Off, power On (ou l’inverse) des modules concernés résoud le problème.

  • Réserver une entrée par groupe et sur toutes les master cartes concernées, les relier ensemble et à un bouton poussoir. A chaque reload, un appui sur ce bouton résoud le problème …

Ces deux solutions ne sont pas très réalistes et la seconde « consomme »  8 entrées par carte Master, sans compter le câblage… inacceptable.

La seconde solution à néanmoins attiré mon attention …

3 – Solution retenue

En étudiant le schéma électronique de la carte Master, j’ai vu que les communs de chaque groupe d’entrées n’était pas la masse de l’alimentation, mais étaient « fabriqués » par les sorties du circuit intégré U10, un 74HC541. C’est un Octal buffer/line driver; 3-state.

Les 2 entrées « Output Enable », pin 1 et 19 sont forcées à l’état bas (zéro volt) et valident les sorties en permanence. Ces 8 sorties correspondent aux communs des 8 groupes d’entrées de la Master.

Sachant que ces communs sont au niveau logique bas (zéro volt), je me suis dit que si je changeais cet état, toutes les entrées de la Master serait vues comme des entrées à l’état « 1 ». En effet, les 72 diodes sur chaque entrées sont reliées au + 5v à travers une résistance sur les anodes. Donc, si je mets les communs en 3-state (non connecté, ni à la masse, ni au + 5v), les entrées seront « tirées »  au +5v.

Donc j’aurai au moins une entrée qui changera d’état par rapport à son niveau réel. Il serait en effet étonnant que toutes les entrées d’un même groupe soient au niveau haut.

Si néanmoins, c’était le cas et que ma modification ne marche pas dans ce cas, il suffit d’inverser une entrée de ce groupe avec l’une d’un autre groupe qui soit plus sûrement à zéro mais c’est peu probable.

C’est cette solution que j’ai retenue et que je décris dans les pages suivantes.

4 – Schéma de la partie à modifier

Le schéma de la carte master est téléchargeable ici : http://www.opencockpits.com/modules.php?name=Content2&pa=showpage&pid=30

 Ci-dessous, le circuit U10 dont il va falloir modifier le câblage de la pin 1.

                        

Les 4 modifications à faire :

  • Couper la piste qui arrive sur la pin 1.

  • Connecter un fil sur une sortie led libre au choix.

  • Rajouter 2 lignes de code par carte Master modifiée.

  • J'ai quand même mis une résistance "pulldown" entre pins 1 et 19 de 10k pour être sur de l'état bas en fonctionnement normal, mais ça marche sans !!!

 Remarques :

  • Il est préférable de faire cette modification sur toutes les Master card, même si ce n’est pas nécessaire. De cette façon, elles sont totalement interchangeables !
  • J’ai choisit la sortie 49 pour Master 1 qui se trouve sur la prise DB9 pin 3 et la même sortie (DB9 pin 3) n° 113 sur la Master 2 et prendrai la même si j’ai une troisième Master.
  • Un autre avantage à ce câblage : Il n’y aura pas besoin de changer les lignes de code dans SIOC en cas d’inversion de 2 cartes Master.

5 – La partie pratique

- Master card coté composants, repérage du CI dont il faut modifier le câblage : U10 - 74HC541(cliquez sur les images pour les agrandir).

 

- Repérage côté pistes.

 

- Couper la piste pour isoler la pin 1.

 

- Contrôler que la liaison est bien coupée.

 

- Souder une résistance entre 1 et 10Kohms sur les pins 1 et 19 (1/8 w serait suffisant).

 

- La pin 19 est en face, mais un pas (une position) plus bas.

 

- Faire la liaison avec la sortie OUT voulue (sur le connecteur DB9, pin 3 pour moi).

 

- Ca peut même marcher sans la résistance !

 

6 – Le code à rajouter dans SIOC :

Peu de modifications à faire :

  • Déclarer une variable par Master card (Variable non utilisée par ailleurs bien sûr).

  • Pour que ça fonctionne il faut mettre ce code dans la routine « init » (var 000) en début de programme.

  • Dans la variable 0000, faire un « Toogle » pour chaque variable « init », afin de la basculer à 1 puis la ramener à 0.

Ce qui donne  les lignes en gras sont à rajouter, avec des numéros de variable libres pour vous.

En rouge, le n° de la sortie utilisée (pour nous) : 49 pour Master 1, 113 pour Master 2 etc … :

Var 0000, name init, Value 0     // initialisation
 {
  &out_init_mc_1 = TOGGLE 1      // ré-initialisation M1 après reload
  &out_init_mc_2 = TOGGLE 1      // ré-initialisation M2 après reload
  // autres routines d'initialisation... 
 }
Var 001, name out_init_mc_1, Link IOCARD_OUT, Output 49          // out re-initialise Master 1
Var 002, name out_init_mc_2, Link IOCARD_OUT, Output 113         // out re-initialise Master 2

Haut de page

C’est tout, bons vols à tous !