Bonjour tout le monde,
Je suis actuellement sur la programmation d'un PIC32MX795F512L.
Mon projet comporte un écran LCD et j'aimerais pouvoir piloter le contraste de ce dernier à l'aide d'un signal PWM. J'ai donc la broche V0 (broche n°3) de mon écran connecté à la broche 77 de mon PIC (OC3/RD2).
Tout l'intérêt de cette broche est l'OC3 (Output Compare) qui permet théoriquement de générer un signal PWM.
Je n'ai jamais utilisé de signal PWM, j'ai donc consulté la DOC de mon PIC, c'est assez bien détaillé et j'ai même trouvé un exemple de code que j'ai modelé à ma façon.
Le voici :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void main(){ Init_Ports(); INTCONSET = _INTCON_MVEC_MASK; /* Set the interrupt controller for multi-vector mode */ __builtin_enable_interrupts(); /* Set the CP0 Status IE bit to turn on interrupts globally */ Init_Display(); init_PWM_timer(); envoyer_chaine("Hello World"); while(1); } void init_PWM_timer(){ OC3CON = 0x0000; // Turn off the OC1 when performing the setup OC3R = 0xFFFF; // Initialize primary Compare register OC3RS = 0x0000; // Initialize secondary Compare register OC3CON = 0x0008; // Configure for PWM mode without Fault pin enabled PR3 = 0xFFFF; // Set period // Timer 3 Config IPC3bits.T3IP=7; //Priority IFS0bits.T3IF=0; IEC0bits.T3IE=1; //T1_Enable T3CON=(0x8000); OC3CON=(0x800E); } void __ISR(_TIMER_3_VECTOR, ipl7) T3_IntHandler (void) { // Insert user code here IFS0bits.T3IF=0; }
Les fonctions Init_Display, Init_Ports et envoyer_chaine, sont d'autres fonction de mon programme que je n'ai pas collé ici.
Elles permettent respectivement l'initialisation de l'afficheur, le remappage des ports de mon PIC et d'envoyer une chaine de caractères à l'afficheur.
Tout d'abord, première surprise lors de l'exécution du programme, avec une observation à l'oscilloscope sur ma broche, je n'observe pas un signal PWM mais une tension analogique continue que je peux faire varier. Je me suis dis que c'était comme ça qu'opérait la broche.
J'arrive donc bien à faire varier cette tension analogique en modifiant les valeurs de OC3R et OC3RS mais elle sont comprises entre 4V et 1.15V. Le problème c'est que le contraste reste très clair avec 1.15V et que j'aimerais donc descendre sous cette valeur ...
Je compte donc sur la célèbre qualité des lecteurs de ce forum et vous remercie d'avance.
Amicalement,
Aurel.
Partager