IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Envoi des trames API entre modules xbee


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 0
    Points
    0
    Par défaut Envoi des trames API entre modules xbee
    Bonjour,
    Je travaille avec 2 carte chacune est à base d'un PIC18F2620 et un module xbee et chaque carte reliée au PC à travers d'une liaison RS232.
    Mon projet est de développer une bibliothèque pour gérer ces modules en mode API en langage C et le compilateur est CCS PCW et pour télécharger le code dans le PIC j'utilise le TinyBootloader.
    Mon problème est au niveau de l'envoie des trames aux modules.
    J 'utilise la fonction putc() pour envoyer la trame au module et la fonction getc() pour récupérer la réponse du module.
    Comment je peux envoyer et recevoir correctement ces trames API via la liaison RS232?
    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour Rawend,
    Dans ta communication série, le module XBee est totalement transparent. Avec ou sans, tu envois les mêmes trames (sauf éventuelle initialisation, mais je crois que la mise sous tension suffit avec Xbee).
    Concernant l'établissement de la liaison série, tu as deux solutions :
    - La compliqué : tu utilises des ports quelconques de ton PIC et tu te débrouilles pour communiquer en série.
    - La simple : tu utilises le module UART intégré à ton PIC et donc les pins associées pour établir ta communication.

    Pour le dernier cas, le compilateur que tu utilises doit surement te fournir une librairie pour la communication série. Tu trouveras dans ce module quatre fonctions principales : init, write dataReady et read (ce ne sont pas les vrai noms).

    Tu utilises init pour initialiser le module au tout début de ton programme. Avec write tu écris ta trame comme tu le ferais avec printf. A la réception, tu attends/contrôles qu'il y ait des données à lire avec dataReady puis tu lis ta trame caractère par caractère avec read.

    Je t'invite a regarder la Datasheet de ton compilo, en plus de l'explication des fonctions tu trouveras surement des exemples de communications basiques.

    Bon courage

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup pour ta réponse.
    Je veux essayer de modifier mon code selon tes conseilles.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 0
    Points
    0
    Par défaut
    Voici mon code pour envoyer une trame API (AT Command).Mon problème reste au niveau de récupération de la réponse du module xbee(AT Command response).
    J'ai travaillé avec 2 méthodes :
    1ere méthode : fprintf(Xbee,val) pour l'envoie, fgets(rep, Xbee) pour la réception
    2eme méthode : putc(val) pour l'envoie, getc() pour la réception
    mais j'ai pas eu de réponse .Pouvez vous m'aider pour corriger mon code? Merci d'avance.
    Note: j'ai configuré mes modules avec le logiciel XCTU , je travaille avec un coordinateur API et un end device API.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //partie déclaration
    #use rs232(baud=9600,parity=N,xmit=PIN_C2,rcv=PIN_B1,bits=8,stream=Xbee)
    ** Avec fprintf():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //main
    fprintf(Xbee,0x7E);//start delimiter
    //Datalength
    fprintf(Xbee,0x00);
    fprintf(Xbee,0x08);
    //API ID
    fprintf(Xbee,0x08);
    fprintf(Xbee,0x01);//frame id
    //at command
    fprintf(Xbee,0x44);
    fprintf(Xbee,0x48);
    //parameter value
    fprintf(Xbee,0x00);
    fprintf(Xbee,0x13);
    fprintf(Xbee,0xA2);
    fprintf(Xbee,0x00);
    //checksum
    fprintf(Xbee,0xB5);
    //récupérer la réponse
    fgets(rep,Xbee);
    fprintf(PC,"rep=%s",rep);
    **Avec putc():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    inputBytes[1]=0x00;
    inputBytes[2]=0x08;
    inputBytes[3]=0x08;
    inputBytes[4]=0x01;
    inputBytes[5]=0x44;
    inputBytes[6]=0x48;
    inputBytes[7]=0x00;
    inputBytes[8]=0x13;
    inputBytes[9]=0xA2;
    inputBytes[10]=0x00;
    inputBytes[11]=0xB5;
    //inputBytes[12]='\0';
    for(ctr=0;ctr<12;ctr++)
    {
        putc(inputBytes[ctr]);
    }
     for(ctr2=0;ctr2<12;ctr2++)
    {
        outputBytes[ctr2]=getc();
    }

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour, désolé pour la réponse tardive...

    Je n'avais pas compris ta demande, je pensais que tu voulais envoyer des trames via XBee, mais en realité tu veux envoyer des trames de configuration (AT) au module XBee comme le fait XCTU.

    La première chose que je te conseille et ça sera valable pour tous tes projets "embarqués" en général est de faire un header pour l'API XBee. Il est très difficile de lire un code avec les valeurs hexadécimal écrite directement. Il faut avoir le nez dans la datasheet et même avec ça c'est une prise de tête terrible. Le mieux est de faire un header spécifique pour ton API Xbee où tu vas référencer avec des constantes pré-processeur toutes tes valeurs. C'est fastidieux, mais une fois fait tu gagnes énormément en temps et en clarté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define XBEE_AT_COMMAND 0x08
    ...
    fprintf(Xbee, XBEE_AT_COMMAND);
    Je n'ai pas regardé dans le détail, mais ton code semble cohérent avec ce qu'explique la datasheet, j'ai juste relevé une chose qui pourrait poser problème : le code 0x13 - XOFF fait partie des codes qui doivent être échappés quand le paramètre AP vaut 2. Je ne sais pas dans quel mode tu es, mais regardes ce point.

    Remarque de second ordre : tu pourrais alléger ton code en travaillant dans un buffer au lieu d'utiliser fprintf pour chaque caractère.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 21
    Points : 0
    Points
    0
    Par défaut
    Merci pour votre aide.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Moi, je récupère les données venant de l'Xbee par interruption UART.

Discussions similaires

  1. Envoi reception trame avec un Module CAN/USB
    Par laoualb dans le forum Embarqué
    Réponses: 2
    Dernier message: 07/03/2014, 10h56
  2. envoi des courrier electronique entre linux et windows
    Par ps2ali dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 01/10/2007, 19h31
  3. Réponses: 5
    Dernier message: 22/01/2007, 14h57
  4. Réponses: 3
    Dernier message: 28/06/2006, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo