/* ***************************************************************
Expérimentation Convertisseur Analogique digital
PIC16F88
Fusible de configuration par défaut hormis
INTRC_IO (Horloge interne)
MikroC
FB Aka Hearty 2010
Utilisation d'une Diode de signal 1N4148 comme capteur de température
*/ //*************************************************************
unsigned char d1,d2,d3,*text; //Variables Pour l'affichage
int temp;
//La valeur de la diode diminue lorsque sa température monte
//On soustrait donc la ref à la valeur de capture de l'ADC
//Pour avoir une valeur qui s'incrémente au lieu de décrémenter
int ref;
//Formatage de l'affichage des valeurs numériques
#define Affiche lcd_chr(2,8,d1+48); lcd_chr_cp(d2+48);\
lcd_chr_cp(d3+48); lcd_out_cp(" C");
//Début du programme
void main() {
ADCON1= 0x04; // Configure le registre ADCON1=> x04 = b 100 >> AN7->AN0 = DDDDADAA
OSCCON = 0x70; // Réglage logiciel de la vitesse de l'oscillateur interne ici 8Mhz
TRISA = 0xFF; // PORTA en entrée
TRISB = 0x00; // PortB en sortie
PORTB = 0; // PORTB mis à zéro
// ANSEL = 0;
// CMCON = 7;
lcd_config(&portb,1,3,7,2,5,0,4); //connection des PORTS B au LCD
lcd_cmd(LCD_CURSOR_OFF);
lcd_cmd(LCD_CLEAR);
text=("TEMPERATURE");
lcd_out(1,3,text);
text=("t = ");
lcd_out(2,4,text);
ref=116;
//Partie du programme à boucler
do {
temp = ref - Adc_Read(0);
temp *= 221 ; // coefficient de température de la jonction de la diode
temp /= 102 ;
temp = 18 + temp ; // adaptation pour donner une valeur en Celcius
d1=(temp/100);
d2=((temp%1000)%100)/10;
d3=((temp%1000)%100)%10;
Affiche;
delay_ms(20);
} while(1);
}