Projet

Général

Profil

Feature #14291 » code source.c

Anonyme, 24/10/2022 17:55

 
/*
* 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 .


}


(1-1/2)