Réponses:Oui, on peut coder les entrées d'une Master
Pourquoi: Pour économiser des entrées
Comment : en codage BCD par diode type 1N4148 (diode signal) que je nomme ici "Bus BCD"
Explication :Si vous avez par exemple un rotary avec 6 contacts, il suffira de 3 entrées Master pour avoir chacune des 6 positions au lieu de mobiliser 6 entrées.
- Chaque entrée sur la Master représente une puissance de 2 (un bit), du poids fort au poids faible (bit2=2^2 - bit1=2^1 - bit0=2^0)
Nota: chaque "bus BCD" ne peut contenir que des boutons poussoir
mais un interrupteur peut être utilisé
seul sur le bit de poids fort pour un "général" par exemple ou servir de bit de retenue ou encore pour un bit de fonction particulière (bascule "Captain<->1°OFF" de l'EFIs ou d'une radio,...)
Le codage est donc réalisé directement avec les diodes comme indiqué sur le shéma
SI le commun est un
+Pour nous, les diodes sont dans le mauvais sens car c'est le Gnd qui est notre commun.
--Schéma--
Programmation SIOC d'un "Bus BCD"Prenons un exemple concret: Autobrake du 737 (6 positions)
"RTO" => contact 1 du rotary (shéma - decimal in 1)
"OFF" => contact 2 (shéma - decimal in 2)
"1" => contact 3 (shéma - decimal in 3)
"2" => contact 4 (shéma - decimal in 4)
"3" => contact 5 (shéma - decimal in 5)
"MAX" => contact 6 (shéma - decimal in 6)
On nomme chaque input en rappelant que c'est un "bus BCD":
Var 0010, name Rot_AB_BCD1 // rotary AutoBrake BCD1
Var 0020, name Rot_AB_BCD2
Var 0030, name Rot_AB_BCD3
Chaque Var reçoit donc les impulsions et appel la routine "&Routine_Rot_AB" qui compose le code BCD
La variable temporaire "&Rot_AB_tmp" stocke le code BCD
Maintenant en fonction de la valeur de "&Rot_AB_tmp" il suffit d'affecter la commande souhaitée - CQFD !
Utilisation du "Bus BCD" dans plusieurs fichiersSi vous souhaitez utiliser le même "bus BCD" dans plusieurs fichiers.txt différents, il suffit de nommé différemment les entrées BCD mais avec les mêmes n° input, ainsi vous n'aurez pas de conflit de nom de variable lors de la compilation. Attention tout de même à bien "scanner" toutes les entrées du code même si dans un fichier vous n'utilisez pas toutes les entrées !!
exemple fichiers
ADF.txt => ADF_BCD1_commun,input 10 ,.....
COM.txt => COM_BCD1_commun,input 10 ,.....
MultiCOM.txt => MultiCOM_BCD1_commun,input 10 ,.....
J'emploie cette technique dans mon PIT dès que c'est possible est ça fonctionne à merveille
Jean-Louis
photo de mon EFIs avec codage par "bus BCD" pour les 2 encoders et les boutons du BASEt oui, une seule carte pour mon EFIs

--code--
- Code: Tout sélectionner
// *********************************************
// * Rotary BCD for Autobrake By Chtipilot *
// *********************************************
// * FileName : Rot_AutoBrake_BCD.txt
// * Date : 01/11/2010
// Utilisation d'un rotary 12 positions codé BCD par diodes
// Using BCD coding for twelve positions Rotary with Diode (1N4148)
// Nota: les entrées MASTER n'ont pas besoin de se suivre
// Note: following MASTER's Input It's not necessary// Exemple: rotary Autobrake
//// LO, L1, L2 ne peuvent prendre que la valeur 0 ou 1 (cf SWITCH et DIODES)
// &Rot_AB_tmp (Variable Rotary_AutoBrake_temporaire) contient le code BCD complet [ L2x100 ]+[ L1x10 ]+[ L0 ]
//*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*
Var 0946, name Rot_AB_BCD1, Link IOCARD_SW, Device 1, Input 50 // Entrée IOcard pour AutoBrake BCD Input 1
{
CALL &Routine_Rot_AB
}
Var 0947, name Rot_AB_BCD2, Link IOCARD_SW, Device 1, Input 45 // Entrée IOcard pour AutoBrake BCD Input 2
{
CALL &Routine_Rot_AB
}
Var 0948, name Rot_AB_BCD3, Link IOCARD_SW, Device 1, Input 53 // Entrée IOcard pour Autobrake BCD Input 3
{
CALL &Routine_Rot_AB
}
Var 1000, name Routine_Rot_AB, Link SUBRUTINE // SUBRoutine Rotary autobrk_BCD: compose le code BCD puis défini la position Autobrake pour FSX
{
L0 = &Rot_AB_BCD1 // pour unité
L1 = &Rot_AB_BCD2 * 10 // x10 pour les dizaines
L2 = &Rot_AB_BCD3 * 100 // x100 pour les centaines
&Rot_AB_tmp = L0 + L1 // addition unité+dizaine
&Rot_AB_tmp = &Rot_AB_tmp + L2 // addition précédente + centaine = &Rot_AB_tmp contient maintenant le code BCD
IF &Rot_AB_tmp = 1
{
&FS_AutoBrake = 0 // &Rot_AB_tmp = 001 = Position RTO
}
ELSE
{
IF &Rot_AB_tmp = 10 // &Rot_AB_tmp = 010 =Position OFF
{
&FS_AutoBrake = 1
}
ELSE
{
IF &Rot_AB_tmp = 11 // &Rot_AB_tmp = 011 (input3=0, input2=1, input1=1) =Position 1
{
&FS_AutoBrake = 2
}
ELSE
{
IF &Rot_AB_tmp = 100 // &Rot_AB_tmp = 100 (input3=1, input2=0, input1=0) =Position 2
{
&FS_AutoBrake = 3
}
ELSE
{
IF &Rot_AB_tmp = 101 // &Rot_AB_tmp = 101 (input3=1, input2=0, input1=1) =Position 3
{
&FS_AutoBrake = 4
}
ELSE
{
IF &Rot_AB_tmp = 110 // &Rot_AB_tmp = 110 (input3=1,input2=1,input1=0) =Position MAX
{
&FS_AutoBrake = 5
}
}
}
}
}
}
}
Var 1001, name Rot_AB_tmp // Rotary AB tmp