Air-Cockpit Echange et partage entre créateurs et réalisateurs de simulateurs de vol. |
Aircokpit est définitivement transféré à sa nouvelle adresse http://www.aircockpit.com. Ce forum sera bientôt en lecture seule. Voir messages d'annonce dans les sujets ci-dessous. L'équipe AIRCOCKPIT |
|
| transpondeur | |
| | Auteur | Message |
---|
Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: transpondeur Ven 25 Avr - 10:19 | |
| C'est un peu une déformation : l'un de mes boulots consiste à écrire des bouquins d'informatique grand public. Donc c'est assez facile pour moi d'expliquer ce genre de choses. En plus, je trouve SIOC particulièrement agréable à programmer : rien de compliqué, tout dans la logique. J'ai encore dans la tête des articles sur les fonctions LIMIT et ROTATE, ainsi que l'explication de mon code transpondeur. Ce dernier est assez complexe, et je serais preneur de simplifications ; le fait de l'expliquer me permettra peut-être de trouver des solutions plus simples. J'en parlerai en temps utile. Pierre | |
| | | stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: transpondeur Ven 25 Avr - 12:10 | |
| Le truc pour le transpondeur c'est d'utiliser 4 variables non-liées une pour chaque chiffre. et de les rotationner de 0-7. et à chaque modif de caller une subroutine qui reconstruit le code avec les 4 variables( x1000,x100,x10, +), le transforme en binary (TOBCN) et l'envoie à FS.
BOB
de plus il faut choisir le code au démarrage dans la variable 0000 comme ca c'est le simu qui commande le transpondeur. faut pas essayer d'aller lire le code dans FS au démarrage. C'est la même chose pour les radios, il vaut mieux imposer la valeur initiale. | |
| | | Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: transpondeur Ven 25 Avr - 12:16 | |
| C'est grosso modo ce que je fais. Mais il s'agit d'un transpondeur à poussoirs et non pas à rotacteurs. On compose les 4 chiffres successivement, dans un intervalle de temps donné. Si on ne fait qu'1, 2 ou 3 chiffres dans cet intervalle, l'ancien code revient automatiquement. C'est comme ça que le transpondeur du Baron58 de FS fonctionne.
Le problème le plus dur est de savoir quel est le numéro du chiffre en cours de saisie, si la saisie est terminée, etc... J'ai réussi, je pense. Il ya en plus un poussoir VRF (donne le code 7000), un contacteur OFF-STBY-CHRLY et un poussoir Ident, liés tous deux à IVAP.
Mais si on peut simplifier le code...
Pierre | |
| | | stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: transpondeur Ven 25 Avr - 14:28 | |
| Super intéressant comme interfaçage. un challenge.
C'est vraiment passionnant de programmer en SIOC.
Donne nous ton code quand y sera prêt
A+
BOB | |
| | | Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: transpondeur Ven 25 Avr - 14:59 | |
| Je démarre un nouveau topic pour le transpondeur.
Nono, tu pourras déplacer les 3 ou 4 précédents messages dedans, stp?
Pierre | |
| | | steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: transpondeur Ven 25 Avr - 15:26 | |
| | |
| | | Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Code transpondeur à poussoirs + IVAO Ven 25 Avr - 15:40 | |
| Bon, ce post va être long, mais à la demande de certains, voilà mon code transpondeur, inspiré du code OpenCockpit, mais modifié.
Le but : un poussoir par chiffre, plus un pour le code 7000, un autre pour Ident IVAO, un contacteur ON-SDTBY-CHARLY. On compose le code en appuyant successivement sur les touches. Si on a pas saisi 4 chiffres dans un temps donné, l'ancien code revient actif.
Y a sûrement moyen de faire plus simple, je suis preneur. Note : j'ai volontairement laissé des IF qui pourraient se réduire "=" pour conserver plus de lisibilité.
Pierre
// // Transpondeur //
Var 2500, name fs_transp, Link FSUIPC_INOUT, Offset $0354, Length 2 { &temp_tr_code = FROMBCD &fs_transp CALL &calc_temp_dgs }
Var 2501, name aff_tr_dg4, Link IOCARD_DISPLAY, Digit 10, Numbers 1 // unités transp
Var 2502, name aff_tr_dg3, Link IOCARD_DISPLAY, Digit 11, Numbers 1 // dizaines transp
Var 2503, name aff_tr_dg2, Link IOCARD_DISPLAY, Digit 12, Numbers 1 // centaines transp
Var 2504, name aff_tr_dg1, Link IOCARD_DISPLAY, Digit 13, Numbers 1 // milliers transp
Var 2506, name aff_tr_code, Link IOCARD_DISPLAY, Digit 10, Numbers 4 // code entier
Var 2508, name press_count, Value 0 // nombre d'appuis
Var 2509, name current_digit, Value 1 // numéro du chiffre à afficher
Var 2510, name val_dg // valeur chiffre courant
Var 2511, name temp_tr_dg1, Value 0 // valeur chiffre milliers
Var 2512, name temp_tr_dg2, Value 0 // valeur chiffre centaines
Var 2513, name temp_tr_dg3, Value 0 // valeur chiffre dizaines
Var 2514, name temp_tr_dg4, Value 0 // valeur chiffre unités
Var 2516, name temp_tr_code // code temporaire pendans saisie
Var 2517, name mem_tr_code // code précédent
Var 2518, name new_tr_code, Value 1 // à 0 pendant saisie, à 1 si nouveau code
Var 2520, name tr_push_0, Link IOCARD_SW, Input 63 // Push chiffre 0 { IF &tr_push_0 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 0 // chiffre courant = 0 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code // calcul le nouveau code CALL &use_code // vérifie si code entier } }
Var 2521, name tr_push_1, Link IOCARD_SW, Input 68 // Push chiffre 1 { IF &tr_push_1 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 1 // chiffre courant = 1 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2522, name tr_push_2, Link IOCARD_SW, Input 37 // Push chiffre 2 { IF &tr_push_2 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 2 // chiffre courant = 2 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2523, name tr_push_3, Link IOCARD_SW, Input 38 // Push chiffre 3 { IF &tr_push_3 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 3 // chiffre courant = 3 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2524, name tr_push_4, Link IOCARD_SW, Input 39 // Push chiffre 4 { IF &tr_push_4 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 4 // chiffre courant = 4 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2525, name tr_push_5, Link IOCARD_SW, Input 40 // Push chiffre 5 { IF &tr_push_5 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 5 // chiffre courant = 5 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2526, name tr_push_6, Link IOCARD_SW, Input 41 // Push chiffre 6 { IF &tr_push_6 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 6 // chiffre courant = 6 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2527, name tr_push_7, Link IOCARD_SW, Input 42 // Push chiffre 7 { IF &tr_push_7 = 1 { IF &press_count = 0 { CALL &init_tempo } &val_dg = 7 // chiffre courant = 7 CALL &place_dg, &val_dg // met le chiffre à sa place en temporaire CALL &calc_temp_code CALL &use_code } }
Var 2528, name vfr, Link IOCARD_SW, Input 36 // Push VFR { IF &vfr = 1 { &fs_transp = TOBCD 7000 // met le code 7000 &temp_tr_dg1 = 7 // met les millers à 7 &temp_tr_dg2 = 0 &temp_tr_dg3 = 0 &temp_tr_dg4 = 0 CALL &affich_transp // et l'affiche } }
Var 2529, name sw_tr_off, Link IOCARD_SW, Input 66 // Inter Transp Off { IF &sw_tr_off = 1 { &tr_mode = 1 CALL &affich_transp } }
Var 2530, name sw_tr_sby, Link IOCARD_SW, Input 67 // Transpondeur mode standby { IF &sw_tr_sby = 1 { &tr_mode = 1 &aff_tr_dg1 = &temp_tr_dg1 &aff_tr_dg2 = &temp_tr_dg2 &aff_tr_dg3 = &temp_tr_dg3 &aff_tr_dg4 = &temp_tr_dg4 CALL &affich_transp } }
Var 2531, name sw_tr_chrly, Link IOCARD_SW, Input 70 // Transpondeur mode Charly { IF &sw_tr_chrly = 1 { &tr_mode = 0 } }
Var 2532, name sw_tr_ident, Link IOCARD_SW, Input 69 // push ident transpondeur pour ivao { IF &sw_tr_ident = 1 { &tr_ident = 1 } }
Var 2533, name tr_ident, Link FSUIPC_INOUT, Offset $7B93, Length 1 // ident ivao
Var 2534, name tr_mode, Link FSUIPC_INOUT, Offset $7B91, Length 2, Value 0 // mode transpondeur ivao
Var 2540, name tempo, Link SUBRUTINE // temporisation saisie { IF &tempo >= 400 // si temps terminé { IF &press_count < 4 // si code partiel saisi { &temp_tr_code = &mem_tr_code // on remet l'ancien code &fs_transp = TOBCD &temp_tr_code // on le repasse à FS CALL &calc_temp_dgs // et on calcule les chiffres } CALL &affich_transp // on affiche les chiffres &press_count = 0 // et on réinitialise &new_tr_code = 1 ¤t_digit = 1 } }
Var 2541, name init_tempo, Link SUBRUTINE // initialisation tempo { &tempo = 0 &tempo = TIMER 400 ,4 ,5 &mem_tr_code = FROMBCD &fs_transp // mémorisation ancien code }
Var 2542, name place_dg, Link SUBRUTINE // place les chiffres { IF &press_count > 0 // si pas premier appui { &new_tr_code = 0 // pas un nouveau code } &press_count = &press_count + 1 IF ¤t_digit = 1 // saisie du chiffre des milliers { &temp_tr_dg1 = &place_dg } IF ¤t_digit = 2 // saisie du chiffre des centaines { &temp_tr_dg2 = &place_dg } IF ¤t_digit = 3 // saisie du chiffre des dizaines { &temp_tr_dg3 = &place_dg } IF ¤t_digit = 4 // saisie du chiffre des unités { &temp_tr_dg4 = &place_dg } ¤t_digit = ¤t_digit + 1 // incrémente la position IF ¤t_digit = 5 // revient au premier chiffre après le 4e { ¤t_digit = 1 } }
Var 2543, name calc_temp_code, Link SUBRUTINE // calcule, envoie à FS et affiche la valeu { L0 = &temp_tr_dg1 * 1000 L1 = &temp_tr_dg2 * 100 L2 = L0 + L1 L1 = &temp_tr_dg3 * 10 L2 = L2 + L1 &temp_tr_code = L2 + &temp_tr_dg4 &fs_transp = TOBCD &temp_tr_code CALL &affich_transp }
Var 2544, name use_code, Link SUBRUTINE // décision gader ou rejeter { IF &press_count = 4 // code entier saisi { CALL &fin // on garde le nouveau code } ELSE { CALL &tempo // on agit selon timer } }
Var 2545, name fin, Link SUBRUTINE // termine le traitement { &new_tr_code = 1 // réinitialise pour nouevau code ¤t_digit = 1 // réinitialise chiffre à 1 &fs_transp = TOBCD &temp_tr_code // envoi code à FS }
Var 2546, name calc_temp_dgs, Link SUBRUTINE // calcule les chiffres d'après le code FS { &temp_tr_dg1 = DIV &temp_tr_code ,1000 &temp_tr_dg4 = MOD &temp_tr_code ,10 L0 = &temp_tr_dg1 * 1000 L1 = &temp_tr_code - L0 &temp_tr_dg2 = DIV L1 ,100 L2 = &temp_tr_dg2 * 100 L0 = L1 - L2 &temp_tr_dg3 = DIV L0 ,10 }
Var 2550, name affich_transp, Link SUBRUTINE // affiche les 7 segments à réunir avec SIO { C0 = &sw_tr_off = 1 C1 = &courant = 0 // pas de courant C2 = C0 OR C1 C1 = &fs_avionics = 0 IF C2 OR C1 // pas de courant ou transpondeur coupé { &affich_transp = 0 &aff_tr_dg1 = 10 // on éteint les chiffres &aff_tr_dg2 = 10 &aff_tr_dg3 = 10 &aff_tr_dg4 = 10 } ELSE { &affich_transp = 0 &aff_tr_dg1 = &temp_tr_dg1 &aff_tr_dg2 = &temp_tr_dg2 &aff_tr_dg3 = &temp_tr_dg3 &aff_tr_dg4 = &temp_tr_dg4 &aff_tr_code = &temp_tr_code } } | |
| | | PIerre
Nombre de messages : 31 Date d'inscription : 16/03/2008
| Sujet: Re: transpondeur Sam 3 Mai - 13:56 | |
| Pierre,
A priori tu programmes en C##, alors pourquoi, ne te lances tu pas dans la programmation des PIC avec un interface VB, cela te permettrait d'utiliser SImConnect, et de t'affranchir de toutes les cartes d'interface ?.
La programmation en VB ne va pas te poser de pbs, et la programmation des PIC avec Proton est un langage assez similaire, après tu fais ce que tu veux sans dépendre de rien !.
Si tu veux plus de renseignement tu peux me contacter, mais j'ai l'impression que tu es bcp plus trapu que moi en programmation, et pourtant j'arrive a m'en sortir, doucement mais surement ':)'
A bientot.
Pierre | |
| | | Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: transpondeur Dim 4 Mai - 23:50 | |
| Salut Pierre
Non, je ne programme pas en C, c'est simplement du SIOC, le langage IOCard. J'ai fait un peu de programmation il y a longtemps, du temps du langage Pascal... J'ai aussi utilisé WordBasic, mais j'ai lâché avec l'arrivée du C et de Visual Basic...
Je ne suis pas du tout "trapu", j'essaie simplement de suivre une logique. Je ne dis pas que je n'aimerais pas me mettre à ce que tu fais, mais je n'ai pas vraiment le temps, et de toutes façons j'ai déjà les cartes d'interface... SIOC est très puissant malgré sa simplicité, car c'est un langage événementiel, correspondant exactement à ce dont nous avons besoin.
Mais dans l'avenir, peut-être. En tout cas bravo pour ce que tu fais !
Pierre | |
| | | Papa Charlie
Nombre de messages : 528 Date d'inscription : 16/03/2008 Age : 56 Localisation : Haute-Savoie
| Sujet: Re: transpondeur Mar 24 Fév - 0:42 | |
| Bonsoir à tous, Je fais remonter ce sujet car je me pose une question sur le transpondeur. Dans la réalité, le bouton rotatif pour sélectionner les modes comporte : OFF, STANDBY, ON, ALT (mode C), et TEST. Pouvez-vous me confirmer que FS ne prévoit pas ces modes ? En fait, je prévois pour mon cockpit deux ou trois positions seulement : OFF, SBY, et ALT (mode C). Et encore, comme mon panel radio sera activé via l'inverseur AVIONICS, je pense que le OFF est superflu. Je prévois également un poussoir "IDENT", pas pour FS qui ne le prévoit pas je pense, mais pour IVAO plus tard. Qu'en pensez-vous ? Merci. Philippe | |
| | | Nonolight Admin
Nombre de messages : 1099 Date d'inscription : 15/03/2008 Age : 60 Localisation : Région parisienne
| Sujet: Re: transpondeur Mar 24 Fév - 1:07 | |
| Bonne question Philippe , la réponse m'interresse également !
Nono | |
| | | stevelep
Nombre de messages : 512 Date d'inscription : 16/03/2008 Age : 50 Localisation : Neuchâtel LSGN, Suisse
| Sujet: Re: transpondeur Mar 24 Fév - 1:20 | |
| Sur le mien j'ai OFF-STB-MODE C, ident et VFR
STB/MODE C, c'est pratique pour IVAO
VFR ca switch sur 7000.
C'est vrai que le off n'est pas obligatoire, mais pour bosser les check de démarrage ca peux être bien. Dans la réalité les petit avions n'ont pas tous un bouton avionic et il faut démarrer avec le transpondeur sur off...
BOB | |
| | | Kelt760
Nombre de messages : 285 Date d'inscription : 15/03/2008 Localisation : Saclay
| Sujet: Re: transpondeur Mar 24 Fév - 2:28 | |
| Sur Ivao, on ne fait pas la différence entre ON et ALT. En réel, on vole sur ON en dehors du contrôle et on passe sur Alt quand un contrôleur donne un code. Sur IVAO, on passe sur ALT (charly) dès qu'on décolle, contrôle ou pas -> ON ne sert à rien. Mais nous, on le met quand même, câblé avec ALT.
Pierre | |
| | | steph737
Nombre de messages : 725 Date d'inscription : 15/03/2008 Localisation : Antananarivo
| Sujet: Re: transpondeur Mar 24 Fév - 10:45 | |
| En fait, sous IVAO, on peut choisir un transpondeur mode A ( pas d' altitude ) mais uniquement en passant par le plan de vol, donc pas très intéressant. Mais peut être une fonctionnalité dans les futures versions, donc tu as raison de le prévoir et de le câbler ! | |
| | | Papa Charlie
Nombre de messages : 528 Date d'inscription : 16/03/2008 Age : 56 Localisation : Haute-Savoie
| Sujet: Re: transpondeur Mar 24 Fév - 11:18 | |
| Dans l'ULM que je pilote, on démarre le moteur avec le transpondeur sur OFF. Une fois démarré, on bascule sur SBY. Et avant le roulage, on met sur ALT (Charlie), même hors secteur de contrôle (sauf pour un petit vol local ou des tours de piste). On n'utilise jamais la position ON. C'est vrai que pour bosser les procédures, le OFF est utile. Je vais donc le prévoir. En fait, dans ma programmation SIOC, je vais prévoir que le code réglé sur mon panel (pendant que le transpondeur est en position SBY) ne soit envoyé à FS qu'après avoir rebasculé sur ALT. Philippe | |
| | | icare11
Nombre de messages : 133 Date d'inscription : 17/03/2008 Age : 81 Localisation : 11800 Trèbes
| Sujet: Re: transpondeur Mar 24 Fév - 12:34 | |
| Bonjour, Si ça peut aider, j'ai transformé un instrument d'origine qui était commandé par roues codeuses. Lesquelles roues que j'ai conservées et transformées en simple inter, en réalité c'est l'équivalent d'un poussoir. Une photo et le code. // ============================================== TRANSPONDER Var 1050, Value 7 { CALL V1080 } Var 1052, Value 0 { CALL V1080 } Var 1054, Value 0 { CALL V1080 } Var 1056, Value 0 { CALL V1080 } Var 1051, Link IOCARD_SW, Input 27 { IF V1051 = 1 { V1050 = V1050 + 1 } IF V1050 = 8 { V1050 = 0 } } Var 1053, Link IOCARD_SW, Input 24 { IF V1053 = 1 { V1052 = V1052 + 1 } IF V1052 = 8 { V1052 = 0 } } Var 1055, Link IOCARD_SW, Input 26 { IF V1055 = 1 { V1054 = V1054 + 1 } IF V1054 = 8 { V1054 = 0 } } Var 1057, Link IOCARD_SW, Input 25 { IF V1057 = 1 { V1056 = V1056 + 1 } IF V1056 = 8 { V1056 = 0 } } Var 1060, Link IOCARD_DISPLAY, Digit 16, Numbers 4 // affichage XPDR Var 1070, Link FSUIPC_OUT, Offset $0354, Length 2 // Offset XPDR Var 1080, Link SUBRUTINE { L0 = V1050 * 1000 L1 = V1052 * 100 L0 = L0 + L1 L1 = V1054 * 10 L0 = L0 + L1 L0 = L0 + V1056 V1070 = TOBCD L0 V1060 = L0 } A+ JC | |
| | | Papa Charlie
Nombre de messages : 528 Date d'inscription : 16/03/2008 Age : 56 Localisation : Haute-Savoie
| Sujet: Re: transpondeur Mar 24 Fév - 13:05 | |
| Merci ! Au départ, j'avais aussi pensé à utiliser des roues codeuses, mais il fallait utiliser tellement d'entrées sur la carte Master que j'ai laissé tomber. Philippe | |
| | | icare11
Nombre de messages : 133 Date d'inscription : 17/03/2008 Age : 81 Localisation : 11800 Trèbes
| Sujet: Re: transpondeur Mar 24 Fév - 19:43 | |
| Attention, je n'ai pas utilisé les roues codeuses dans leurs code d'origine je les aient modifiées en simple contacte, c'est à dire que lorsque l'on tourne la roue un contact se produit tout comme on le ferait avec un poussoir. Donc on emploie que 4 entrées sur la carte mère.
A+
JC | |
| | | Papa Charlie
Nombre de messages : 528 Date d'inscription : 16/03/2008 Age : 56 Localisation : Haute-Savoie
| Sujet: Re: transpondeur Mar 24 Fév - 20:12 | |
| En ce qui me concerne, je comptais utiliser des roues avec afficheurs "réels" et non digitaux, comme celle-là : Le problème dans ce cas, avec ta solution, c'est le risque de "désynchronisation" entre le cockpit et FS, à moins que chaque chiffre affiché corresponde à une entrée sur la carte Master, d'où le grand nombre de connexions nécessaires, et de n'utiliser d'un seul sens de rotation. Philippe | |
| | | icare11
Nombre de messages : 133 Date d'inscription : 17/03/2008 Age : 81 Localisation : 11800 Trèbes
| Sujet: Re: transpondeur Mer 25 Fév - 13:55 | |
| Les chiffres de mes roues codeuses étaient comme les tiennes, mais j'ai retiré l'intérieur pour les équiper d'un afficheur digital et modifier la roue pour faire un contact à chaque clic de rotation. Donc je n'ai pour la commande qu'une entrée sur la carte mère (par digit), plus le câblage abituel pour un afficheur. En fait je n'ai gardé que l'aspect extérieur de l'instrument.
La tienne de roue, apparemment avec deux poussoirs, en haut et en bas que l'on doit pouvoir transformer en contact également, avec en plus, par programmation pouvoir incrémenter ou décrémenter, ce que je n'ai pas fait pour les miennes.
A +
JC | |
| | | Contenu sponsorisé
| Sujet: Re: transpondeur | |
| |
| | | | transpondeur | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|