suite discutions sur les cartes..
Mon avis qui n'engage que moi, (basic pour certains mais moins pour d'autres, petit tuto comment ca marche)
je pense que l'architecture est importante et doit être découpée très précisément. nous avons des outils d'une puissance énorme, mais malgré tout ce qu'on en fait c'est un véritable gâchis. On est aller sur la lune pour moins que ça,... et maintenant pour faire clignoter une led il faut un micro/ram/.... c'est de pire en pire
le simulateur c'est : des capteurs, des voyants, des afficheurs, boutons, potentiomètres, des servo-moteur... les entrées/sortie (E/S) physique
Pour transformer le physique(signaux électriques) en logique(0/1 ou informatique) il faut l'interfacé les E/S du simu avec par exemple une carte IO CARD, SIOC.. ou encore arduino...
Attention cependant l'arduino peut être intelligent(ou pas!), comparer au io card et sioc qui ne font que de la "traduction" de signaux. Cependant avec une IO CARD il y aura une charge de travail plus importante coté ordinateur, car ce n'est que de la communication et de l'adaptation de signal, or qu'avec un carte arduino par exemple(ou stm32, sp32, ...y'en a des milliers) elle pourra s'occuper de taches de bas niveau et aussi un peu plus évoluer. si on a un équipement lourd à gérer, on pourra se contacter de le mettre sur un autre arduino, l'adapter en fonction de E/S.(nano, uno, mega...) pour lui tout seul (exemple GPS, ILS, COM/NAV/ADF/DME). avec l'USB, on peut connecter 128 périphériques !!! pourquoi s'en priver (rapide et cordons pas cher, nombreux hub disponible)
l'interface sert de communication entre une liaison série haute vitesse( avec arduiono : 250000 bauds /s c'est pas mal), qui doit lire ou écrire des données, et les entées/sorties ou ses données sont adaptées. Cette interface ne doit pas être trop intelligente. elle ne doit jouer que le rôle de pilote/driver. Le programme de cette interface doit tourner en boucle sans interruption.
Si elle est trop intelligente elle va ralentir l’acquisition, l’émission et la transformation des données
architecture générale:
logiciel sim <-> API ou FSPUI <-> programme interface E/S( INT1) <== USB / WIFI / BLEUTHOOTH ==> CARTE (INT2)<==> E/S
qu'est qu'on peut faire avec 250000 bauds/s à 8bits + 1 Start + 1 Stop => 250000 / 10bits = 25000 octets par secondes
pour être fluide on peut se baser comme pour les ecrans, à 24 voir 25 passage par secondes, ca nous fait 1000 octets par passages. donc plus qu'il n'en faut en théorie.
donc comment coder ou conceptualiser par exemple le cas de l'afficheur d'une com/nav (je donne des freq bidon):
ordi ---usb-- arduino
sur INT1 : le programme accède à l'API de FS ou mémoire offset de FSUIPC pour lire les valeurs des com et nav du logiciel de simulation. Un octet(byte pas conformdre avec bit(1/8 d'octet)) va jusqu'à la valeur 255, sans optimiser, on va prendre en com 8.3 pour 123.225kz 1 octet pour 123mhz et un autre 225kz. soit 2 octet(byte) par com/nav, soit 2x2 com +2x2 nav = 16 octet. ca sera le paquet de données dit UTILE(celui qui détient l'information)
INT1 va envoyer un message via l'USB à INT2, dans un langage compréhensible (un dialogue), que l'on appelle protocole
on va creer ce que l'on appelle une trame (une phrase, un ordre, une action) ou il y aura les données dites UTILE et les données de contrôles [CONTROLE| DONNEES]. on peut faire plus complexe, gestion erreur, balisage début et fin.., mais bon la ça suffit c'est de la simu.
on a décidé arbitrairement du mot de contrôle pour contrôler com/nav va etre COM, en 3 octet les lettres C O M, ca peut être aussi un octet mis a 1, ou 55 ... le mot de control permet lors de la lecteur d'aiguiller le message recu. ex : COM pour réception des com, ADF pour adf.... A1 pour un voyant alerte général...on aurait pu mettre a,b,c,d; ou encore 1,2,3,4,5...
notre trame:
[CONTROLE| DONNEES] => [C O M | COM1 | COM2 | NAV1 | NAV2] == 3o + 4 x 2o = 15 octets
donc on va envoyé x/fois par secondes : [C O M | [123] [255] | [123] [255] | [123] [55] | [123] [55] ]
sur INT2 : avec une interface arduino, nous recevrons les données com 123.225 et 123.225 et et nav 123.55 et 123.55 via la laison serie USB, sous forme codée [C O M | [123] [255] | [123] [255] | [123] [55] | [123] [55] ]
On décortique le tout, et on envoi à chaque DIGIT d'afficheur le bon chiffre, le tout en boucle. Car 1 seul est allumé en même temps mais x fois par secondes, c'est comme les écrans, l’œil ne le voit pas.
voila pour le com/nav. admet on que l'on veuille envoyer maintenant la vitesse vers l'instrument Airspeed indicator
on pourrait envoyer [A S I | vitesse]. on met la vitesse sur 2 octet (valeur possible de 0-65535), suivant l'avion 1 octet 0-255 ca suffirait pas
je veux maintenant coder mes afficheurs d'alertes. admet on qu'il y a en 7 sur le zing. comme il doivent être allumés ou éteints, on peut faire du binaire 0/1. soit en méthode bourrin j'utilise 1 octet par alerte, j'aurai 7 octets, soit je code le tout par bit dans un octet ex [0 0 1 1 0 0 1 1 0 1] . chaque position 0/1 correspond à 1 seul alerte. Le poids du message sera d'un seul octet. avantage il est petit et rapide, désavantage il faut décortiqué chaque bit.
ex de code, chercher si la valeur du 6 bits est allumé: (0 0 X 0 0 0 0 0) 0010000 = 20 hexa
- Code: Tout sélectionner
if (octetrecu & 0x20) { alumer_alerte_plus_de_carburant() ;}
if (octetrecu & 0xA0) { alumer_alerte_generale() ;}
...
pour les bottons, potentiomètre... c'est pareil mais en sens inverse. de INT2 => INT1
-------------
exemple de ce que peut faire la carte arduino nano qui commandera un VOR mécanique, avec des taches précises
suivant le hardware bien-sur. on admettra que le cadran à degrés(rose des vents) est dirigé par un moteur pas à pas, avec un capteur pour détecter le deg 0. un encodeur rotatif pour sélectionner les deg. une aiguille (servo) pour l'indication gauche ou droite, un flag to/fr/off
mise sous tension
- initialisation du cadran des degrée à 0 deg. sert à caler le cadran car le hardware ne permet pas de savoir à quel degré il se situe
- flag à off
- aiguille au milieu
Boucle:
- acquisition <= data USB ( deg de course, deg aiguille, flag)
- si donnée reçu => mise en mémoire
- traitement et mise a jour des mouvements des moteurs (par tic)
- traitement du flag s'il a changé => actionne le flag FR ou TO ou OFF
- envoi position de l'encodeur=> USB
Par interruption : quand une rotation intervient, l’interruption arrête le traitement du microprocesseur
- test rotation de l'encodeur=> mise en mémoire puis retourne dans la boucle. ici le traitement est très très rapide AQUISITION -> MEMORISATION
Bonne lecture, c'est un peu fouillis.
