Comment programmer une procédure avec un PIC ? (MPLAB)
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Comment programmer une procédure avec un PIC ? (MPLAB)



  1. #1
    Stan200

    Comment programmer une procédure avec un PIC ? (MPLAB)


    ------

    Bonjour,

    j'ai récemment acheté un PICKIT3 avec un PIC 18F45K20.
    J'essaye de m'entraîner un peu dessus pour bien prendre en main.
    Mon problème est que je n'arrive pas à programmer une procédure dont voici le code.

    Mon programme est simple. J'aimerais appliquer une multiplication, suivi d'une addition à des double.
    On devrait donc trouver :
    c=1.0; //initialisation
    c=20;
    c=25;

    Code:
    #include <18F45K20.h> 
    
    
    
    void operation(double a,double b,double c){
    	c=(a*b);
    	c=c+a; 	
    }
    
    
    	double c=1.0;
    	double a=5.0;
    	double b=4.0;
    
    
    void main() 
    { 
    
    
    	operation(a,b,c);	
    	  while(1);
    }


    Au final, je retrouve c=1;
    Pourquoi ? Comment puis je corriger cela ?
    Est ce quelqu'un peut tester ce code chez lui ? (pour savoir si mon problème vient de chez moi au niveau matériel ou si c'est au niveau algorithme)

    Merci pour votre aide.

    -----
    Dernière modification par Jack ; 07/08/2014 à 11h17. Motif: Balise code et pas PHP

  2. #2
    ranarama

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Perso j'ai appris comme ça à partir de mon livre :

    Code:
    #include <18F45K20.h> 
    
    double operation(double a,double b,double c){
        c= a*b ;
        return c+a;     renvoie la valeur au prog principale
    }
    
    void main() 
    { 
    
        double c=1.0;    variables locales
        double a=5.0;
        double b=4.0;
    
        c = operation(a,b,c);    
    
        while(1);
    }
    Dernière modification par Jack ; 07/08/2014 à 12h53.

  3. #3
    Jack
    Modérateur

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    en fait, il faut que stan200 se renseigne sur les règles de portée des variables en C

  4. #4
    ranarama

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    ha je me suis trompé car j'ai repris le nom des variable dans la fonction arghh

    bon heu en fait c'est plutôt comme cela

    Code:
    #include <18F45K20.h> 
    void main() 
    { 
        double c=1.0;    variables locales
        double a=5.0;
        double b=4.0;
    
        c = operation(a,b,c);    
        while(1);
    }
    
    double operation(double value1, double value2, double value3)
    {
        value3= value1*value2 ;
        return value3+value1    ;     renvoie la valeur au prog principal
    }
    je débute également en C
    Dernière modification par Jack ; 07/08/2014 à 12h52.

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Citation Envoyé par ranarama Voir le message
    ha je me suis trompé car j'ai repris le nom des variable dans la fonction arghh

    bon heu en fait c'est plutôt comme cela

    Code:
    #include <18F45K20.h> 
    void main() 
    { 
        double c=1.0;    variables locales
        double a=5.0;
        double b=4.0;
    
        c = operation(a,b,c);    
        while(1);
    }
    
    double operation(double value1, double value2, double value3)
    {
        value3= value1*value2 ;
        return value3+value1    ;     renvoie la valeur au prog principal
    }
    je débute également en C
    Ca n'est pas interdit. Il faut juste comprendre que la variable a de la fonction main n'est pas la même que la variable a de la fonction opération, d'où mon conseil sur les règles de portée des variables.

    A+

  7. #6
    Stan200

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Bonjour,

    en fait, il faut que stan200 se renseigne sur les règles de portée des variables en C
    Les variables
    "double c=1.0;
    double a=5.0;
    double b=4.0;

    sont en dehors de tous les blocs, ce sont donc des variables globales. Elles sont donc utilisables dans tous les blocs du programme.

    Les arguments de la procedure "operation" (a,b,c) sont des variables locales qui cessent d'exister à la fin du bloc operation.
    Toutefois, comme je l'applique sur mes variables globales, la valeur de c devrait se mettre à jour : ce n'est pas le cas. Pourquoi ?

    Merci Ranaram, j'avais aussi procédé d'une manière similaire et cela fonctionnait.
    C'est vraiment ma structure de programme (avec une procedure qui ne retourne rien) que je me questionne

    Merci

  8. #7
    Stan200

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Oui, oui, j'avais compris que les deux variables n'était pas les mêmes.
    J'ai renommé les variables associées à opération :

    Code PHP:
    #include <18F45K20.h> 


        
    double c=1.0;
        
    double a=5.0;
        
    double b=4.0;


    void operation(double a1,double b1double c1){
        
    c1=(a1*b1);
        
    c1=c1+a1;     
        return;
    }


    void main() 

        
    operation(a,b,c);    
         while(
    1);

    Quand je surveille les valeurs au WATCH, je vois que C1=25 mais que C reste égal à 1.
    La valeur de C1 n'est pas recopié dans C. Est ce normal ?

    Merci

  9. #8
    Jack
    Modérateur

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Les variables
    "double c=1.0;
    double a=5.0;
    double b=4.0;

    sont en dehors de tous les blocs, ce sont donc des variables globales. Elles sont donc utilisables dans tous les blocs du programme.
    oui. J'ajoute toutefois que l'utilisation des variables globales est à proscrire dans la mesure du possible.

    Les arguments de la procedure "operation" (a,b,c) sont des variables locales qui cessent d'exister à la fin du bloc operation.
    oui

    Toutefois, comme je l'applique sur mes variables globales, la valeur de c devrait se mettre à jour : ce n'est pas le cas. Pourquoi ?
    Parce qu'elles portent le même nom et que les variables locales prennent le pas sur les variables globales. Heureusement que ça fonctionne comme ça car ça permet un certain cloisonnement, si bien que l'on peut récupérer des fonctions écrites par d'autres personnes par exemple, sans se soucier des noms de variables utilisés dans ces fonctions.

    Quand je surveille les valeurs au WATCH, je vois que C1=25 mais que C reste égal à 1.
    La valeur de C1 n'est pas recopié dans C. Est ce normal ?
    Oui, puisque c et c1 sont différentes. Pour qu'une variables d'une fonction appelée puisse modifier une variable d'une fonction appelante, il faut effectuer un passage de paramètre par adresse, ce qui implique l'utilisation des pointeurs en langage C. En C++ ou avec des langages plus modernes, un peut utiliser les références.

  10. #9
    satinas

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Dans le C, on ne passe que des valeurs dans les arguments d'une fonction.
    Le pic a exécuté la fonction operation(5.0, 4.0, 1.0), et a créé de nouvelles variables locales initialisées avec les valeurs en arguments.
    Pour modifer une variable passée en argument, on passe son adresse, ce qui permet de la lire et la modifier dans la fonction. Il faut s'intéresser dans ce cas aux pointeurs C.

  11. #10
    RISC

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Salut,
    Les microcontroleurs PIC18 ne sont pas des Core I7 à 4 GHz...
    Il faut absolument éviter les flottants et encore plus les double flottants sans quoi tu vas mettre le PIC à genoux.
    La plupart des operations se font en entiers sur les microcontroleurs.
    Je ne suis pas sûr que le C18 ou XC8 gère les double float...

    La plupart des capteurs ont une précision de l'ordre de quelques pourcents. Travailler avec des double float n'a aucun sens..

    Si tu démarres sur les PIC et sur MPLAB X je te recommande les sites suivants :
    * tutoriel en anglais pour MPLAB X et les 8 bits
    * l'excellent site de Gooligum : http://www.gooligum.com.au/tutorials.html (pour les PIC10/12/16 )

    N'oublie pas aussi les tutoriels sur le langage C


    a+

  12. #11
    Stan200

    Re : Comment programmer une procédure avec un PIC ? (MPLAB)

    Ha..d'accord, je comprends mieux maintenant ! C'est une confusion de passage par adresse et par valeur.
    J'ai des procédures avec des pointeurs qui fonctionne, c'est vrai.
    Je vais d'ailleurs créer un nouveau topic car j'ai un problème avec une de mes procédures (elle fonctionne avec des int mais pas des floats, c'est étrange)

    D'accord pour vos conseils. C'est encore nouveau pour moi, j'apprends.
    Oui, oui, c'est juste pour m'entrainer que j'utilise des double.
    Merci

Discussions similaires

  1. comment compiler avec mplab
    Par ben-uhr dans le forum Électronique
    Réponses: 9
    Dernier message: 22/10/2013, 17h27
  2. Programmer des PIC12F avec MPLAB
    Par AmigaOS dans le forum Électronique
    Réponses: 52
    Dernier message: 14/06/2013, 14h48
  3. Programmer un PIC avec un Pickit 3 sans MPLAB
    Par maximilien dans le forum Électronique
    Réponses: 4
    Dernier message: 04/08/2010, 08h16
  4. Programmer en C sur mplab?
    Par alex934mas dans le forum Électronique
    Réponses: 2
    Dernier message: 07/11/2009, 15h49
  5. Réponses: 0
    Dernier message: 05/07/2008, 19h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.