Conversions analogique à numérique avec le PIC Claude Barbaud 25 janvier 2005 P
Conversions analogique à numérique avec le PIC Claude Barbaud 25 janvier 2005 Principe: Vref(+) Vin Vref(-) N ) 1 2 ( * ) ( ) ( ) ( B Vref Vref Vref Vin N Avec B = nombre de bits On voit que le nombre de bits détermine la précision. Par exemple, avec les références à 5V et à 0V, la précision 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 possède 10 bits Les références 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 entrée 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 n’y a qu’un convertisseur. Les conversions doivent être réalisées en séquence. 13-1 Convertis seur A N Réalisation de la conversion Pour convertir, il faut d’abord démarrer 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 résultat : float lecture, tension; lecture = read_adc(); // un seul convertisseur pas // de paramètre 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 résultat sur le port série RS-232. Comme elle ne fonctionne qu'à 8 bits, deux choix s'offrent à nous: Diminuer la résolution du convertisseur. La directive est placée au début. Toutes les conversions seront à cette résolution (la valeur de défaut est 10 bits) #device ADC=8 // resolution à 8 bits "perdre" les 2 bits les moins significatifs après la conversion int lect8; long int valeur; valeur = read_adc() lect8 = valeur >> 2; putchar(0x0d); // CR putchar(lect8); Garder les 10 bits, et transmettre en 2 fois putchar((valeur>>8)); // partie haute putchar(valeur); // partie basse Il reste à récupérer les données du côté de l'ordinateur principal (C, LabView) 13-2 uploads/Litterature/ can-avec-le-pic.pdf
Documents similaires
-
12
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 12, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.1382MB