Bonjour,
Voila je vous expose ma missionje doit réaliser entre autre chose une série de pulse à 38Khz, puis une pause et rebelote.
Pour cela j'utilise un pic 16F886 sur l'horloge interne à 8Mhz avec SDCC comme compilateur et Context comme "IDE".
Je me suis dit que j allai utiliser les interruptions avec un timer, vu qu'il ne va pas réaliser que cette opération, loin de la.
Bref, mon souci est que je n'arrive pas quoi que je tente à avoir une fréquence de pulse fiable à 38Khz, voir je n'arrive pas du tout à l'atteindre.
donc voici mon code :
donc si quelqu'un aurait une idée, du pourquoi cela ne marche pas comme je le suette. Sinon si quelqu'un a une astuce plus intéressante je suis preneur (changer de timer, utiliser une autre façon de coder...). Je tien à re-souligner qu'il faut absolument que cela ne mobilise le pic que sur de courte période et pas tout le temps.Code:// Main program // Pic 16F886 // version : 16/07/2011 #include "pic16F886.h" int count=0; void main(void) { OSCCON = 0x71; //configuration horloge interne du pic à 8MHz T1CON = 0x81 ; // enable timer 1 sans prescaler TMR1H = 0xFF ; TMR1L = 0xE3 ; // 0xFFFF - 0xFFE3 = 28 => 28 x 0.5 µs = 14 µs TMR1IE = 1 ; // On autorise les interruptions du timer 1 // Autorisation des interruptions PEIE = 1 ; // Autorisation des IT peripherique GIE = 1 ; // Autorisation général des IT // *********************GPIO Initialization ********************* ANSEL=0x00; TRISA0=0; TRISC0=0; TRISC1=0; RA0=0; RC0=0; // ********************************************************** while(1) { RC0=1; //allume la LED1 } } void Intr(void) __interrupt 0 { if(TMR1IF==1) { count++; if (count <=30){ // lance 30 toggle=15 pulse if (RA0==0){ RA0=1; } else { RA0=0; } TMR1H = 0xFF ; TMR1L = 0xE3 ; } else{ count=0; TMR1H = 0xDF ; //Delay entre deux series de pulse TMR1L = 0xCF ; // reste a définir } TMR1IF = 0 ; } }
Je vous remercie d'avance pour vos futur proposition
Amicalement Ezechkiel
PS: je débute sur les PICs, juste une semaine à mon actif.
-----