/* ***************************************************************
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,d4,d5,d6,d7,*text; //Variables Pour l'affichage
unsigned long acquisition;
//Initialisation de la variable de coefficient de référence
//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;
int temp;
//int tempRS232;
//Formatage de l'affichage des valeurs numériques
#define Affiche lcd_chr(2,3,d1+48); lcd_chr_cp('.'); \
lcd_chr_cp(d2+48); lcd_chr_cp(d3+48); \
lcd_chr_cp(d4+48); lcd_out_cp("V "); \
lcd_out_cp(" T "); lcd_chr_cp(d5+48); \
lcd_chr_cp(d6+48); lcd_chr_cp(d7+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=("THERMOVOLT");
lcd_out(1,4,text);
text=("U ");
lcd_out(2,1,text);
ref=116;
//Usart_Init(19200); // Initialisation USART module
// (8 bit, 19200 baud rate, sans bit de parité...)
//Partie du programme à boucler
do {
acquisition =Adc_Read(0);
acquisition=acquisition*5000/1023; //*5 diminue la précision, *5000/1023 résolution la plus fine
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
// affichage de la tension aux bornes de la diode
d1=(acquisition/1000);
d2=((acquisition%1000)/100);
d3=((acquisition%100)/10);
d4=((acquisition)%10);
// affichage de la conversion en degré celcius
d5=(temp/100);
d6=((temp%1000)%100)/10;
d7=((temp%1000)%100)%10;
Affiche;
delay_ms(20);
} while(1);
}