lm335 avec pic probleme
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

lm335 avec pic probleme



  1. #1
    sinatra

    lm335 avec pic probleme


    ------

    Bonjour,

    j'ai utiliser le lm335 pour mesurer une température ambiante entre -20° et 100° j'ai calibré le lm335 a 0° soit il sort 2.73v.

    ma température ici a ma maison d'après un thermomètre digital est de 11° et le lm335 confirme cet température puisque il sort 2.84v( schéma du lm est attaché ) .

    Code:
    int16 ReadTemp(void)
    {
       //Read the ADC port and return a 16bit int. 
    int16 adcon; //16bit register
    GO=1; //start conversion
    while(GO);{} //wait for ADC to finish
    adcon=ADRESL; // get the result from ADC
    adcon=adcon<<2;
    adcon=adcon|ADRESH;
    return adcon;
    }
    
    //Function to convert volts to Kelvin
    float Convert2Kelv(int16 Volts)
    {
       return Volts/0.01;
       
       //You may have to cast Volts to a float in the above statement like this:
       return ((float)Volts)/0.01;
    }
    
    
    
          
     
    
    
    void main(void)
    {
       float volts;
       float Kelvins;
       float res; 
      
       //Setup
     ADCON0= 0b.0100.0001; //select channel to convert for ADC
     ADCON1 = 0x00 ;                         // set PORTA as analog input
     TRISA = 0xff ;                          // set PORTA as inputs
     OPTION_REG = 0x80 ;                     // start timer 0, no prescaler
     INTCON = 0xA0 ;                         // allow timer 0 overflow interrupt
     TRISB = 0b00000000;
     TRISC = 0b00000000;
     PORTB = 0;
     PORTC = 0;
    
    
       volts=ReadTemp()*(5.0/1023);
       Kelvins=Convert2Kelv(volts); 
      
       res=Kelvins-273; //conver to degrees centigrade
    j'ai récupéré la température dans la variable res pour l'envoyer dans mon afficheur 7 segment dans un tableau data[0] = res/10; data[1]=res%10; mais je vois rien du tous

    j'ai fais une simulation avec mon mplab et je comprends pourquoi ce probleme la variable res contient un nombre tres grand a l'ordre de 2158411459815
    je me suis dis peut être des float qui ont fais ce probleme alors j'ai changer en unsigned, int, uns16, ..... mais les opérations comme
    Code:
    return Volts/0.01; et volts=ReadTemp()*(5.0/1023);
    ne marche pas erreur dans la compilation.
    svp est ce que quelqu'un peut m'aider ???

    -----
    Images attachées Images attachées  

  2. #2
    sinatra

    Re : lm335 avec pic probleme

    lorsque j'ai changer la declaration de la variable res de float a unsigned mon afficheur m'indique 0° ce qui faux parcque la tension d'entrer a RA0 de mon pic est de 2.832v maintenant.

  3. #3
    sinatra

    Re : lm335 avec pic probleme

    j'ai ajouter la librery #include "math24f.h" pour ces opérations.

  4. #4
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    Il faut commencer par le commencement:
    change
    Code:
       volts=ReadTemp()*(5.0/1023);
    par
    Code:
       volts=ReadTemp();
       volt *= (5.0/1024);
    Et dis-moi ce que vaux la variable volt pour chacune de ces 2 lignes.

    PS: il faut diviser par 1024 et pas 1023 pour obtenir le quantum

    Sinon, puisque tu ne cherches pas une grande précision (juste dizaines et unités) je te propose une autre solution qui va prendre bien moins de mémoire. En effet, la librairie math qui gère les float consomme beaucoup de mémoire.
    Donc, tu peux effectuer un précalcul dans un tableau à 2 dimensions où tu fais correspondre les valeurs à afficher aux tensions correspondantes. En implantant ce tableau en ROM, ca ne consommera pas de RAM, ce qui est important avec des systèmes qui n'en n'ont pas beaucoup.

    A+

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

    Re : lm335 avec pic probleme

    merci pour ta réponse mais je veux que la température soit precis
    ol n'y a pas d'autre solution apart le float pour faire les opérations mathematiques ????

    je ne peux pas savoir la variable volts puisque la simulation est sur ordinateur donc le lm335 sur ma carte comment faire pour simuler? parceque au cours de l'animation de mplab je recois toujours ce message pour simuler ADRESL
    "ADC-W0008: No stimulus file attached to ADRESL for A/D.
    ADC-W0001: Tad time is less than 1.60us"

  7. #6
    sinatra

    Re : lm335 avec pic probleme

    j'explique : bon ma précision c'est pour des dizaines et des unité seulement de -10° a 60° c'est largement suffisent pour moi.

    je suis intéréssé par le tableau à 2 dimensions est ce tu peux me donner un example ?

  8. #7
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    je ne peux pas savoir la variable volts puisque la simulation est sur ordinateur donc le lm335 sur ma carte comment faire pour simuler? parceque au cours de l'animation de mplab je recois toujours ce message pour simuler ADRESL
    Mais pourquoi ne debuggues-tu pas avec la carte réelle connectée à un vrai LM335?

    je suis intéréssé par le tableau à 2 dimensions est ce tu peux me donner un example ?
    Si par exemple, pour 2,73V tu as 0°C et 559 dans le CAN, 2,82V pour 1°C et 579 dans le CAN, 2,93V pour 2°C et 600 dans le CAN, etc jusqu'à 59°C

    int tab[2][60] = {{0,1,2,3, etc, 59},{559,579,600, etc ..}}; // init automatique du tableau (à mettre en ROM)

    ensuite, imaginons que ton CAN te sorte la valeur 569, si tu veux connaitre la température correspondant, une simple recherche dans le tableau suffit. Par interpolation, tu pourra même retrouver une plus grande précision. Par exemple, pour 569, ça donne une température située entre 0 et 1°C et tu en déduiras une température de 0,5°C

    A+

  9. #8
    sinatra

    Re : lm335 avec pic probleme

    Citation Envoyé par Jack Voir le message
    Mais pourquoi ne debuggues-tu pas avec la carte réelle connectée à un vrai LM335?
    merci beaucoup pour l'explication comment debuggues avec ma carte???

    j'ai realiser une carte avec pic lm335 uln... LM335 est connecté sur ma carte, ifaut que ma carte soit connecté a un pc ???????!!!!!!

    comment mettre en rom ce tableau j'ai cherché et j'ai pas trouvé une instruction, merci une autre fois pour ton aide

  10. #9
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    comment debuggues avec ma carte???

    j'ai realiser une carte avec pic lm335 uln... LM335 est connecté sur ma carte, ifaut que ma carte soit connecté a un pc
    Je ne suis pas très branché pic, mais avec un ICD2 ou autre on doit pouvoir faire çà, non?

    comment mettre en rom ce tableau j'ai cherché et j'ai pas trouvé une instruction
    Je ne connais pas ton compilateur, mais il doit forcément y avoir un moyen.
    Peut-être suffit-il juste de le déclarer en constante et le compilateur le comprendre tout seul.

    A+

  11. #10
    invite7a49d0d5

    Cool Re : lm335 avec pic probleme

    Citation Envoyé par sinatra Voir le message
    merci pour ta réponse mais je veux que la température soit precis
    ol n'y a pas d'autre solution apart le float pour faire les opérations mathematiques ????

    je ne peux pas savoir la variable volts puisque la simulation est sur ordinateur donc le lm335 sur ma carte comment faire pour simuler? parceque au cours de l'animation de mplab je recois toujours ce message pour simuler ADRESL
    "ADC-W0008: No stimulus file attached to ADRESL for A/D.
    ADC-W0001: Tad time is less than 1.60us"
    Bonjour Sinatra,

    je comprends pas bien la précision que tu "espères"...

    j'ai bien compris que c'est dans une plage -10 à +60°C

    mais avec quelle précision/nombre de décimale(s)?

    environ 1°C? c'est bien ça?

    ou bien 0.1°C,
    ou bien 0.01°C,
    ou bien+?

    merci d'avance pour tes précisions,
    bon'Dimanche,
    vede
    ;O]

  12. #11
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    data[0] = res/10; data[1]=res%10
    D'après ce que j'ai lu:
    Code:
    data[0] = res/10; data[1]=res%10
    , c'est 1°C

    A+

  13. #12
    invite7a49d0d5

    Cool Re : lm335 avec pic probleme

    Citation Envoyé par Jack Voir le message
    D'après ce que j'ai lu:
    Code:
    data[0] = res/10; data[1]=res%10
    , c'est 1°C

    A+
    merci,

    et je viens de lire le Post #7 et en effet, ça paraît
    une bonne/simple solution pour gérer le "problème"...

    bon'dimanche,
    vede
    ;O]

  14. #13
    Qristoff
    Animateur Électronique

    Re : lm335 avec pic probleme

    Bonjour,
    une autre solution élegante est de placer un pont de résistance entre le LM335 et l'entrée can pour aligner le gain du LM335 (10mV/°C) au pas de quantification du can (5V/1024).
    En prenant un pont avec un rapport égal à (2xVcc/1024)/10mV=0.9765, on obtient directement 0,5°K/Lsb. Il suffit ensuite de retrancher 546 (2x273°K) à la valeur du can pour obtenir la valeur en °C avec une résolution de 0,5°C/Lsb.
    Tout existe, il suffit de le trouver...!

  15. #14
    sinatra

    Re : lm335 avec pic probleme

    Citation Envoyé par vede Voir le message
    Bonjour Sinatra,

    je comprends pas bien la précision que tu "espères"...

    j'ai bien compris que c'est dans une plage -10 à +60°C

    mais avec quelle précision/nombre de décimale(s)?

    environ 1°C? c'est bien ça?

    ou bien 0.1°C,
    ou bien 0.01°C,
    ou bien+?

    merci d'avance pour tes précisions,
    bon'Dimanche,
    vede
    ;O]
    Bonjour verde je veux que ma température a l'ordre de 1°C
    (-10,-9,-8.....58,59,60)

    Citation Envoyé par Qristoff Voir le message
    Bonjour,
    une autre solution élegante est de placer un pont de résistance entre le LM335 et l'entrée can pour aligner le gain du LM335 (10mV/°C) au pas de quantification du can (5V/1024).
    En prenant un pont avec un rapport égal à (2xVcc/1024)/10mV=0.9765, on obtient directement 0,5°K/Lsb. Il suffit ensuite de retrancher 546 (2x273°K) à la valeur du can pour obtenir la valeur en °C avec une résolution de 0,5°C/Lsb.
    je crois même ce que tu viens de dire il faut que je utilise des float24 pour le calcul.

    Citation Envoyé par Jack Voir le message
    D'après ce que j'ai lu:
    Code:
    data[0] = res/10; data[1]=res%10
    , c'est 1°C

    A+
    comment tu as calculer 1°C puisque la variable volts et kelvins est 0 lors de la compilation manuelle ???


    la solution d'un tableau à deux dimension ma plut beaucoup je vais la mettre en place mais j'ai une question :
    Dans manexample de code les valeur 591,593,595,597,599,601... sont dans ma variable adcon donc la fonction readtemp() qui renvois ces infos ?????

  16. #15
    Qristoff
    Animateur Électronique

    Re : lm335 avec pic probleme

    Bonjour,
    je crois même ce que tu viens de dire il faut que je utilise des float24 pour le calcul.
    j'ai rien compris
    Tout existe, il suffit de le trouver...!

  17. #16
    sinatra

    Re : lm335 avec pic probleme

    Citation Envoyé par Qristoff Voir le message
    Bonjour,
    j'ai rien compris

    c'est a dire même avec un pont de résistance il faut faire des opérations de calcul dans le code avec des variable float24

  18. #17
    sinatra

    Re : lm335 avec pic probleme

    Citation Envoyé par Jack Voir le message
    Peut-être suffit-il juste de le déclarer en constante et le compilateur le comprendre tout seul.

    A+
    je confirme on déclare en constante le tableau reste en rom.

  19. #18
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    comment tu as calculer 1°C puisque la variable volts et kelvins est 0 lors de la compilation manuelle ???
    Je n'ai rien calculé. J'ai juste déduit çà de ton code: tu veux pouvoir afficher 15°C par exemple. Il faut donc un chiffre pour les dizaines (data[0] et un pour les unités (data[1]).

    A+

  20. #19
    Jack
    Modérateur

    Re : lm335 avec pic probleme

    j'ai une question :
    Dans manexample de code les valeur 591,593,595,597,599,601... sont dans ma variable adcon donc la fonction readtemp() qui renvois ces infos ?????
    oui, c'est ça: C'est la valeur numérique résultant de la conversion.

    A+

  21. #20
    sinatra

    Question Re : lm335 avec pic probleme

    Citation Envoyé par Jack Voir le message
    Je n'ai rien calculé. J'ai juste déduit çà de ton code: tu veux pouvoir afficher 15°C par exemple. Il faut donc un chiffre pour les dizaines (data[0] et un pour les unités (data[1]).A+
    oui c"est exactement ca pour 15° data[0]=15/10 = 1 et data[1]=15%10=5

    j'ai fais une autre fonction la voici :
    Code:
    uns16 lire_temp(void)
    {
    uns16 temp;
    
    TRISA =  0b.0000.0001; //RA0  Input
    
    ADCON0 = 0b.0100.0001; 
    ADCON1 = 0b.1100.0000; 
    
    GO = 1; //Convertion RA0 
    while(GO == 1);
    temp.high8 = ADRESH;
    temp.low8 = ADRESL;
    return(temp);

    est ce que la variable temp contient les valeurs suivant : 591,593,595,597,599,601 suivant le sensor LM335 ?????

  22. #21
    sinatra

    Question Re : lm335 avec pic probleme

    Citation Envoyé par Jack Voir le message
    Je n'ai rien calculé. J'ai juste déduit çà de ton code: tu veux pouvoir afficher 15°C par exemple. Il faut donc un chiffre pour les dizaines (data[0] et un pour les unités (data[1]).

    oui c"est exactement ca pour 15° data[0]=15/10 = 1 et data[1]=15%10=5

    j'ai fais une autre fonction la voici :
    Code:
    uns16 lire_temp(void)
    {
    uns16 temp;
    
    TRISA =  0b.0000.0001; //RA0  Input
    
    ADCON0 = 0b.0100.0001; 
    ADCON1 = 0b.1100.0000; 
    
    GO = 1; //Convertion RA0 
    while(GO == 1);
    temp.high8 = ADRESH;
    temp.low8 = ADRESL;
    return(temp);
    A+
    est ce que la variable temp contient les valeurs suivant : 591,593,595,597,599,601 suivant le sensor LM335 ?????

  23. #22
    Qristoff
    Animateur Électronique

    Re : lm335 avec pic probleme

    c'est a dire même avec un pont de résistance il faut faire des opérations de calcul dans le code avec des variable float24
    effectivement, il faut une soustraction mais sur un entier en 10 bits ! il y a pas plus simple !
    ensuite il n'y a pas d'erreur car le Lsb vaut exactement 0,5°C ! par moyennage direct 2 à 2, la résolution passe à 0.25°C.
    Tout existe, il suffit de le trouver...!

Discussions similaires

  1. Mesure température avec LM335
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 09/05/2012, 10h16
  2. LM335+Pic
    Par alex934mas dans le forum Électronique
    Réponses: 13
    Dernier message: 02/06/2008, 22h02
  3. Sonde de T°C avec LM335
    Par jorg1n dans le forum Électronique
    Réponses: 13
    Dernier message: 24/01/2008, 07h19
  4. Capteur de type lm335 associé a un pic 16f877
    Par inviteba8bd60d dans le forum Électronique
    Réponses: 2
    Dernier message: 21/01/2008, 21h02
  5. probleme avec pic
    Par invite2b3d9dd6 dans le forum Électronique
    Réponses: 2
    Dernier message: 19/07/2007, 14h50
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...