Je suis toujours en train de configurer mes modules radio AMB8420. Je me heurte à un soucis, que j'ai plus ou moins réussis à résoudre, mais étant pas un expert je me demande si il n'existe pas une meilleure façon de faire la détection de fin de trame.
J'ai créer un dialogue UART entre mon PIC et le module, un classique
Au final je ne peux pas savoir ou est la fin de trame et donc quand je peux la traiter.
cependant il existe un indice dans la trame reçu ! c'est le nombre de bytes composant le message .
Prenons un exemple plus parlant :
Quand je reçois un message par voie radio, voici la trame reçue en hexa :
<Start> <Commands> <number of data bytes + 1> <data bytes> <field strength><Checksum>
Si je reçois par exemple la valeur "1\r" :
02 81 03 41 0D 26 EA ( chiffre en hexa sans les "0x")
Mon but est d'extraire pour traitement les DATA et le RSSI (field strength) .
Voici ma routine d'interrpution :
Code : Tout sélectionner
//########################### VARIABLE ###################################
char tmp, Index_Buffer, Data_prete, RSSI ;
signed short Fin_trame = -1;
char Buffer[100];
void interrupt(){
//----------------------- UART -----------------------------
if (RC1IF_bit == 1) {
tmp = UART1_Read(); // On récupere et stock la donnée
if (Index_Buffer == Fin_trame){
Buffer[Index_Buffer] = tmp ;
Buffer[Index_Buffer+1] = 0 ;
Fin_trame = -1;
Index_Buffer = 0;
Data_prete = 1;
}
else {
Buffer[Index_Buffer] = tmp ;
Index_Buffer++;
if (Index_Buffer == 3 ) Fin_trame = tmp+3;
if (Index_Buffer>=99)Index_Buffer=0; // GARDE-FOU, en cas de dépassement de Buffer j'écrase le début
}
}
}
Le nombre de bytes de données se trouve toujours en position 3 soit placé dans Buffer[2]. Avec ce chiffre je calcule ou se trouve la fin de trame que je stock dans la variable Fin_trame. A chaque réception je regarde si je suis arrivé au bout !
Voila pour le moment ca à l'air de fonctionner, a condition d'avoir toujours le nombre de bytes de la data indiqué en position 3 .
Je ne sais pas si ma méthode est bonne ou améliorable .
Merci à vous .


) sur ce time OUT !