Implémentation des programmes

Programmes de simulation sur le PC

Ces programmes permettent de programmer un modèle, de vérifier le programme et finalement de le transférer vers l'émetteur.
Après le vol, avant de modifier le programme, il faut transférer les valeurs des paramètres de l'émetteur vers le PC.

Ces programmes sont écrits en Python et Tkinter pour l'interface, disponibles tant avec Windows que Linux.
L'interface Gui se trouve dans deux modules:
-main.py qui est le programme principal ( lance l'application et gère le menu)
-Gui.py  gère l'interface de simulation

Toute la logique de l'application se trouve dans le module Calc.py
Dans ce module une fonction Tx() doit être adaptée aux besoins, car elle décrit
1) les commandes utilisées pour simuler un émetteur sur l'écran du PC.
2) les organes de contrôle de l'émetteur et leur connection aux portes du microprocesseur.

Voici cette codification pour mon émetteur prototype:
      # __________the variables in the microprocessor ________________________________________________________
        # this table provides a equivalence between  the name of a hardware variable and the index of this variable in L_tx or N_tx
        # theses tables are the interface with the computational routine calc()
        # the variable defined here are
        #  -real hardware: ADC, switch...
        #  -fixed variable defined in the core program of rccl
        #       digital trims
        #       servo outputs
        #       nearly all the buttons (because a debouncing is provided)
       
        # example: the variable @C1 is at the index 4 in the Numerical table
         #here (my prototype) there are 4 sticks, 3 sliders,   4 digital trims for the sticks ,max 12 servo channels,
        self.N_tx=["M1", "M2", "M3", "M4", "C1", "C2", "C3",  "Vn", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11","V12"]
        # (for analog trims, please group all the adc inputs)
        # digital input  : switches and a special button
        # the first variable is reserved for autotrim (please reserve always this variable)
        self.L_tx=["BA","S1","S2","S3","S6","S4a","S4b","S5a","S5b", "B1" ]


A modifier sous la forme d'un fichier de paramètres, pour faciliter la simulation avec plus d'un émetteur.

Organisation générale de l'émulateur 

Le language RCCL est interprété par un microprocesseur.
Ce prototype est développé pour un Atmega128: un micro 8 bits, disposant de au moins 4K de RAM, programmé en C.
Les outils de dévelopement sont disponibles gratuitement, tant pour Windows que Linux.

Les programmes suivants sont quasi indépendants du microprocesseur :
AVR_rccl.c qui est le programme principal
-rccl.h qui comporte entre autre toutes les dimensions des tables
-calc.c  qui comporte l'interpréteur proprement dit
-param.c pour la gestion des paramètres (recherche hiérarchisée)

-menu.c qui gère les menus et les messages en vol

Les programmes fortement liés au microprocesseur sont:
- io.h comporte les définitions d'entrées-sorties
- io.c où se trouve la correspondance détaillée entre un "bouton" de l'émetteur et une porte du microprocesseur.
Le détail se trouve dans ce fichier Atmega128Ports . Celui qui veut réaliser son propre émetteur en utilisant un Atmega128 ne devra sans doute modifier que ce fichier et le programme io.c
- io_timer.c comporte deux timers, pour la génération du signal PPM et du signal d'horloge
- sd.c comporte l'accès aux fichier de la carte SD, qui est compatible avec le PC.
- battery.c surveille la tension de la batterie ou coupe l'émetteur lorsqu'on le laisse allumé sans bouger les manches
- io_all.c concerne les entrées-sorties mais est quasi indépendant du microprocesseur
- le folder util comporte des programmes d'origine externe, pour gérer l'écran LCD, la communication série et la carte SD

L'interpéteur utilise une zone de mémoire RAM partagée en  tables de dimensions fixes

- table des variables numériques N_tx., comportant des éléments integer en 16 bits
- table des variables logiques L_tx, comportant une valeur binaire, un byte/élément

- table des opérations (byte-code) op
qui est une table de char
- table des libellés, en RAM (possibilité de migration ultérieure vers l' EEPROM )

Format des variables numériques:
Les constantes du programme source sont multipliées par  la constante TOINT = 100 pour obtenir la valeur interne.

La valeur normale des variables est comprise entre -100 et +100, leur valeur interne est donc un nombre entier compris entre -10000 et +10000. Un léger dépassement est possible pendant les calculs.
Les variables analogiques (ADC) sont également exprimées de cette façon et ont été mises à l'échelle (calibrage des manches).
Les voies de sortie @Vx sont également des variables  numériques dont la représentation interne est exprimée en microsecondes.(valeur normale 1500)

Chaque table de variables commence par les variables liées au hardware (@.. ) qui sont à un endroit fixe (voir le simulateur  Calc.Tx). Cette position fixe permet la communication entre les programmes du microproceseur et le language RCCL
Les valeurs constantes suivent, puis les variables d'état et ensuite toutes les variables intermédiaires.
Ces dernières sont initialisées à zéro au début de chaque cycle de calcul.

Les tables de variables comportent au maximum 254 éléments, permettant d'utiliser un entier de 8 bits pour l'index.
La valeur 255 est réservée.

Chaque opération comporte
- un byte = code opération (traduction des codes source INIT, ADDS... voir Calc.py  OPCODE ou rccl.h)
- un byte = le nombre d'arguments
- 0 à n arguments de 1 byte chacun, qui sont un index d'une des deux tables de variables. (Selon le code opération, la nature des variables est connue: numérique ou logique) .

La table des opérations comporte ces opérations, les unes après les autres, terminées par un code opération indiquant la fin de la boucle.

La table des libellés est une table de char, comme la table des opérations. Elle comporte pour chaque libellé:
-un byte avec la nature du libellé, soit pour le moment le code '5' ou '6' qui distingue un nom de phase d'un nom de paramètre.
- un byte avec l'index de la variable (logique pour nom de phase, numérique pour nom de paramètre
-un char \0 qui sert de terminateur pour une exploration en marche arrière
- une chaîne de caractères terminée par \0

Format du fichier modelname.md transféré vers l'interpréteur

Le fichier "source" modelName.mdx est transformé sur le PC en un fichier , transféré vers l'émetteur.
Le nom du fichier est modelName.md (les points éventuels dans le nom du modèle sont remplacés par _ )
Ce fichier est en ASCII et réside  sur une carte SD.
Chaque ligne comporte un code "x" en un caractère et des arguments séparés par un espace, puis  un séparateur "#" et un commentaire qui est en général la ligne du programme source. Ce commentaire n'est utile que pour le debug des programmes.


x=0 Nom
l'argument est le nom du modèle

x=1 Nombre de variables
arguments de la forme 123 :
- nombre de variables numériques
- nombre de variables logiques
  (ceci pour vérifier que la dimension des tables n'est pas dépassée)
-  index de la première variable numérique  à initialiser à zéro au début de chaque cycle de calcul
-  idem variable logique

x=7 Valeur des paramètres
Ce sont de fausses constantes, qui sont modifiables sur l'émetteur.
Elles sont rangées immédiatement derrière les variables hardware.
Codification comme les constantes ci-dessous
En fin de fichier on trouve les lignes de code 6 qui associe un libellé à chacune de ces paramètres.  

x=8 trims digitaux pour les sticks
Un exemple : 8? 017    2le paramètre qui se trouve à l'index 17 de la table est associé au trim du manche 2

x=2 Constantes
Les constantes sont codées sous la forme 123 (  123=index dans la table) suivi d'un nombre entier (voir plus haut TOINT),
elles ne sont pas modifiables.


Un exemple : 2? 017    8000la variable numérique qui se trouve à l'index 17 de la table vaut 80



x=3 Opérations

T xxx xxx....

En général, la première variable est la variable de sortie, si elle existe pour le code opération. Les variables d'entrée suivent.
Le code interne T est un byte qui identifie l'opération.(coir Calc OPCODE ).

3 = 029 020
On transfére la constante -100 (à l'index 20 de la table) dans la variable moteur (index 29).

Remarque: pour certaines opérations, la codification en langage source RCCL prévoit des arguments optionnels. Ici tous les arguments sont présents, certains avec la valeur "vide" égale à 255.


Phase:
Une opération phase comporte une variable logique d'entrée. Si elle est la première à être vraie, elle positionne à "vrai" une série de variables de sortie. L'ordre des paramètres est donc inversé: une variable d'entrée ou 255 si elle est absente suivie de 1 à n variables de sortie, par exemple vol vol.therm  vol.therm.spirale
La dernière variable logique est celle qui identifie la phase.

Out/Outn:
Tous les paramètres sont exportés(neutre, déviation max  )



x=4  INIT des paramètres

Les opérations utilisent  les paramètres comme des variables numériques ordinaires, référencées par un index dans la table des variables numériques.

L'opération PHASE détermine la phase active, note son nom et met à True une ou plusieurs variables logiques . Par exemple, si la phase active est vol.lent.spirale il y a trois variables mises à la valeur True: vol.lent.spirale ,vol.lent et vol. Elles sont utilisées ici   .

Prenons opération INIT comme exemple:
diff:    INIT 10 vol.vitesse
Quelle est sa représentation dans le fichier ?
4 I 036 030 020
- le code 'I' lié à "INIT"
- 036 est l'index  dans N_tx de la valeur courante du paramètre diff: Les autres instructions qui font appel à diff: se réfèrent à cet index. Appelons ceci la variable pvar
- 030 est l'index d'une variable initialisée à  10.0, appelons ceci une des variables vvar associées au paramètre
- l'index d'une variable logique (ou 255 si il n'y a pas de condition)

La boucle de calcul transfère vvar vers pvar si la condition est vraie.   



Avant de quitter, le programme  écrit les paramètres dans un fichier . mdp  !

x=5 Libellés de phases
x= 6 libellés de paramètres

Un libellé est  annexé à certaines variables, comme le nom d'une phase ou d'un paramètre, pour l'afficher à l'écran LCD.

Cette ligne comporte la variable ( index dans la table, logique pour les phases, numérique pour les paramètres)) , un espace puis un libellé qui ne comporte aucun espace.

Ces lignes sont à la fin du fichier, triées selon le libellé.

5 045 libellé

Format du fichier des paramètres modelname.mdp

Ce fichier comporte des paramètres d'un modèle qui sont modifiables sur l'émetteur et autres données à conserver entre deux vols . Eventuellement, le programme de simulation sur le PC peut les lire.
Il est sauvé sur la carte SD avant le chargement d'un autre modèle ou lors de la procédure d'arrêt de l'émetteur.

Ce fichier comporte les paramètres numériques qui ne sont pas initialisées à zéro lors de chaque cycle de calcul.

Format de transfert: un code (char) indique la nature des données, il est suivit par des valeurs numériques séparées par un espace:

 Ce fichier porte le nom du modèle, suivi par l'extension .mdp


Le fichier modelname.txt

Il comporte la le programme source après insertion des modules . Ce fichier est fourni à titre d'information; il n'est pas utilisé par l'émulateur.

Format du fichier des paramètres RCCLinit.mdp

Ce fichier comporte le nom du dernier modèle, ainsi lorsqu'on allume l'émetteur, le dernier modèle est chargé automatiquement.

Format du fichier des paramètres RCCLcal.mdp

Ce fichier comporte les paramètres de l'émetteur et n' a aucune utilité pour le programme de simulation du PC.
On le prépare sur le PC après avoir utilisé le menu ADC value qui fournit les valeurs lues par l'ADC.
Il comporte les données de calibrage des manches, chaque ligne comporte
c aaaa ccccc hhhh
c= voie analogique
aaaa = valeur lue par l'ADC lorsque le stick est à la position -100%
ccccc = valeur lue lorsque le stick est centré
hhhh = valeur lue lorsque le stick est à la position +100%

Les fichiers et leur mise à jour


FichierPCcarte SDmaj
source .mdxcréé manuellement, lu par le simulateur-PC
.mdcréé par le simulateurutiliséPC
paramètres .mdplu optionnellement, pour simuler avec les paramètres réelscréé lors de l'arrêt de l'émetteur émetteur et simulateur
RCCLinit.mdp-créé lors de l'arrêt
lu au démarrage
émetteur



© Copyright 2008-2009 Robert Spilleboudt   - Tous droits réservés.
Projet rcopensource - Licence GPL V2