Introduction On désire réalisé un ohmmètre numérique, pour cela on considère le montage ci-dessous constitué de la partie de mesure analogique constitué d’un pont diviseur, de la partie calcul et traitement a base du microcontrôleur PIC16F877A et de la partie affichage de la mesure utilisant un afficheur LCD. La partie circuit de mesure est basé sur un pont diviseur de tension R1 et R2, la résistance RM est la résistance qu’on souhaite mesurer. le choix des résistances R1 et R2 dépend de la plage de variation de la résistance à mesurer. Si la tension de référence des CAN est choisi égal à 5 V et afin de gagner en précision de la mesure de RM on a intérêt d'avoir une tension Vs min proche à zéro volt et une tension Vs max proche à 5 volts quelle que soit la résistance RM le choix des résistances R1 R2 dépend de la valeur de la résistance construite mesurer et de la dynamique de la tension de sortie. Selon la valeur du tension au borne du R1 (Vs) on va déduire la valeur de la résistance RM
RM=
Cette relation est vrai si et seulement si la variation est linéaire entre Vs et RM
On va tracer la variation de Vs en fonction de RM Sous Matlab on fixent R2=1K Ω et variant R1.
Cas 1: R1=1MΩ et R2=1KΩ
Cas 2: R1=100KΩ et R2=1KΩ
Cas 3: R1=10KΩ et R2=1KΩ R1=1M
R1=100K
R1=10K Interprétation du graphes:
Pour mesurer des résistances RM<0.25 M =====> R1=10K
Pour mesurer des résistances RM<1 M =====> R1=100K
Pour mesurer des résistances RM>1 M =====> R1=1M
On va travailler sur le deuxième cas R1=100K
Code sous MikroC //Configuration de l’afficheur LCD Sbit LCD_RS at RB4_bit; Sbit LCD_EN at RB5_bit; Sbit LCD_D4 at RB0_bit; Sbit LCD_D5 at RB1_bit; Sbit LCD_D6 at RB2_bit; Sbit LCD_D7 at RB3_bit; Sbit LCD_RS_Direction at TRISB4_bit; Sbit LCD_EN_Direction at TRISB5_bit; Sbit LCD_D4_Direction at TRISB0_bit; Sbit LCD_D5_Direction at TRISB1_bit; Sbit LCD_D6_Direction at TRISB2_bit; Sbit LCD_D7_Direction at TRISB3_bit; int vin ; Rm_ohm=(50000/vs)-11000; float vs; floatToStr(Rm_ohm,Text2); float Rm_ohm; char Text1[]="Resistance RM :"; Lcd_Cmd(_LCD_CLEAR); char Text2[6]; // char Text3 []=”ohms."; Lcd_Cmd(_LCD_CURSOR_O void main() { FF); ADCON1=0x00; Lcd_Out(1,1,Text1); Void ADC_Init(); Lcd_Out(2,1,Text2); Lcd_Init(); Lcd_Out(2,7,Text3); While(1) Lcd_Out(2,7," "); { delay_ms(1000); vin=ADC_Read(1); } vs=(5*(float)vin)/1023; }