1 Corrigé TD4 GE2 Exercice 1 Soit un µC contenant un ADC de 10 bits de résoluti
1 Corrigé TD4 GE2 Exercice 1 Soit un µC contenant un ADC de 10 bits de résolution. a- Si les tensions de référence Vref- et Vref+ sont respectivement -5 V et +5 V, cet ADC est utilisé pour effectuer une CAN de la tension analogique de 3 V, cela entrainera dans le ou les registres donnant le résultat de conversion une valeur décimale d'environ combien ? V = (Vref+ - Vref-) = 10 volts → (11 1111 1111) = 1023 10 volt → (11 1111 1111) = 102310 3 volt → x ➔ x = 30710 b- Si les tensions de référence Vref- et Vref+ sont respectivement 0 V et +5 V, cet ADC est utilisé pour effectuer une CAN d'une tension analogique U, à calculer. Cela entrainera dans le ou les registres donnant le résultat de conversion une valeur décimale de 614. 5 volt → (11 1111 1111) = 102310 U → 614 U ≈ 3 volts Exercice 2 Nous disposons de 8 LEDs qui sont connectées au PORTB du µC PIC16F84 ou au PORTC du µC PIC16F876A utilisant par un quartz de 4 MHz. Lorsqu'on initialise le microcontrôleur, les LEDs s'allument en alternance ("Chenillard") avec un délai d’une seconde, en utilisant une temporisation logicielle grâce à la fonction Delay_ms(), de sorte qu’une LED peut être en ON et puis en OFF. Proposer un programme qui réalise ce "Chenillard" en utilisant une variable qui sera décalée soit à gauche soit à droite à chaque cycle d'allumage. void main() { unsigned char J =1 ; //pour Gauche et pour Droite J=128 ou 0x80 TRISC = 0 ; // tout le Port C en SORTIE PORTC = 0 ; // toute les LED éteinte while (1) { PORTC = J ; J = J << 1 ; if (J == 0) J = 1 ; delay_ms(1000) ; } } 2 Exercice 3 Proposer un programme qui fait clignoter une LED connectée au PORTB du PIC16F84A cadencé par un quartz de 4 MHz. La temporisation d'environ 2,5 s sera réalisée grâce au Watchdog. Utiliser la directive #define LED … Nous précisons que, sans pré-diviseur, le Watchdog du PIC16F84A stoppe son fonctionnement (endorme) pendant 18 ms. #define LED PORTB.F0 // La LED connectée à RB0 void main() { TRISB = 0 ; //PORTB = 0 ; LED = 0 ; OPTION_REG = 0x0F ; //ou 0b00001111 while(1) { LED = 1 ; asm SLEEP ; //Utiliser l’instruction SLEEP du langage Assembleur (Arrêt du signal horloge pendant 18ms x 128) LED = 0 ; asm SLEEP ; } } Exercice4 Génération d'un signal PWM (MLI) par le µC PIC16F876A cadencé par un quartz de 4 MHz. Proposer un programme qui permet de changer le rapport cyclique du module PWM-1, de 0% à 100% grâce à une variable qui s'incrémente. Le signal généré est de 5 KHz de fréquence. Si une LED est connectée à la sortie de ce module (RC2), nous observons un changement graduel de l'illumination de cette LED. Nous pouvons également mesurer les changements par un oscilloscope. Remarque : Afin de visualiser les changements de l'éclairement de la LED, nous introduisons un retard de 20 ms entre chaque cycle de changement du rapport cyclique. Donner 2 versions : une qui utilise un seul programme et l'autre utilisant un programme principal et un sous- programme d'initialisation. 3 Version 1 void main() { char k=0 ; //int k = 0 ; TRISC = 0 ; //TRISC.F2 = 0 ; PORTC = 0 ; //Facultative PWM1_Init(5000) ; PWM1_Start() ; while(1) { PWM1_Set_Duty(k) ; Delay_ms(20) ; k++ ; //k=k+1 ou k+=1 // if(k>255) k=0 ; } } Version 2 void Configur() { TRISC = 0 ; //TRISC.F2 = 0 ; PORTC = 0 ; //Facultative PWM1_Init(5000) ; PWM1_Start() ; } void main() { char k=0 ; //int k = 0 ; Configur() ; while(1) { PWM1_Set_Duty(k) ; Delay_ms(20) ; k++ ; //k=k+1 ou k+=1 // if(k>255) k=0 ; } } Version 3 char k=0 ; //int k = 0 ; void pwm() { PWM1_Set_Duty(k) ; Delay_ms(20) ; k++ ; //k=k+1 ou k+=1 // if(k>255) k=0 ; } void main() { TRISC = 0 ; //TRISC.F2 = 0 ; PORTC = 0 ; //Facultative PWM1_Init(5000) ; PWM1_Start() ; while(1) { pwm() ; } } uploads/Litterature/ corrige-td4-p.pdf
Documents similaires










-
21
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 02, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.2412MB