/*  ***************************************************************
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);
}