Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 15 sur 38

Programmer 16F877 avec CCS

  1. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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
     


    • Publicité



  2. SiNeRgY

    Date d'inscription
    mai 2007
    Localisation
    Alger
    Âge
    31
    Messages
    115

    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.
     

  3. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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
     

  4. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    Re : Programmer 16F877 avec CCS

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

  5. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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
     


    • Publicité



  6. SiNeRgY

    Date d'inscription
    mai 2007
    Localisation
    Alger
    Âge
    31
    Messages
    115

    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
     

  7. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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
     

  8. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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 à 15h22.
     

  9. HULK28

    Date d'inscription
    janvier 2006
    Localisation
    IDF
    Messages
    10 256

    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 temps met tout en lumière." Thalès
     

  10. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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
     

  11. HULK28

    Date d'inscription
    janvier 2006
    Localisation
    IDF
    Messages
    10 256

    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 temps met tout en lumière." Thalès
     

  12. HULK28

    Date d'inscription
    janvier 2006
    Localisation
    IDF
    Messages
    10 256

    Re : Programmer 16F877 avec CCS

    Je te l'ai envoyé par MP.
    @+
    "Le temps met tout en lumière." Thalès
     

  13. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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.
     

  14. Panda184

    Date d'inscription
    janvier 2008
    Messages
    50

    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.
     

  15. SiNeRgY

    Date d'inscription
    mai 2007
    Localisation
    Alger
    Âge
    31
    Messages
    115

    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
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

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