programmation en PIC C
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

programmation en PIC C



  1. #1
    invite64d8200f

    programmation en PIC C


    ------

    Bonjour,

    j'ai besoin d'aide, je suis débutante en programmation, et j’espère que vous pourriez m'aider.

    j'ai programmé un code en pic c qui lit un message que je l'envois à travers l'hyperterminal .
    je travaille avec le pic 16F877 dont la pin de reception est RX C7.
    le problème c'est comment appeler le pin de reception, lire son contenu et afficher un message selon son contenu.
    voici une partie de programme "il est pas fonctionnel"



    char chain[10];
    while(TRUE)
    {


    fgets(chain);

    if (chain="up")
    printf("up");


    if (chain="down")
    printf("down");

    }

    pour voir si le programme dialogue bien avec le port série J'envois le mot "up" ou "down" a l'hyperterminal. J'ai essayé plusieurs instructions sans succès.

    Dans l'attente de vos réponses et vos aides,
    je vous remercie par avance.

    -----

  2. #2
    invite05fc252b

    Re : programmation en PIC C

    Bonjour,

    je ne suis pas expert en C pour le PIC, sans connaitre votre compilo, je vois déjà pas mal d'erreurs :
    vous confondez les affectations et les comparaisons...
    pour les conditions il faut utiliser == et non pas = ... chain="up" signifie que vous affectez "up" à votre variable, or pour le if(), il faut utiliser l'opérateur de comparaison ==

    en C, il me semble qu'on ne peut pas comparer des chaines. il faut utiliser des fonctions spéciales pour cela (type strcmp() ...), à confirmer.

    sachant tout cela, si votre programme fonctionnait, vu que les affections dans vos 'if' sont toujours vraies, vous devriez voir s'afficher à toute vitesse updownupdownupdownupdownupdown updownupdown .
    il doit donc y avoir d'autres erreurs quelque part, je soupçonne que la config de l'UART n'a pas été faite ou mal faite. Ou alors que le cablage n'est pas correct entre le PIC et le terminal

    A+
    RzBo

  3. #3
    invite64d8200f

    Re : programmation en PIC C

    merci RzBo,
    en fait, j'utilise le pic c compiler,
    et j'ai changé ce programme :


    if( strcmp(chaine, "up" ) == 0 )
    printf( "up" );


    if( strcmp(chaine, "down" ) == 0 )
    printf("doown");

    il m'a affiché une erreur: "attempt to create a pointer to a constant"

  4. #4
    invite05fc252b

    Re : programmation en PIC C

    aprés une recherche rapide sur gogole : a priori un pb connu car les chaines "up" et "down" sont en EPROM alors que 'chaine' est en RAM...

    le truc 'crado' à faire (ça utilise de la RAM inutilement) est de faire une variable temporaire dans laquelle on copie la chaine.
    char up[10];
    char down[10];
    puis en début de code
    strcpy(up, "up");strcpy(down, "down");

    ensuite utiliser ces buffers dans les strcmp pour la comparaison...

    la méthode la plus clean consisterai à se refaire une fonction "strcmp" à la main soit à changer le compilo

    un expert pourra éventuellement avoir une meilleure idée

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

    Re : programmation en PIC C

    Bonsoir

    Le problème, ce n'est pas l'inadéquation de la fonction strcmp() (et la réécrite ne risque pas d'améliorer énormément les choses), mais le fait d'essayer de programmer un petit système spécifique comme un PIC16 (avec des mémoires dédiées de taille réduite) comme s'il s'agissait d'une grosse machine Unix (où tous les programmes tournent en mémoire vive).

    Le langage C (qui a été conçu au départ pour les grosses machines Unix) présente beaucoup d'avantages en terme d'écriture sur toutes les plateformes. Mais il ne faudrait pas croire qu'on peut l'utiliser sans tenir compte de ce qui se passe derrière, matériellement, et notamment dans le cas présent.

    Je pense que tu devrais commencer par lire la doc du PIC 16F877, et tenter de voir ce que pourrait donner un programme en langage machine. Tu découvrirais alors les limitations et les contraintes de ce système, tu comprendrais les problèmes que posent certaines programmations en C et la raison pour laquelle on doit les éviter ou pourquoi elles sont impossibles.

    Il existe des exemples de programmes en C dans la littérature consacrée aux différents PICs. Ce pourrait être un bon point de départ pour découvrir les "bonnes pratiques".

  7. #6
    invite5637435c

    Re : programmation en PIC C

    Bonsoir,

    oui votre programme n'a aucune chance de fonctionner sans configurer au préalable l'UART de votre PIC.
    Voici une discussion avec laquelle vous allez mieux comprendre ce que vous avez à faire pour le configurer et récupérer vos chaines de caractères:
    http://forums.futura-sciences.com/el...rs232-pic.html

  8. #7
    invitef86a6203

    Re : programmation en PIC C

    La doc reference du PICC
    http://www.ccsinfo.com/downloads/ccs_c_manual.pdf
    gets() or fgets()
    Gets a string on the receive pin(from the specified stream in case of fgets, STDIN by default). Use getc to receive each character until return is encountered.
    il reçoit et émet du flux spécifié !!
    espérons que ce soit le RS232 ...
    Si le printf du début envoie bien sur le port c est bon par défaut

    et le gets doit être terminé par un return => \r ASCII 13 decimal => 0X0d
    printf("down\r");

  9. #8
    invite64d8200f

    Re : programmation en PIC C

    oui c le RS232,
    le problème c'est au niveau de réception d'un texte à l'hyperterminal pour le comparer avec les mots "up" et "down"

  10. #9
    invitef86a6203

    Re : programmation en PIC C

    envoie un \r de l hyperterminal en fin de chaine !!!!!!!!

  11. #10
    invite64d8200f

    Re : programmation en PIC C

    oui il l'affiche !!! mais pas après la condition if

  12. #11
    invitef86a6203

    Re : programmation en PIC C

    possible qu'il laisse le \n à la fin
    essai ça
    strcpy(up, "up\n");
    strcpy(down, "down\n");

  13. #12
    invite64d8200f

    Re : programmation en PIC C

    toujours le même problème,
    lorsque j'envois un mot il ne peut pas l saisir!! :'(

  14. #13
    invitef86a6203

    Re : programmation en PIC C

    alors essais le getch mais il faut compter les char ou faire un test de fin

  15. #14
    invite64d8200f

    Re : programmation en PIC C

    test de fin?? vous voulez dire quoi?

  16. #15
    invitef86a6203

    Re : programmation en PIC C

    Tu as vu l'exemple du manuel;

    printf("Continue (Y,N)?");
    do {
    answer=getch();
    }while(answer!='Y' && answer!='N');
    #use rs232(baud=9600,xmit=pin_c6,rc v=pin_c7,stream=HOSTPC)

    while(TRUE) {
    c=fgetc(HOSTPC);
    fputc(c,HOSTPC);
    if(c==13)
    fprintf(DEBUG,"Got a CR\r\n");
    }

  17. #16
    invitef86a6203

    Re : programmation en PIC C

    if (c==13) par exemple

    Mais on peut mettre autre chose
    par exemple on envoie
    "up."
    "dn."
    le point sera la fin de chaine

    if (c=='.') dans ce cas

  18. #17
    invitef86a6203

    Re : programmation en PIC C

    ça devrait être mieux comme ça;
    vérifie si la comm est de 9600 avec pin C6 et C7
    pour le moment on ne test pas le '.'

    char up[10];
    char down[10];
    char chaine[10];
    char ptr;
    void main()
    {

    strcpy(up, "up");
    strcpy(down, "dn");
    #use rs232(baud=9600,xmit=pin_c6,rc v=pin_c7,stream=HOSTPC)

    while(1) {

    ptr =0;
    /* on attend 3 charaters */
    While ( ptr<3 ) {
    chaine[ptr] = fgetch(HOSTPC);
    fputc(chaine[ptr],HOSTPC); /* ECHO */
    ptr++;
    }

    if( strncmp(chaine,up,2) == 0 )
    printf( "up" );


    if( strncmp(chaine,down,2) == 0 )
    printf("down");
    }
    }

  19. #18
    invite64d8200f

    Re : programmation en PIC C

    merci, mais comment faire pour envoyer un mot au terminal virtuel de l'Isis pour le comparé avec les mot donnés,
    le mot que doit être lu a travers le pi RC7 du pic

  20. #19
    invitef86a6203

    Re : programmation en PIC C

    une procédure pour envoyer une chaine sur le comm;



    Main()
    char Message[10];

    strcpy(Message,"Hello !");
    SendStr( Message );
    }



    SendStr (char *MyStr)
    {
    int i;
    i=0;
    while (Mystr[i] != '\0') {
    fputc(Mystr[i++],HOSTPC);
    }
    }

Discussions similaires

  1. programmation pic
    Par invite4d170209 dans le forum Électronique
    Réponses: 1
    Dernier message: 30/12/2010, 16h39
  2. Besoin d'aide pour de la programmation d'un PIC en PIC BASIC
    Par invitee5982f08 dans le forum Électronique
    Réponses: 24
    Dernier message: 26/01/2010, 11h18
  3. erreur 0X00 programmation PIC plus questions sur les PIC
    Par invite4a8ccabd dans le forum Électronique
    Réponses: 4
    Dernier message: 22/07/2007, 15h36
  4. programmation pic en c
    Par invite7cd01ac2 dans le forum Électronique
    Réponses: 1
    Dernier message: 20/06/2007, 22h33
  5. programmation PIC
    Par invitef9719e91 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/08/2006, 15h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...