Reception d'octets
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Reception d'octets



  1. #1
    invite0d244b79

    Reception d'octets


    ------

    Bonjour à tous ,

    Je travail actuellement sur un projet "afficheur de score". J'ai un petit soucis car je suis débutant en programmation C. En fait une télécommande envoie plusieurs octets via une liaison sans fil (module xbee ), je récupère la trame sur mon PIC 18F2550.

    (octet 1) l'identification de l'émetteur
    (octet 2) ;
    (octet 3) lecture adresse
    ...

    Mon problème c'est que je n'ai jamais vu en cours la réception de plusieurs octets, pour lire l'identification de l'émetteur j'ai réussi sans aucun problème mais je ne sais pas comment procédé pour lire ensuite le 3eme octet et ceux après . Je travail sur le logiciel CCS C Compiler.

    programme pour lire le premier octet:

     Cliquez pour afficher


    merci de votre aide.

    -----

  2. #2
    carcan

    Re : Reception d'octets

    Salut !

    soit plusieurs getc un à la suite de l'autre, soit un "getstring", et tu décomposes ta trame ensuite. Est-ce que tu utilises un contrôle d'erreur dans ta trame ?

    Un truc important avec les getc ou getstring : il faut qu'il y ait un timeout déclaré qq part pour éviter de bloquer le prog si une trame a été mal reçue par exemple. En CCS, il suffit d'ajouter dans la ligne #use RS232 (blabla, blabla, ..., timeout=200); la valeur est en millisecondes.

    Si tu as besoin je peux t'envoyer des exemples de ce genre de chose en CCS, mais faudra attendre demain que je sois au boulot

    A+
    Laurent

  3. #3
    invite0d244b79

    Re : Reception d'octets

    Merci de ta réponse !

    Alors non j'utilise pas de contrôle d'erreur enfin pour l'instant mais je note pour en mettre un. J'ai déjà utilisé cette commande dans le passé donc je devrais la savoir la remettre en œuvre.

    Par contre j'ai pas le logiciel chez moi mais est ce que le getstring est plus pratique que le getc à la suite ? si oui c'est compliqué ?
    Et est ce que je devrais créé autant de variable que j'ai d'octet si j'utilise le getc ?

    Et oui si sa ne te dérange pas j'aimerai bien avoir un exemple avec le getc et le getstring

  4. #4
    carcan

    Re : Reception d'octets

    Salut !

    voila un exemple piqué d'un firmware de station météo. Il reçoit des trames de la manière suivante : 1 caractère de départ + 2 caractères d'adresse (en Hexa) + des caractères de données (max 4) + 2 caractères de checksum + fin de trame ('\r'). Voila le code de l'interruption série :

    Code:
    #int_RDA
    void  RDA_isr(void) 
    {
       char INStr[20],Lead,Data[4],Test[4],Output[10];
       BYTE len,i,QAdress,QCheckSum,CheckSum;
       int1 Response;
           
       len = get_string(INStr,20);
       Lead = INStr[0];
       Response = 0;
       QAdress = TwoCharToHex(INStr[1], INStr[2]);
       QCheckSum = TwoCharToHex(INStr[len-2], INStr[len-1]);
       
       if (QAdress==Adress)
       {
        output_bit(PIN_C0,1);//LED ON 
        CheckSum = CheckSumCalc(INStr,len-2);
        if (QCheckSum==CheckSum)
        {
          for (i=0;i<4;i++) Data[i]=0;
          for (i=3;i<(len-2);i++) {if (i<7) Data[i-3] = INStr[i];}
          
          if (Lead=='#')
          {
           //No Function a this time
          }
          if (Lead=='$')
          {
           strcpy (Test,"20");
           if (strcmp(Data, Test)==0) {sprintf (Output,"Bonjour");Response=1;}
          }
        }
        if (Response)
        {
         output_bit(PIN_C5,1);//TALKER
         CheckSum = CheckSumCalc(Output,strlen(Output));
         printf ("%s%02X\r\n",Output,CheckSum);
         output_bit(PIN_C5,0);//LISTEN MODE
        } 
       }
         
       output_bit(PIN_C0,0);//LED OFF
    }
    Avec là dedans :
    - la variable Adress = Adresse locale du module
    - la fonction CheckSumCalc :
    Code:
    BYTE CheckSumCalc(char* S, unsigned int8 len)
    {
     BYTE i;
     int16 Sum;
     
     Sum = 0;
     for (i=0;i<len;i++) Sum = Sum + S[i];
     return (Sum & 0xFF);
    }
    - la fonction TwoCharToHex
    Code:
    BYTE TwoCharToHex(char Ch1, char Ch2)
    {
     BYTE U,L;
     
     if (Ch1<='9') U=Ch1-'0';
     else U=(toupper(Ch1)-'A')+10;
     if (Ch2<='9') L=Ch2-'0';
     else L=(toupper(Ch2)-'A')+10;
     
     return ((U<<4)|L);
    }
    - la fonction get_string :
    Code:
    BYTE get_string(char* s, unsigned int8 max) {
       unsigned int8 len;
       char c;
    
       --max;
       len=0;
       do {
         c=getc();
         if(c==8) {  // Backspace
            if(len>0) {
              len--;
            }
         } else if ((c>=' ')&&(c<='~'))
           if(len<=max) {
             s[len++]=c;
           }
       } while(c!=13);
       s[len]=0;
       return(len);
    }
    - et ne pas oublier de déclarer un timeout dans #use rs232

    J'espère que ça pourra t'aider ... bien entendu j'ai retiré toutes les routines qui génèrent les trames de réponse, j'en ai laissé une bidon qui répond "Bonjour" si la donnée reçue est "20". Cet exemple montre comment recevoir en une fois une trame, la décoder, la vérifier et donner une réponse si elle est correcte et adressée au bon destinataire.

    A+
    Laurent

  5. A voir en vidéo sur Futura
  6. #5
    invite0d244b79

    Re : Reception d'octets

    Oui sa ma beaucoup aidé je te remercie beaucoup de ton aide

  7. #6
    invite0d244b79

    Re : Reception d'octets

    J'ai une autre question.. Comment faire pour transformé une valeur décimale en valeur hexadécimale ?

    J'ai cherché sur d'autre forum et on ma parlé de sprintf mais je pense pas que se soit la solution..

    Merci encore.

Discussions similaires

  1. reception FM
    Par invited4dfeb8e dans le forum Électronique
    Réponses: 2
    Dernier message: 15/11/2008, 15h38
  2. [Brun] pb réception TV
    Par invitee0241ff4 dans le forum Dépannage
    Réponses: 1
    Dernier message: 25/11/2007, 18h34
  3. [Brun] pb réception
    Par invite5cfd8abf dans le forum Dépannage
    Réponses: 6
    Dernier message: 25/09/2007, 20h37
  4. 2eme pc en wifi, probleme reception/envoi d'octets
    Par invite56ac6061 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 06/08/2006, 12h29
  5. Réception
    Par invite072f76c1 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 9
    Dernier message: 27/06/2006, 14h50
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...