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é ) .
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 tousCode: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 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 commene marche pas erreur dans la compilation.Code:return Volts/0.01; et volts=ReadTemp()*(5.0/1023);
svp est ce que quelqu'un peut m'aider ???
-----