Vous êtes sur la page 1sur 6

Ecole Nationale des Sciences Appliques de Kenitra

Ralisation dun voltmtre numrique


base du PIC 16F877

Ralis par :
IMPANO Parfait
ALAOUI Ayoub
DIALLO Mahamoudou

Encadr par :
Pr. Zaytoune

Prsentation :
Le voltmtre est un appareil qui permet de mesurer la tension (ou diffrence de potentiel
lectrique) entre deux points, grandeur dont l'unit de mesure est le volt (V). Dans un circuit
il est un diple
La grande majorit des appareils de mesure actuels est construite autour d'un voltmtre
numrique, la grandeur physique mesurer tant convertie en tension l'aide d'un capteur
appropri. C'est le cas du multimtre numrique qui, en plus d'offrir la fonction voltmtre,
comporte minima un convertisseur courant tension permettant de le faire fonctionner
en ampremtre et un gnrateur de courant constant pour fonctionner en ohmmtre.

Objectif du Projet :
Utiliser le convertisseur analogique-numrique intgr dans le PIC 16f877 pour raliser un
voltmtre numrique qui mesure et affiche des tensions de 0 50 V sur un cran LCD.

Composants :

Le microcontrleur PIC 16F877

Rsistances R1=100k et R2=11,011k

Afficheur LCD

Crystal 4MHz

La mesure de la tension et la forme du diviseur de tension :

En effet le convertisseur analogique numrique du PIC


ne peut mesurer que de 0V +5V, donc on ne peut pas
envoyer directement une tension suprieur 5v
lentre des pins du PIC,
On va donc utiliser le diviseur de tensions ci-contre qui
a pour rle de rduire la tension lentre et ladapter
au PIC.

Nous voulons une tension qui varie entre 0V et 50V. On rgle alors nos rsistances pour que
cette tension soit adaptable au PIC :

5 = Vin (max)

2
(1+2)

: Diviseur de tension

On a Vin (max) = 50 et on pose R2=11,011k


Do : R2 + R1 =

5011,011
5

Donc : R1 = 100k

Mais en vrit, Notre PIC lit la tension travers la rsistance R2 = 11,011k, donc on va
calculer la tension aux bornes de la tension R2 :
Par le diviseur de tension on a :

V2 =

100+11,011

V2 =

111,011

11,011

11,011

V2 est lu par le convertisseur analogique numrique de PIC donc notre entre devient :
=

111,011 2
11,011

= 10 2

Comment Adapter les valeurs en sortie du convertisseur aux valeurs


de lentre en Volt ?
La conversion analogique numrique par le microcontrleur se fait sur 10bits, ce qui montre
que la sortie de lADC varie de 0 1023, tandis que la mesure varie de 0V 50V, cest--dire
que, quand la mesure est de 50V, la valeur de lADC est de 1023 et quand elle est de 0V, la
valeur de lADC est de 0. Nous voulons une prcision de 0.1 volts do la tension sera donne
en termes de 0.1 volts
2

50
max
500
0,1
=
= 10
=
2 1 2 1 1023
= 0,489
DONC :

= (, )

Schma Final du Circuit :

En changeant la valeur du signal analogique R(1), nous voyons que lcran affiche la tension
correspondante

Code sur MikroC :

char oo, ooo, nn;

if(j<=9){

char *l , *m, n[6], o[6];

lcd_out (1,1,"***Voltmetre***");

unsigned int k, j=11 ,i;

lcd_out (2,1,"V = ");

void main(){

lcd_Chr (2,5,oo);

int t;

lcd_Chr (2,6,'.');

TRISA = 1;

lcd_Chr (2,7,nn);

TRISD = 0;

lcd_out (2,9,"Volts");

Lcd_Init (&PORTD);

Lcd_Cmd (Lcd_CLEAR);

else{

Lcd_Cmd (Lcd_CURSOR_OFF);

lcd_out (1,1,"***Voltmetre***");

While 1)

lcd_out (2,1,"V = ");

lcd_Chr (2,5,ooo);

t=ADC_READ (0);

lcd_Chr (2,6,oo);

k=t*0.489;

lcd_Chr (2,7,'.');

j=k/10;

lcd_Chr (2,8,nn);

i=k%10;

lcd_out (2,10,"Volts");

IntToStr (j,o);

IntToStr (i,n);

ooo= o[4];

oo = o[5];
nn= n[5];

Commentaires sur le code :


j=k/10; i=k%10; : le rsultat tant en termes de 0,1 volts, les centaines et les dizaines

reprsentent la partie entire en volts et les units reprsentent la partie dcimale do on


fait une division entire et un reste de la division par 10 pour avoir respectivement la partie
entire et la partie dcimale.
Lafficheur LCD ne prend en argument que des caractres ou
des chanes de caractres do la conversion dentiers en chanes de caractres. La fonction
IntToStr exige une dimension de 6 cases pour le tableau de caractres de sortie do o[6] et
n[6] dans la dclaration.
IntToStr (j,o); IntToStr (i,n); :

ooo= o[4]; oo = o[5]; nn= n[5]; : ayant une partie entire 1 ou 2 chiffres et une partie
dcimale 1 chiffre nous rcuprons les derniers caractres de nos chanes 6 caractres
pour liminer les espaces.
lcd_out (int ligne, int colonne, char* texte); lcd_Chr (int ligne, int colonne, char texte); : Pour afficher

respectivement les chanes de caractres et les caractres