Hello
Bon j'ai encore besoin de votre aide, ça fait un moment que je cherche mais je ne trouve pas le pourquoi du comment: j'utilise le timer0 et le timer2 pour générer une impulsion pour servo moteur sur RA1.
Le timer0 a son prescaler à 16 (pour avoir une impulsion entre 0.5 et 2.5ms), le timer2 divise par 160 (10*16) avec PR2 à 124 pour avoir une impulsion toutes les 20ms (1µs*(124+1)*10*16=tpscycle*(P R2+1)*prescaler*postscaler=20m s).
Donc le fonctionnement des ITs en rapide:
si IT du timer2: RA1 = 1, chargement valeur dans TMR0 et T0IE activé pour l'impulsion
si IT timer0: RA1 = 0, T0IE désactivé: fin de l'impulsion
Mon code:
après compil avec hitechpicc lite et prog avec winpic800, le signal n'est pas bon, mon servo (qui fonctionne correctement) va directement en butée (et force). Et je n'ai pas d'oscillo pour voir, cependant avec une led en sortie elle s'allume légèrement.Code:static void interrupt timer(void){ if(TMR2IF){ RA1 = 1; TMR0 = 256 - impulsion; T0IE = 1; TMR2IF = 0; } if(T0IF){ RA1 = 0; T0IE = 0; T0IF = 0; } } void main(void){ TRISA = 0b00100000; //RA5 en entrée TRISB = 0b00000000; // Tout le Port B en sortie CMCON = 0x07; // Désactivation module comparateur PORTA = 0; // Reset ports PORTB = 0; OPTION = 0b00000011;//0b00000011; //Osc/4, prédisviseur = 16 GIE = 1; // IT autorisées T0IE = 0; // IT du Timer0 non autorisées PEIE = 1; // IT autorisées TMR2IE = 1; //iT timer2 activées PR2 = 124; TMR0 = 94; T2CON = 0b01001010; // 0b01001010 prescaler = 10 (0b1001: 10-1)), postscaler = 16(0b1x): division par 16 TMR2ON = 1; // IT du Timer2 autorisée while(1){ if(!z){ //z=1 ici, donc condition fausse: saut addat = readCAN(); addat = (addat*15)/32+35; //ajustement pour les IT impulsion = addat; addat = (addat*8)/5; //ajustement pour l'affichage } //affichage7Seg(addat); //affichage de la valeur sur aff 7seg ("désactivé" pour être sur que ça n'interfère pas) } }
Voila là je vois vraiment pas ce qu'il ne va pas!! (si ça continu je vais encore tout casser ça m'énerve... )
Merci d'avance pour votre aide précieuse
crdlt,
Benj
-----