Bonjour à tous,
Je tente de générer un signal (carré) avec un PIC18F4550.
Pour ça j'utilise le TIMER2 (8bits) en interruption quand sa valeur correspond a PR2 mais je n'arrive pas a avoir cette fréquence : je passe à côté de quelque chose.
J'ai toujours une fréquence 3x inférieure à celle que je dois obtenir.
L'interruption inverse l'état de la pin donc la fréquence de l'interruption est deux fois plus élevé que celle du signal.
J'utilise un quartz externe de 48mhz en laissant PR2 a 255.
Fosc = 48Mhz/4 = 12 Mhz
Finterruption = 12Mhz/255=~47058khz
Quand je mesure, ça me donne une fréquence environ 7.935khz donc une interruption a 15.870khz soit presque exactement 47058khz/3...
Si je modifie PR2, j'obtiens toujours une fréquence presque exactement 3x inférieure...
Je vous donne une version allégé de mon programme :
Merci d'avance pour votre aide !Code:void interrupt() { PIR1.TMR2IF = 0; //reset du flag "match" LATB.B0=!LATB.B0; //inversion de l'état de la pin } void main() { T2CON = 0x00; //pas de prescaler ni postscaler sur timer2 PIE1.TMR2IE = 1; //timer2 en mode interruption quand il "match" avec PR2 INTCON.GIE = 1; //activation globale des interruptions INTCON.PEIE = 1; //activation des interruptions des péripheriques T2CON.TMR2ON = 1; //activation du timer2 TRISB = 0; do { } while(1); }
-----