|
/*
|
|
* File: newmain.c
|
|
* Author: mafall8
|
|
*
|
|
* Created on 21 octobre 2022, 14:08
|
|
*/
|
|
#define _XTAL_FREQ 4000000L
|
|
#include <xc.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
|
|
float resultat=0; // variable pour lire le resultat de la conversion
|
|
float Temperature =0; // variable pour stocker la temp?rature calcul?e
|
|
double Vout=0; // valeur analogique de la sortie du capteur
|
|
unsigned int canal;// variable pour le canal
|
|
|
|
float ADC_Read(unsigned int canal);
|
|
void ADC_Init();
|
|
|
|
void main(void) {
|
|
|
|
|
|
void ADC_Init() ;// on initialise le converstisseur analogique num?rique
|
|
while(1)
|
|
{
|
|
// Lecture du convertisseur analogique
|
|
resultat = ADC_Read(0); // stockage du resultat de la conversion dans le canal 0;
|
|
// Calcul de la TEMPERATURE
|
|
Vout = resultat * 0.0048828; // tension de sortie du capteur = resultat de la conversion * la r?solution du CAN 5/1024= 0.0048828125
|
|
Temperature = Vout / 0.01; // Vout= 10mv/?C *T donc T = Vout/0.01
|
|
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
void ADC_Init() // initialisation du converstisseur analogique num?rique
|
|
{
|
|
|
|
ADCON0 = 0x41; // choix du cannal analogique AN0 , Activation de l'ADC , horloge cadenc? FOSC/8
|
|
ADCON1 = 0x80; // source de r?f?rence VSS ET vdd , les valeurs convertis sont class?es de la droite vers la gauche
|
|
|
|
}
|
|
|
|
|
|
|
|
float ADC_Read(unsigned int canal) // Fonction pour lire la valeur ? la sortie du convertisseur
|
|
// le resultat de la conversion ?tant sur 10 bit donc la fonction ADC_Read renvoie qu'on va mettre dans un unsigned int (2 octets)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if(canal <0 || canal >7) // Control du canal
|
|
{ return 0;} // retour si Le canal choisi n'exite pas
|
|
ADCON0 = ADCON0 & 0x11000011; // on initialise les bits d?di?s au num?ro du canal ? 0
|
|
ADCON0 = ADCON0 | (canal <<2); // decalage pour la SELECTION DU numero de canal
|
|
// ON ATTEND LE TEMPS D'ACQUISITION de la valeur
|
|
__delay_us(10); // donc on met un delai de 10us qui est car le temps q'acquisition est de 4,67us.
|
|
GO_DONE = 1; // d?but de la conversion analogique num?riqure
|
|
while(ADCON0bits.GO_DONE); // test fin conversion
|
|
// tant que la conversion n'est pas finie on reste dans la boucle
|
|
return ((ADRESH << 8) + ADRESL); // On retourne le resultat sur 10 bits .
|
|
|
|
|
|
}
|
|
|
|
|