Programmation d'un pic16f876
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Programmation d'un pic16f876



  1. #1
    invitea045cfc8

    Unhappy Programmation d'un pic16f876


    ------

    Bonjour,
    je dois programmé un pic 16f876 pour mon projet de fin d'année de BTS.
    Je connais pas grand chose à la programmation. Je dois programmer un pic 16F876 avec Mplab et j'ai choisis CC5x comme compilataur et je programme en C
    Le programme que je dois faire
    c'est à partir d'une valeur de tension la comparer grace au pic et si elle est dans la plage de fonctionnement elle doit faire allumer une led. Si elle la valeur ne se situe pas dans la plage de fonctionnemenet elle doit allumé une autre led.

    Je ne sais pas du tout par où commencer.

    Pouvez-vous m'aidez?

    merci

    -----

  2. #2
    UNTOUCHABLE

    Re : Programmation d'un pic16f876

    Bonsoir,
    Visiblement tu as choisit de programmer en C ce qui a mes yeux est un bon choix. Ca s'apprend bien et c'est très performant. Si tu n'as aucune connaissance en programmation, je te conseille d'aller voir sur le site du zero. Biensur contente toi des premiers chapitre (sauf si tu veux faire des programmes sur pc).
    Une fois les quelques bases acquises suit les tutos de mathieu agopian. Tu sauras ainsi faire fonctionner ton pic
    Quand au module analogique, il n'est pas abordé dans le site si dessus, mais bon t'as déjà a faire avec ça (et puis si t'as besoin d'aide le forum est là !!).

  3. #3
    KHEOPS1982

    Re : Programmation d'un pic16f876

    Bonjour,

    Tu dois utiliser le convertisseur analogique/numérique du PIC et 2 ports du µP en sortie pour l'allumage des leds.

    @+

  4. #4
    invite7a49d0d5

    Cool Re : Programmation d'un pic16f876

    Bonsoir bibou1234,

    et Bienvenue sur les Forums FUTURA ;O]

    Pour lire/comparer une tension avec le PIC, tu peux utiliser
    au choix le convertisseur analogique numérique
    ou le comparateur, intégrés...

    Pour allumer des leds, il suffit d'utiliser/configurer
    des IO en sorties numériques...

    Une base sur l'utilisation du convertisseur ADC:
    http://pagesperso-orange.fr/fabrice..../ADC_16F88.htm

    et aprés t'as les cours de Mr BigOnOff...
    et la datasheet du 16F876...

    vede
    ;O]

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

    Red face Re : Programmation d'un pic16f876

    javance petit à petit (après avoir mis 4 jours pour définir les variables mais un nouveau problème se présente

    Je dois utiliser un timer pour allumer les leds?
    Est-ce que je dois utiliser un quartz?
    Si oui où est-ce que je le vois sur la doc technique?
    et comment je le choisis?

  7. #6
    Gérard

    Re : Programmation d'un pic16f876

    Citation Envoyé par bibou1234 Voir le message
    javance petit à petit (après avoir mis 4 jours pour définir les variables mais un nouveau problème se présente

    Je dois utiliser un timer pour allumer les leds?
    Est-ce que je dois utiliser un quartz?
    Si oui où est-ce que je le vois sur la doc technique?
    et comment je le choisis?
    Toutes tes questions ont des réponses dans les cours de Bigonoff.
    http://www.abcelectronique.com/bigonoff/

  8. #7
    UNTOUCHABLE

    Re : Programmation d'un pic16f876

    Bhen dans tous les cas il faut que ton PIC est un oscillateur. Il peut ètre interne ou externe.
    Interne : il faudra que tu le paramètres dans ton programme
    Externe : tu as le choix entre quartz, circuit RC ou autres. Je crois que le quartz c'est le plus simple a utilisé.
    Tu prends donc un quartz de 4MHz (par exemple) et tu le connecte aux pattes correspondante de ta puce (OSC1 / OSC2)...
    Pour le reste, c'est espliqué dans les sites données plus haut.
    Bon courage, et prends ton temps, c'est le mieux pour réussir

  9. #8
    invite7a49d0d5

    Cool Re : Programmation d'un pic16f876

    Bonsoir,

    non, pas spécialement besoin d'utiliser un Timer
    pour allumer des Leds...

    pour l'horloge :

    si tu choisis l'oscillateur interne, tu trouveras
    une description de la mise en oeuvre ici :

    http://pagesperso-orange.fr/fabrice....ne%2016F88.htm

    si tu choisis d'utiliser un Quartz externe, 4 à 20Mhz, il faut
    positionner le fusible d'horloge sur HS (High Speed)...

    vede
    ;O]

    ps : tu trouveras tous les détails à ce sujet dans la datasheet,
    dans la section "Special Features of CPU > Oscillator Configuration"...

  10. #9
    RISC

    Re : Programmation d'un pic16f876

    Salut,

    Je te recommande de ne pas utiliser CC5X...c'est un vieux compilateur.
    Utilises plutot le compilateur Hitech Pro en mode Lite (gratuit) pour les PIC10/12/16 que tu peux télécharger ici.

    a+

  11. #10
    invitea045cfc8

    Re : Programmation d'un pic16f876

    Bonjour

    Voici une partie de mon programme
    pouvez vous me dire s'il est à peu près correcte et si la configuration du can est bonne? (je ne sais pas comment on fait pour récupérer la valeur qu'il convertit?)
    Images attachées Images attachées

  12. #11
    invite7a49d0d5

    Cool Re : Programmation d'un pic16f876

    Citation Envoyé par bibou1234 Voir le message
    Bonjour

    Voici une partie de mon programme
    pouvez vous me dire s'il est à peu près correcte et si la configuration du can est bonne? (je ne sais pas comment on fait pour récupérer la valeur qu'il convertit?)
    Bonjour,

    en attente de validation...
    moi j'aurais collé le code dans
    Code:
     code
    ...

    important :
    sur quel(s) port(s) tu veux récupérer la(es) valeur(s) de l'ADC ???

    et quelles références de tensions à tu choisis???

    bonn'journée,
    v ;O]

  13. #12
    invitea045cfc8

    Re : Programmation d'un pic16f876

    voici le code
    #define <p16f873>
    #include <delays.h>
    #include <stdio.h>
    #include <stdlib.h>

    // shortcut definition

    #define Temp_ok portb.7 //temperature is good
    #define Temp_nok portb.6 //temperature is not good
    #define Pressure_ok portb.5 //pressure is good
    #define Pressure_nok portb.4 //pressure is not good
    #define short_circuit_GND portb.3 //short circuit GND
    #define short_circuit_supply portb.2 //short circuit supply
    #define ill portb.1 //sensor is ill
    #define open_circuit portb.0 //open circuit
    #define battery_output portc.7 //battery
    #define sensor_pressure_input porta.0 //pressure signal sensor
    #define sensor_temp_input porta.1 //temperature signal sensor
    #define battery_input porta.5 //signal battery

    //constant and variable declaration

    unsigned double sensor_output,sensor_pressure_ input,sensor_temp_input;
    unsigned double s1,s2,s3,s4,s5;

    void main ()
    {
    // initialization (we initialize all variable)
    failure=0;
    short_circuit_supply=0;
    short_circuit_GND=0;
    Pressure_nok=0;
    Pressure_ok=0;
    Temp_nok=0;
    Temp_ok=0;
    open_circuit=0;
    battery_output=0;
    }
    while (1)
    {
    // Analog Digital Conversion configuration
    {
    ADFM=1; //Left justified

    Result.low8=ADRESSH //to retrieve only 16-Bits word instead 2 8-bits word
    Result.hignt=ADRESSL // to retrieve only 16-Bits word instead 2 8-bits word

    PDCF0=0; // enable to config pin like analog or digital input with this config AN0=AN1=AN4=analog input
    PDCF1=0; // enable to config pin like analog or digital input
    PDCF2=0; // enable to config pin like analog or digital input
    PDCF3=1; // enable to config pin like analog or digital input

    ADCS1=0 // bit which enable to choose frenquency for ADC
    ADCSO=1 // bit which enable to choose frequency for ADC

    CHS2=0 //bit which enable to select analog input to convert
    CHS1=0 //bit which enable to select analog input to convert
    CHS0=0 //bit which enable to select analog input to convert


    GO/DONE=1 //bit which launch conversion
    ADON=1 // Actuate ADC

    GO/DONE=0 //bit which switch off conversion

    ADON=0 // Switch off ADC
    }
    // level definition

    0<s1<0,2 // s1= short circuit GND
    0,2<s2<1,8 // s2=ill
    1,8<s3<2,2 // s3= good sensor
    2,2<s4<3,15 // s4=ill
    3,15<s5<3,55 // s5=open circuit
    3,55<s6<4,8 // s6=ill
    s7<4,8 // s7=short circuit supply




    //level pressure comparaison
    if (sensor_temp_input=s1) //if the voltage level is between 0V and 0,2V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=1; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=0; //sensor is ill
    portb.0=0; //open circuit
    }

    else if (sensor_temp_input=s2) //if the voltage level is between 0,2V and 1,8V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=1; //sensor is ill
    portb.0=0; //open circuit
    }

    else if (sensor_temp_input=s3) // if the voltage level is between 1,8V and 2,2V
    {
    portb.7=1; //temperature is good
    portb.6=0; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=0; //sensor is ill
    portb.0=0; //open circuit
    }

    else if (sensor_temp_input=s4) // if the voltage level is between 2,2 V and 3,15V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=1; //sensor is ill
    portb.0=0; //open circuit
    }

    else if (sensor_temp_input=s5) // if the voltage level is between 3,15V and 3,55V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=0; //sensor is ill
    portb.0=1; //open circuit
    }

    else if (sensor_temp_input=s6) // if the voltage level is between 3,55V and 4,8V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=0; //short circuit supply
    portb.1=1; //sensor is ill
    portb.0=0; //open circuit
    }

    else if (sensor_temp_input=s7) // if the voltage level is "superieur à " 4,8V
    {
    portb.7=0; //temperature is good
    portb.6=1; //temperature is not good
    portb.3=0; //short circuit GND
    portb.2=1; //short circuit supply
    portb.1=0; //sensor is ill
    portb.0=0; //open circuit
    }
    }

  14. #13
    invitea045cfc8

    Re : Programmation d'un pic16f876

    lorsque je compile avec CC5X

    il me met comme erreur
    unable to open file 16F873
    je n'arrive pas à enlever cette erreur d'où provient-elle? comment faire pour y remédier

  15. #14
    RISC

    Re : Programmation d'un pic16f876

    Salut,

    As-tu lu le message d'erreur ???
    C'est poutant clair...
    Sur la ligne de l'erreur, tu doubles cliques, MPLAB te mettra le nez dessus

    a+

  16. #15
    invitea045cfc8

    Re : Programmation d'un pic16f876

    c'est déjà fait, et ca me mène en tout début de programme rien d'autre

  17. #16
    RISC

    Re : Programmation d'un pic16f876

    Salut,
    C'est justement là ou se trouve ton erreur...
    Relis la 1ere ligne de ton programme !!!!
    Lis le message d'erreur et cela devrait te mettre la puce à l'oreille.
    Si tu ne trouves pas, c'est que tu as fais un gros copié collé sans rien comprendre..dans quel cas je ne peux que te recommander de commercer par lire le manuel de ton compilateur ou un tutoriel pas à pas.

    a+

  18. #17
    invitea045cfc8

    Unhappy Re : Programmation d'un pic16f876

    lorsque je compile mon programme avec HI tech j'ai toujours les mêmes messages d'erreurs qui reviennent

    Clean: Deleting intermediary and output files.
    Clean: Deleted file "C:\Documents and Settings\caro\Mes documents\Projet\main2.p1".
    Clean: Done.
    Build C:\Documents and Settings\caro\Mes documents\Projet\essai4 for device 16F873
    Using driver C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.ex e
    Executing: "C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.ex e" --pass1 "C:\Documents and Settings\caro\Mes documents\Projet\main2.c" -q --chip=16F873 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
    Error [314] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 22.27 ";" attendu
    Error [192] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 28.1 identificateur "portb" indefini
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 28.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 29.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 30.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 31.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 32.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 33.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 34.6 erreur de syntaxe dans l'expresion
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 35.6 erreur de syntaxe dans l'expresion
    Error [192] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 36.1 identificateur "portc" indefini
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 36.6 erreur de syntaxe dans l'expresion
    Error [285] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 38.1 pas d'identificateur dans la déclaration
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 38.1 manque le type basic; entier (int) supposé
    Error [314] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 38.1 ";" attendu
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 44.7 manque le type basic; entier (int) supposé
    Error [314] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 44.7 ";" attendu
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 48.6 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 49.6 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 50.6 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 52.6 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 53.6 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 55.5 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 56.5 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 57.5 manque le type basic; entier (int) supposé
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 60.3 manque le type basic; entier (int) supposé
    Error [314] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 60.3 ";" attendu
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 61.5 manque le type basic; entier (int) supposé
    Error [195] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 63.1 erreur de syntaxe dans l'expresion
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 65.5 manque le type basic; entier (int) supposé
    Error [1098] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 65.5 conflit de déclaration pour la variable "ADON"
    Error [285] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 66.1 pas d'identificateur dans la déclaration
    Warning [374] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 66.1 manque le type basic; entier (int) supposé
    Error [314] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 66.1 ";" attendu
    Error [285] C:\Documents and Settings\caro\Mes documents\Projet\main2.c; 69.1 pas d'identificateur dans la déclaration

    j'y comprends rien

  19. #18
    RISC

    Re : Programmation d'un pic16f876

    Salut,

    Pourquoi as-tu changé de compilateur ??????????????????
    Je pense (sans en être sûr) que ton prog était écrit pour CC5X...

    Comme je te l'ai dit...soit tu plonges dans les manuels ou les tutoriaux.
    Pour moi cela s'arrête là. Bon courage

    a+

  20. #19
    invitea045cfc8

    Re : Programmation d'un pic16f876

    J'ai un autre problème qui se pose

    Grace au CAN je convertis une valeur analogique numérique de 10 bits
    mais cette valeur est sur 16 bits, j'ai mis un décalé a gauche pour avoir plus de précision, mais je dois redecaler mes 10 bits à droite pour avoir mes 6 premiers bit à 0
    Comment je dois faire?

Discussions similaires

  1. Programmation PIC16f876 avec cc5x
    Par Bernibernouille dans le forum Électronique
    Réponses: 8
    Dernier message: 25/03/2012, 12h15
  2. Programmation pic16f876
    Par clbri dans le forum Électronique
    Réponses: 0
    Dernier message: 09/02/2009, 01h39
  3. pb CAN du PIC16f876
    Par invite0b61f2e8 dans le forum Électronique
    Réponses: 11
    Dernier message: 11/05/2008, 21h16
  4. Programme d'un pic16f876 sur 876A
    Par xarolium dans le forum Électronique
    Réponses: 2
    Dernier message: 23/09/2007, 13h10
  5. PIC16F876
    Par inviteaaaccd27 dans le forum Électronique
    Réponses: 1
    Dernier message: 04/02/2004, 12h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.