Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 38

Programmer 16F877 avec CCS



  1. #1
    Panda184

    Programmer 16F877 avec CCS


    ------

    Bonjour à tous,

    je suis débutant dans la programmation en C et dans les microcontrolleurs. J'ai récupéré un PIC 16F877 et j'essaie de le programmer avec CCS. Voici mon code :

    #include "D:\Terminale\PPE\programmeC\3 boutons\1er test.h"
    #include <stdio.h>
    #include <stdlib.h>


    #define BO PORTA.0
    #define BF PORTA.1
    #define BA PORTA.2
    #define SO PORTB.0
    #define SF PORTB.1

    void main(void)
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(FALSE);
    setup_counters(RTCC_INTERNAL,R TCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1) ;


    TRISB = 0x00 ; //sorties B
    TRISA = 0xFF ; //entrées A

    while(1)
    { if (BO ==1 && BF !=1 && BA !=1) // il faut bouton ouverture
    {
    SO = 1 ; // ouverture
    }
    else if (BO!=1 && BF==1 && BA!=1) // il faut bouton fermeture
    {
    SF = 1 ; // fermeture
    }
    else
    {
    SO = 0; // arret
    SF = 0;
    }
    }

    system("PAUSE");

    }
    Le problème c'est qu'en lançant la compilation j'ai une erreur à "TRISB = 0x00;" il me marque Undefined identifier -1 is not 0..255 TRISB. Que celà veut-il bien dire ?

    J'ai essayé d'inclure la libraire <16F877.h> au début, je l'ai mis d'ailleurs dans le répertoire où j'ai placé mon programme, mais quand je lance la compilation, il m'ouvre le 16f877.h et me dit la même erreur. Je n'ai rien touché à la programmation des boutons dans le pannel lorsque l'on créer un projet, j'ai laissé input AO PIN_AO (je sais pas si vous voyez ce que je veux dire, au cas où dites moi et je vous ferais un copier d'écran )

    D'où viens le problème ?

    Merci d'être indulgent avec moi, je débute dans cette programmation et c'est pas toujours facile de passer de la théorie à la pratique

    Merci d'avance en tout cas pour vos réponses

    -----

  2. Publicité
  3. #2
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonjour
    LE compilateur a pris la syntaxe "TRISA" comme une variable, je crois bien que c'est un probleme de syntaxe, dans la version de CCS que j'ai utilisé, pour définir les ports la syntaxe est: set_tris_a(0x00), set_tris_c(0xff) ...ect.
    Pour le reste, je n'ai pas vu le
    Code:
    #include <16f877.h>
    Peut etre qu'il est dans ton:
    Code:
    #include "D:\Terminale\PPE\programmeC\3 boutons\1er test.h"
    Pour ce qui est de tes define porta.0 ...ect...
    Je ne crois pas que ce soit la bonne syntaxe aussi, en ouvrant le 16f877.h tu trouveras
    #define pin_a0
    #define pin_a1
    A vérifier bien sur.

    PS: Ece que tu es sur que tu compile avec CCS, car cette syntaxe je l'ai deja vu mais c'etait dans un autre compliateur.
    Bon courage.

  4. #3
    Panda184

    Re : Programmer 16F877 avec CCS

    Merci pour votre réponse effectivement àa va bien meix comme ça :

    #include "D:\Terminale\PPE\programmeC\3 boutons\1er test.h"
    #include <stdio.h>
    #include <stdlib.h>


    #define BO pin_a0
    #define BF pin_a1
    #define BA pin_a2
    #define SO pin_b0
    #define SF pin_b1

    void main(void)
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(FALSE);
    setup_counters(RTCC_INTERNAL,R TCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1) ;


    set_tris_b(0x00) ; //sorties B
    set_tris_a(0xFF) ; //entrées A

    while(1)
    { if (BO ==1 && BF !=1 && BA !=1) // il faut bouton ouverture
    {
    SO == 1 ; // ouverture
    }
    else if (BO!=1 && BF==1 && BA!=1) // il faut bouton fermeture
    {
    SF == 1 ; // fermeture
    }
    else
    {
    SO == 0; // arret
    SF == 0;
    }
    }

    system("PAUSE");

    }
    En faite je n'avais pas fait attention pour les 0x00, j'avais mis des o au lieu des 0 ... forcément ça coince... erreur de débutant et je n'avais pas mis les doubles égales pour SO ==1 par exemple.

    Par contre je n'ai pas mis <16F877.h> dans le programme; quand je le met, quand je compile il m'ouvre le 16F877.h et me marque en bas : "Can not change device type this far into the code -1 is not 0..255".

    Donc en gros, je ne sais pas si mon code marche vraiment vu que je n'ai pas mis <16F877.h> dans mon programme, par contre je l'ai mis dans le répertoire où il y a mon programme que je crée.

    Et enfin, oui je compile avec CCS

    Merci en tout cas pour votre aide

  5. #4
    Panda184

    Re : Programmer 16F877 avec CCS

    Quelqu'un aurait-il une idée ? Ou me confirmer si le programme est bon ?

  6. #5
    Panda184

    Re : Programmer 16F877 avec CCS

    Une petite aide s'il vous plaît ?

    Je ne suis vraiment pas sûr que mon programme marche vu que je n'ai pas mis le <16F877.h>

    Merci d'avance

  7. A voir en vidéo sur Futura
  8. #6
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonjour
    Quece que tu as dans le fichier "#include "D:\Terminale\PPE\programm eC\3 boutons\1er test.h"" ?
    - Les doubles égalité sont utilisés dans les test
    exemple
    Code:
    if (input(pin_c1)==1) then ....
    Je ne crois pas que ca marche si tu ecrit pin_c1==1 ou SO==1 ...ect

    La simple égalité est utilisé lors des affectations
    exemple
    Code:
    X=input_a();
    , X est une variable sur un octet
    Pour affecter une sortie sur une pin ou sur un port utilise
    Code:
    output_high(pin_a0)
    sur une pin ou bien
    Code:
    output_a(0xFF);
    sur un port
    Voila voilou
    Bon courage, et essai de lire le help de CCS il t'informera plus que moi. Générallement il y'a des exemples essai de lire pour voir un peu comment ca marche

  9. Publicité
  10. #7
    Panda184

    Re : Programmer 16F877 avec CCS

    Bonjour, je viens donc de suivre vos recommandations, j'ai donc tapé ce code :

    Code:
    #include "D:\Terminale\PPE\programmeC\eee\test2.h"
      #include <stdio.h>
      #include <stdlib.h>
      
    
    
    
    void main(void)
    {
    
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_spi(FALSE);
       setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
    
          set_tris_b(0x00) ; //sorties B
          set_tris_a(0xFF) ; //entrées A
    
             while(1)
             { if (input(pin_a0)==1 && input(pin_a1)!=1 && input(pin_a2)!=1) // il faut bouton ouverture
                {
                   output_high(pin_b0) ; // ouverture
                }
               else if (input(pin_a0)!=1 && input(pin_a1)==1 && input(pin_a2)!=1) // il faut bouton fermeture
                {
                   output_high(pin_b1) ; // fermeture
                }
               else
                {
                output_low(pin_b0); // arret
                output_low(pin_b1);
                }
             }
    
       system("PAUSE");
    
    }
    Le code se compile et marche apparemment, mais quand j'inclus la librairie <16F877.h>, il me l'ouvre et me met toujours la même erreur :"Can not change device type this far into the code -1 is not 0..255".

    Mais c'est quand même bizarre qu'on ne puisse pas faire de #define pour dire que pin_ao correspond a BO par exemple...

    Par contre je n'ai pas compris ce que vous vouliez dire par :
    "X=input_a();

    , X est une variable sur un octet"

    Merci encore

  11. #8
    Panda184

    Re : Programmer 16F877 avec CCS

    Quelqu'un saurait-il si mon code est bon ? C'est quand même bizarre que je ne puisse pas mettre l'include <16F877.h>.

    A noté que dans le dossier où il y a mon programme, il y a les fichiers crées par le projet et j'ai rajouté le fichier 16f877.h

    EDIT: en faite je pense que c'est bon dans mon fichier test2.h il y a deja l'include 16f877.h
    Dernière modification par Panda184 ; 19/01/2008 à 16h22.

  12. #9
    HULK28

    Re : Programmer 16F877 avec CCS

    Salut,

    X=input_a();

    en principe on écrit pas ça en C, mais bon certain compilateur sont très permissif...

    Si X est un entier par exemple et que input_a() est défini telle que:

    int input_a(char *chaine);

    La fonction input_a() retournera un entier et prendra un pointeur en argument de type char, dans ce cas écrire:

    X=input_a(chaine); est correct

    Sinon pour <16F877.h> je pense qu'il n'est pas utile de le mettre dans CCS, il faut regarder la doc du compilo comme le conseille SyNeRgY.
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  13. #10
    Panda184

    Re : Programmer 16F877 avec CCS

    Merci pour cette petite mise au point, je vais simuler ce programme sous isis dans la semaine, je pense que ce sera bon.

    Juste une chose concernant les micronctrolleurs. Comment recevoir et traiter dans un microcontrolleur le pic 16F877 des données reçus par rs232. Je veux dire que j'envoie des données hexadécimal depuis mon pc vers mon microcontrolleur via le rs232, comment faire pour traiter ces données en C.

    Je pense qu'il faut mettre certaines données du rs232 au début dans les initialisation, nombre de bit de données, la vitesse ... peut-être une librairie en plus même non ?

    Si j'envoie par exemple 6F par mon pc vers mon microcontrolleur, comment faire pour qu'il comprenne que si il reçoit 6F en entrée sur le port A (a moins qu'il y ait un port spécifique au rs232), alors la sortie C1 sera activé. C'est juste un exemple basique mais avec celui-ci je pourrais développer mon programme seul, il faut juste me lancer en quelque sorte

    C'est peut être :
    if(input(pin_a1)==6F)
    alors....
    mais je n'y crois pas vraiment, ça serait trop simple à mon gout...

    Merci pour votre aide

  14. #11
    HULK28

    Re : Programmer 16F877 avec CCS

    Il faut utiliser l'USART intégré dans le PIC, il faudrait que tu consultes la doc déjà pour voir comment il fonctionne.
    La doc est bien faite, ensuite une fois configurer tu dois utiliser des buffers de transmission pour stocker les datas qui arrivent ou qui doivent partir.
    Il faut également traiter par interruptions certaines séquences.

    Je vais voir ce que je peux te transmettre comme exemple.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  15. #12
    HULK28

    Re : Programmer 16F877 avec CCS

    Je te l'ai envoyé par MP.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  16. Publicité
  17. #13
    Panda184

    Re : Programmer 16F877 avec CCS

    Bonjour à tous, j'ai simulé mon programme sur ISIS et je deviens fou !! Rien ne marche. Je n'arrive même pas à allumer une DEL lors de la simulation avec un bouton poussoir qui agit sur le PIC.

    J'ai tout essayé, des dizaines et des dizaines de programme et là je m'en remet à vous, CCS va me rendre fou !!

    Quelqu'un aurait-il un programme tout bête sur CCS qui permet quand une entrée est alimentée alors le microcontrolleur PIC16F877 ouvre une sortie.
    J'ai vraiment essayé toutes les syntaxes possibles et imaginables et je comprend pas pourquoi mon entrée lors de la simulation n'est pas alimentée quand je ferme mon bouton poussoir.

    J'ai déjà fait plusieurs montages sous ISIS avec d'autres microcontrolleurs et d'autres compilateur mais là CCS me rend fou, j'aurais bien utiliser MPLAB mais CCS est obligatoire...

    quelqu'un aurait-il une idée juste pour définir les entrée sorties et la boucle qui quand j'alimente l'entrée B1 par exemple alors la sortie C1 est alimentée.

    Merci infiniment.

  18. #14
    Panda184

    Re : Programmer 16F877 avec CCS

    Quelqu'un aurait-il une idée parceque là je ne comprend plus rien...

    J'ai bien essayé de mettre les set_tris... pour parametrer les ports d'entrées et de sorties, j'ai fait des boucles en while et if pour scruter l'etat d'un bouton poussoir, j'ai mis les sorties sous la forme de output_high(...).

    Mais rien ne marche...

    Merci vraiment pour votre aide.

  19. #15
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonsoir
    Voila, j'ai repris ton code initial et je l'ai corigé un peu.
    Code:
    #include <16f877.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    #define BO pin_a0
    #define BF pin_a1
    #define BA pin_a2
    #define SO pin_b0
    #define SF pin_b1
    
    void main(void)
    {
    
    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(FALSE);
    setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1) ;
    
    
    set_tris_b(0x00) ; //sorties B
    set_tris_a(0xFF) ; //entrées A
    output_b(0x00);//init du port lors du démarrage.
    while(1)
    {
     if (((input(BO) ==1) && (input(BF) ==0)) && (input(BA)==0 )) // il faut bouton ouverture
          output_high(SO) ; // ouverture
    
     else 
        {
       if (((input(BO)==0) && (input(BF)==1)) && (input(BA)==0)) // il faut bouton fermeture
           output_high(SF) ; // fermeture
       
       else
       {
        output_low(SO); // arret
        output_low(SF);
       }
        }
    
    
    
    }
    }
    Je l'ai simulé avec ISIS et ca marche très bien. Je ne connais pas vraiment ta table de vérité ou la justesse de l'algorithme, mais ca devrai t'aider a te familiariser avec la syntaxe de CCS.
    Je t'envoie aussi le fichier .hex et essai le.
    PS: Enleve l'extension .txt
    Fichiers attachés Fichiers attachés

  20. #16
    Panda184

    Re : Programmer 16F877 avec CCS

    Merci pour le programme, j'avais quelques petites erreurs de syntaxe, merci infiniment.

    Par contre je dois vraiment pas être doué sur ISIS parce que rien ne marche...
    Je vous envoie mon fichier ISIS pour que vous me disiez où est mon problème.

    Je vous l'envoie en .txt pour que je puisse envoyer des fichiers.

    Merci encore Synergy
    Fichiers attachés Fichiers attachés

  21. #17
    remy01

    Smile Re : Programmer 16F877 avec CCS

    Salut,
    va voir mon site, il y a quelques exemples
    de, programmes en C ( CCS )/
    A+ ....Rémy.

  22. #18
    Panda184

    Re : Programmer 16F877 avec CCS

    Merci Rémy pour les exemples sur votre site.

    Je pense avoir bien compris la syntaxe de CCS, mais je pense que je dois avoir un réel problème avec Isis... D'où cela peut-il venir sur mon shéma de Isis ?

    Si quelqu'un a une idée il est le bienvenue, merci encore

  23. Publicité
  24. #19
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonsoir Panda184
    J'ai essayé d'ouvrir ton fichier, et c'est impossible de l'ouvrir, c'est peut etre un probleme de version (moi j'ai la 6.7 SP3 advanced simulation)
    Il se pourrait que ton isis ne fait pas la simulation des PIC, a vérifier.
    Bon courage.

  25. #20
    Panda184

    Re : Programmer 16F877 avec CCS

    Pouvez-vous m'envoyez votre fichier ISIS ? Que j'essaie de voir sur le mien. Ma version simule les PIC, j'en ai déjà fait.

  26. #21
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonjour
    Voila, je t'envoie le fichier isis et aussi une image de ce qu'il m'affiche a la simulation.
    N'oublie pas de respécifier le chemin de ton fichier .hex.
    Bon courage
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

  27. #22
    Panda184

    Re : Programmer 16F877 avec CCS

    Impossible de l'ouvrir... mais bon ce n'est pas bien grave j'ai trouvé d'où venait mon problème, ca coinçait avec l'alimentation.

    J'ai testé mon programme et tout marche bien !

    Maintenant je vais voir comment je peux gérer un programme avec des données analogiques.

  28. #23
    Panda184

    Re : Programmer 16F877 avec CCS

    En faite j'aimerais savoir comment sous ISIS gérer des données analogiques ?

    Je veux dire si telle valeur est supérieur à 100 alors dans mon programme j'ouvrirais une sortie, je sais que le PIC16F877 a des entrées analogiques, je pense que pour le code il suffit de faire : if(input(PIN_A0)>100) alors... j'ai compilé un programme comme ça sous CCS et je n'ai pas eu de problème.

    Mais comment faire pour mettre des données analogiques sous ISIS ?

    Merci encore

  29. #24
    Panda184

    Re : Programmer 16F877 avec CCS

    Je pense que je vais reposter un sujet pour ISIS car ce n'est pas le même domaine.

  30. Publicité
  31. #25
    SiNeRgY

    Re : Programmer 16F877 avec CCS

    Bonjour;
    Pour trairer des données analogique il faut faire une conversion. Tout d'abord tu dois spécifier l'horloge du CAN exemple:
    Code:
    setup_adc( ADC_CLOCK_INTERNAL);
    Puis initialiser dans quel mode du travaille
    Code:
      setup_adc_ports(ALL_ANALOG);
    pour dire que toutes les entrée du port A et port E sont analogique.
    Et apres du choisit quel canal a convertire
    Code:
    set_adc_channel( 0 );
    pour AN0
    et enfin
    Code:
    conv=read_adc()
    La tu mets la valeur du convertisseur dans la variables "conv"
    n'oublie de la déclarer sur 16 bits si tu utilise le CNA en 10 bits

    Mais serieux, il faut que tu lise le HELP de CCS!!! et les exemples, y'en a pleins.

  32. #26
    Panda184

    Re : Programmer 16F877 avec CCS

    Bonjour, désolé pour le retard du post.

    Je n'ai pas trouvé d'exemples sur les données analogiques sur le HELP de CCs, en auriez-vous ?

    J'ai essayé plusieurs programmes sur ISIS, je varie les données avec un potentiomètre linéaire mais je n'ai pas les sorties d'actives après...

    J'ai mis ça par exemple:

    Code:
    #include <16F877.h>
    #use delay (clock=20000000)
    #include <stdlib.h>
    
    
    
    void main(void) {
    
       //On initialise les variables (8bits et 1bit):
       int8 vent, soleil;
       
    
       //On parametres les ports de l'ADC:
       setup_adc_ports( ALL_ANALOG );
       setup_adc( ADC_CLOCK_INTERNAL );
    
       //Debut de la boucle:
       while(1) {
    
          //Lecture des valeurs analogiques:
    
          set_adc_channel( 0 );
          delay_ms ( 50 );
          vent = Read_ADC();
    
          set_adc_channel( 1 );
          delay_ms ( 50 );
          soleil = Read_ADC();
    
          
    
    ///////////////// Choix de l'ordre à donner au système  /////////////////////
    
          if(vent>0) {  //Si vent superieur à 0 alors on ouvre les ports
             output_low(PIN_B1);
             output_high(PIN_B2);
             output_low(PIN_B3);
             
             }
    
             
    
       }
    
    while (1) {};
    }
    quand je bouge le potentiomètre, j'ai mes entrées qui changent mais pas les sorties...

    Que faire ?

    Merci encore

  33. #27
    Melodie Nelson

    Re : Programmer 16F877 avec CCS

    Salut,

    Il ne faut pas chercher dans l'aide "Help" de CCs mais plutôt dans les exemples fournis avec. En gros de chez moi, j'ouvre CCs et j'ouvre un fichier du repertoire examples ( qui se trouve à priori dans program files...PICC...Examples ).

    Voilà, si tu ne trouves rien je pourrais te les envoyer, il y'a 3 exemples utilisant un Can.

    Tcho
    Femme qui pète n'est pas morte

  34. #28
    Panda184

    Re : Programmer 16F877 avec CCS

    Pouvez-vous me dire le nom de ces trois fichiers ?

    Merci infiniment

  35. #29
    Melodie Nelson

    Re : Programmer 16F877 avec CCS

    Oui, nous le pouvons.

    EX_CAN : ex_can_ccs_a ; ex_can_ccs_b

    D'ailleurs je t'en mets un en pièce jointe.
    Enfin tu as cherché comme je t'ai indiqué ? C:\Program Files\PICC\Examples

    Je n'arrive pas à te l'envoyer, j'imagine que c'est l'extension qui n'est pas autorisée et j'ai grave la flemme de le mettre en .txt . Je le ferais demain si tu ne trouve toujours pas.

    Tcho grizzly
    Femme qui pète n'est pas morte

  36. #30
    Panda184

    Re : Programmer 16F877 avec CCS

    Je les ai merci

    Je vais feuilleter ça pendant les jours qui arrivent, je verrais si j'ai des problèmes. Apparemment ce sont des exemples typiques pour prendre des valeurs analogiques c'est bien ca ?

    J'essayerais de voir pour essayer de paufiner mon code, je vous tiens au courant.

    Merci pour tout

Sur le même thème :

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Driver LCD 2*16 avec PIC 16F877
    Par misstik dans le forum Électronique
    Réponses: 2
    Dernier message: 20/07/2007, 23h54
  2. tension symetrique avec pic 16F877
    Par ieeaelectronique dans le forum Électronique
    Réponses: 1
    Dernier message: 02/04/2007, 18h42
  3. programmer les pic avec CCs
    Par karim3181 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2007, 16h59
  4. Réponses: 0
    Dernier message: 18/03/2007, 16h43
  5. Port serie sur 16F877 avec CCS
    Par joseph4008 dans le forum Électronique
    Réponses: 7
    Dernier message: 12/07/2006, 18h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.