dimanche 20 septembre 2009
Projet ADS-B: Acquisition fonctionnelle
N'ayant pas (encore) réussi à approvisionner un PIC18F13K22, j'ai continué à chercher à optimiser le code du PIC18F2550 pour finir par retenir l'option d'un code linéaire dans lequel les séquences de décodage élémentaires sont mises bout à bout quand bien même celles-ci sont presque toutes identiques. Ce n'est pas élégant mais je n'ai vraiment pas trouvé d'optimisation me permettant d'éviter cela.
La bonne configuration du PIC, et les timings des séquences, ont été vérifiés à l'aide de l'analyseur logique - échantillonnage à 20ns - et de l'insertion dans le code d'une instruction inversant l'état d'une sortie. Première erreur: j'ai oublié que le codage de l'activation du diviseur d'horloge de la CPU différait selon que l'on est en mode HS (High Speed) ou HSPLL (HighSpeed avec horloge dérivée du PLL intégré). Ce problème corrigé, il m'a fallu partir à la chasse à une erreur d'un cycle dans l'échantillonnage. La lecture du listing résultant de l'assemblage m'a permis de découvrir l'origine du problème. La taille du code non structuré conduit à encoder la plupart des branchements sur deux mots, consommant alors 2 cycles, et non un seul. Une fois le code revu, les premières trames reçues et décodées sans aucune erreur - 56µs et 112µs - s'affichent sur l'écran de l'analyseur logique.
Mon code gère deux signaux d'information que j'utilise pour déclencher l'analyseur: un signal devenant vrai lorsqu'un préambule complet est reçu et un signal devenant vrai quand une trame complète a été reçue, sans erreur. Cette approche s'avère être indispensable pour mettre rapidement au point un programme aussi pointu en terme de précision dans l'échantillonnage.
La suite: transmettre les trames - 7 ou 14 octets - sur la liaison série de test avant de s'attaquer à configurer et utiliser la sortie USB.
La bonne configuration du PIC, et les timings des séquences, ont été vérifiés à l'aide de l'analyseur logique - échantillonnage à 20ns - et de l'insertion dans le code d'une instruction inversant l'état d'une sortie. Première erreur: j'ai oublié que le codage de l'activation du diviseur d'horloge de la CPU différait selon que l'on est en mode HS (High Speed) ou HSPLL (HighSpeed avec horloge dérivée du PLL intégré). Ce problème corrigé, il m'a fallu partir à la chasse à une erreur d'un cycle dans l'échantillonnage. La lecture du listing résultant de l'assemblage m'a permis de découvrir l'origine du problème. La taille du code non structuré conduit à encoder la plupart des branchements sur deux mots, consommant alors 2 cycles, et non un seul. Une fois le code revu, les premières trames reçues et décodées sans aucune erreur - 56µs et 112µs - s'affichent sur l'écran de l'analyseur logique.
Mon code gère deux signaux d'information que j'utilise pour déclencher l'analyseur: un signal devenant vrai lorsqu'un préambule complet est reçu et un signal devenant vrai quand une trame complète a été reçue, sans erreur. Cette approche s'avère être indispensable pour mettre rapidement au point un programme aussi pointu en terme de précision dans l'échantillonnage.
La suite: transmettre les trames - 7 ou 14 octets - sur la liaison série de test avant de s'attaquer à configurer et utiliser la sortie USB.
Libellés :
ADS-B,
ADS-B Decoder
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire