Vous êtes sur la page 1sur 2

Conversions analogique numrique avec le PIC

Claude Barbaud

25 janvier 2005

Principe:
N

Vref(+)
Vin
Vref(-)

Convertis
seur
A N

Vin Vref ()
* (2 B 1) Avec B = nombre de bits
Vref ( ) Vref ()

On voit que le nombre de bits dtermine la prcision. Par exemple, avec les rfrences
5V et 0V, la prcision sera(1 pas):
8 bits: un pas = 5V/28 = 20 mV
10 bits: un pas = 5V/210 = 5 mV
La conversion prends du temps.

Avec le PIC 16F876


le convertisseur possde 10 bits
Les rfrences sont internes ou externes. Si elles sont internes, il s'agit de l'alimentation:
Vref(+) = environ 5V et Vref(-) = 0V
On doit initialiser le convertisseur :
Choix de l'horloge
setup_adc(ADC_CLOCK_INTERNAL); // Utilisation de
// l'horloge interne(20 MHz)
setup_adc(ADC_CLOCK_DIV_2);
setup_adc(ADC_CLOCK_DIV_8);
setup_adc(ADC_CLOCK_DIV_32);
Choix des broches en entre analogique
setup_adc_ports(RA0_ANALOG);
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc_ports(ALL_ANALOG); // RA0, RA1, RA2, RA3 et RA5
setup_adc_ports(NO_ANALOGS); // toutes redeviennent logiques
Il ny a quun convertisseur. Les conversions doivent tre ralises en squence.
13-1

Ralisation de la conversion
Pour convertir, il faut dabord dmarrer la conversion :
set_adc_channel(canal); // avec canal = le canal choisi
// (0), (1) (2) (3) ou (5)
set_adc_channel(0); // lit sur RA0
Puis attendre quelques s :
delay_us(10);
Pour lire le rsultat :
float lecture, tension;
lecture = read_adc(); // un seul convertisseur pas
// de paramtre
tension = 5 * lecture / 1023;
on pourrait utiliser une variable 16 bits
long int valeur;
valeur = read_adc();
printf("\n\r lecture = %lu", valeur);

Communiquer sur RS-232


La fonction putchar() permet de communiquer le rsultat sur le port srie RS-232.
Comme elle ne fonctionne qu' 8 bits, deux choix s'offrent nous:

Diminuer la rsolution du convertisseur. La directive est place au dbut. Toutes les


conversions seront cette rsolution (la valeur de dfaut est 10 bits)
#device ADC=8
// resolution 8 bits

"perdre" les 2 bits les moins significatifs aprs la conversion


int lect8;
long int valeur;
valeur = read_adc()
lect8 = valeur >> 2;
putchar(0x0d);
//
putchar(lect8);

CR

Garder les 10 bits, et transmettre en 2 fois


putchar((valeur>>8));
// partie haute
putchar(valeur); // partie basse

Il reste rcuprer les donnes du ct de l'ordinateur principal (C, LabView)

13-2

Vous aimerez peut-être aussi