Bonjour à vous tous et à toutes
je désire commander un servo moteur en utilisant le TIMER2. mais le programme ça marche pas , je reçois rien sur la sortie.
Voici les différents equations utilisées:
avec K1: le pré diviseur d'horloge, dans mon cas j'ai pris 1
avec K2 le diviseur de sortie, K2=1
La configuration des registres:
Donc:Code:TRISC=0x00; PORTC=0x00; TMR2 = 0; PR2 = 99; // Registre de période à 100 INTCON=0xC0; k1=0 et K2=0 TMR2IE_bit = 1; // Activation interruption Timer 2 TMR2IF_bit = 0; // Mise à 0 indicateur int. T2CON = 0b00000100;
les angles de rotation sont:
0°==>1500µs càd 15*100µs
50°==>2000 càd 20*100µs
voici le reste de la main:
L'interruption:Code:while(1){down=15; delay_ms(2000); down=20; delay_ms(2000); }
Prenons le cas du 0°: il faut incrémenter cnt 15 fois. Donc selon le programme ci-dessous: l'état 1 dure 1.5ms et l'état bas 18.5ms dont le total: 200*100µsCode:void interrupt(){if(TMR2IF_bit==1){ cnt++; if(cnt==down) portc.F0=0; if(cnt==200) {portc.F0=1;cnt=0;} TMR2IF_bit=0; TMR2=0; } }
Pourriez vous me dire où je suis trompé ??
merci d'avance
-----