samedi 3 octobre 2009

Projet ADS-B: Firmware V0.8

Dans cette version les commandes reçues sur la liaison série sont gérées sous interruption. Le routage du signal d'entrée a été modifié sur RC0 pour libérer les ports I2C en vue d'une extension future permettant de piloter un tuner I2C. Une impulsion est par ailleurs délivrée sur RA4 lors de la réception d'un code ICAO correspondant à celui ayant été mémorisé.



Il me reste encore à faire une dernière modification avant de basculer l'ensemble dans une première version de production: l'extraction en mode étendu, des champs altitude, vitesse et vitesse verticale. Ce sera chose faite d'ici le prochain week-end.

Le code binaire de la version 0.8 est disponible ici.

jeudi 1 octobre 2009

Projet ADS-B: Firmware V0.7

Le mécanisme de vérification de l'intégrité des trames - option CRC activée - est désormais totalement fonctionnel.


Quelques minutes de trafic suffisent pour renseigner la table avec les codes ICAO extraits des trames DF17 (code certain) et DF11 (code probablement bon), et ainsi vérifier l'extraction du code du champ AP des autres trames.



Cette table contient 50 entrées, chaque entrée étant purgée après 5mn d'inactivité constatée sur le code ICAO associé.



Une nouvelle option permet de surveiller l'apparition d'un code ICAO préalablement enregistré en mémoire. Un message spécifique est émis lors de l'apparition de ce code sous réserve que l'option ait été activée.

Les commandes gérées par cette version sont les suivantes:
- 'CTRL-Q': XON
- 'CTRL-S': XOFF
- '?': Identification de la version
- 'o': Etat des options
- 'R': Reset à chaud
- 'S': Remise à 0 des compteurs
- 's': Envoi des compteurs
- 'C': Effacement de la table des codes ICAO
- 'c': Envoi du contenu de la table
- 'E': Effacement du code ICAO à surveiller
- 'e': Entrée du code ICAO à surveiller
- 'i': Envoi du code ICAO surveillé
- 'A': Activation de l'option surveillance
- 'a': Désactivation de l'option surveillance
- 'F': Activation de l'option surveillance
- 'f': Désactivation de l'option surveillance
- 'X': Activation de l'option 'Données étendues'
- 'x': Désactivation de l'option 'Données étendues'

Il me reste un problème à résoudre, la gestion des commandes est réalisée dans la même boucle que la boucle d'acquisition des trames. Cette boucle étant actuellement bloquante en l'absence de trames, aucune commande ne peut être transmise. Je vais donc devoir passer la gestion des commandes sous interruption en priorité basse, la priorité haute étant réservée à la gestion du cycle de vie de la table de codes, ceci uniquement lorsque l'option de contrôle des CRC est activée.

Les meilleures performances seront obtenues en désactivant les modes 'CRC' et 'Données étendues', le microcontrôleur n'ayant aucun autre traitement à effectuer que d'attendre une trame et de la retransmettre codée sus la forme d'un chaîne hexadécimale sur la liaison série à 115200 Bauds.

mardi 29 septembre 2009

Projet ADS-B: Amélioration du firmware

Le fonctionnement de la chaîne étant validé, je peux désormais me consacrer à améliorer le logiciel embarqué dans le PIC18F2550. Après réflexion, j'ai décidé d'intégrer, outre la fonction de décodage, quelques fonctions de traitement qui permettront de décharger l'application externe.

La version 0.6 offre ainsi deux modes de fonctionnement activables par une simple commande sur la liaison série:
- Un mode normal (commande 'n') qui transmet les données reçues selon un formatage simple, charge à l'application de tout décoder.
- Un mode étendu (commande 'x') qui transmet en plus les informations suivantes: niveau de réception du signal, type de la trame, identifiant ICAO, et si disponibles: call-sign, CPR, latitude et longitude.

La command 'o' permet d'obtenir l'état courant des options.

La prochaine version intègrera une fonctionnalité permettant de valider la bonne réception des trames autres que les trames DF11 et DF17 quand l'otion de vérification des CRC est activée. Les identifiants calculés à partir du champ PA des autres trames sont corrélés aux identifiants acquis dans les trames DF11 et DF17 considérées comme intègres à la suite de la vérification du champ PI. Si l'identifiant est dans la table, la trame est marquée valide (préfixe '+' dans le format de sortie).
L'exemple de capture précédent permet d'illustrer ce mode de fonctionnement: le code ICAO 391EOF est transmis via le champ PA par deux trames DF00 mais est aussi présent dans une trame DF17 dont l'intégrité a été vérifiée. Toutes les autres trames annoncant ce code dans le champ PA seront considérées intègres.
La commande 'c' permettra d'obtenir le contenu de la table des codes acquis.