Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Soucis de Prog sous Mikroc



  1. #1
    M_Makia

    Soucis de Prog sous Mikroc

    Bonjours a tous .
    J'utilise une carte EsayPic 4 avec le compilateurs Mikroc et le µc 16F877A .
    Je souhaite simplement faire varier une variable ( dsl pour le jeux de mots ^^ ) en fonction du CAN.
    Le CAN est sur 10 bits donc il renvoit une valeur entre 0 et 1024.
    Moi je veut simplement faire varier ma variable de 0 à 100 .
    Voici mon programme:
    /////////////////////////////////////////////////////////////////////////

    void main()
    {
    char Vr ;
    char txt[6];
    int Var;
    OPTION_REG = 0x80;
    ADCON1 = 0x82;
    INTCON = 0;


    LCD_Init(&PORTD);
    LCD_Cmd(LCD_CURSOR_OFF);
    LCD_Cmd(LCD_CLEAR);

    Var = Adc_Read(2);

    Vr = (Var*100)/1024 ;

    WordToStr(Vr,txt);

    LCD_Out(1,1,txt);

    }

    }
    /////////////////////////////////////////////////////////////////////////

    Lors de la conversion ( 0 - 1024) à ( 0-100) "Vr = (Var*100)/1024 ;" je visualise sur un Affciheur 2x16 le résulat de la convertion.
    La conversion est normal jusqu a 31 mais au dela de 31 il se passe une chose assez bizard, la valeur visualiser passe directement a 225 ,puis incrémente jusqu'a 255 , puis repart a 0 et incrémente de nouveaux.
    Pour etre plus claire vois ci se que j'obtien en faisant varier le CAN de 0 a 5v
    (0 à 31) => (225 à 255) => (0 à 31)=>(225 à 255)
    Je ne vois pas comment je peut avoir se résultat avec le culcule que je fais ...
    Si quelqu'un peut m'eclairer svp .
    Merci.

    -----


  2. #2
    Gérard

    Re : Soucis de Prog sous Mikroc

    Bonjour,
    Var est déclaré en char --> c'est normal ?
    Ne devrait-il pas être déclaré en "mot" de 16 bit ?

  3. #3
    M_Makia

    Re : Soucis de Prog sous Mikroc

    Le soucis a été réglé :
    « Vr = (Var*100)/1024 ; »

    En C, le compilateur ne surclasse pas automatiquement les type de variables :

    Var est de type int : il peut prendre une valeur de -32768 à 32767, il y a donc un dépassement de capacité car (Var*100) sera évalué également en int alors que le résultat peut prendre des valeurs de 0 à 102400 et nécessite un long pour être stocké.

    Si tu utilises déjà dans une autre partie du programme des variables de type long, ou si tu dois conserver absolument toute la précision, il suffit de déclarer Var en long (ou mieux en unsigned long)

    Sinon si tu ne veux pas inclure la librairie long, tu peux conserver Var en int (ou mieux unsigned int) et écrire :

    Vr = (Var*10)/102 ;
    Dernière modification par M_Makia ; 28/02/2007 à 12h01.

Sur le même thème :

Discussions similaires

  1. easypic, pic, C, et mikroC
    Par Mendoza dans le forum Électronique
    Réponses: 11
    Dernier message: 09/03/2011, 10h33
  2. Réponses: 6
    Dernier message: 03/03/2007, 15h23
  3. [Blanc] soucis de prog sur lave linge laden
    Par chonchon39 dans le forum Dépannage
    Réponses: 7
    Dernier message: 28/01/2007, 09h53
  4. MikroC plantage
    Par F1TVB dans le forum Électronique
    Réponses: 21
    Dernier message: 20/08/2006, 21h50
  5. prog sous dos
    Par minouche dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 27/04/2006, 22h39