Bonjour à tous
Je suis allé puiser sur microchip des exemples sur le mode capture des pic 18f voila ce que j'ai trouvé :
Code:
Code:* ADDITIONAL NOTES: * Code uses the Peripheral library support available with MCC18 Compiler * Code Tested on: * PicDem2+ demo board with PIC18F4685 controller * The Processor starts with the External Crystal (8 Mhz). * * signal to be captured is fed to CCP1 pin. ************************************************** ********************/ #define USE_OR_MASKS #include <p18cxxx.h> #include "capture.h" //header file for using library API for input capture #include "timers.h" //header file for using the library APIs for timers that act as source for input capture //-------------------------------Configuration setting ---------------------------------------------- /** * Oscillator is configured as HS * Fail safe monitor is enabled * watch dog timer is disabled * Extended instruction mode is disabled * oscillator switch over is enabled */ #if defined(__18F4685) //If the selected device if PIC18F4685, then apply below settings else user will have to set #pragma config OSC=HS, FCMEN=ON, WDT=OFF, IESO=ON, XINST=OFF, LVP=OFF #endif unsigned int INCAPResult; void main(void) { unsigned char config1=0x00,timer_value = 0x00; //------------------Configure timer for corresponding timer module selection for capture module---------------- SetTmrCCPSrc(T1_SOURCE_CCP); //Set Timer 1 as source for input capture module //------------------Configure input capture ---------------------------------------- config1 = CAP_EVERY_RISE_EDGE | CAPTURE_INT_OFF ; //configure input capture for capture on every rising edge and its interrupt off OpenCapture1(config1 ); OpenTimer1(0); //start the timer //----------------------wait till input is captured------------------------------------------------------------------------------ while(!PIR1bits.CCP1IF); // Wait for event //-------------------------------- read result----------------------------------------------------------- INCAPResult = ReadCapture1(); // read result //--------------------------close capture module---------------------------------------- CloseCapture1(); while(1); //End of program }
Cependant certain point me sont encore obscure même si j'ai compris le principe du mode capture
Je commence par cette ligne : "config1 = CAP_EVERY_RISE_EDGE | CAPTURE_INT_OFF"
Je remarque que le programme n'est écrit que sous "main", et appriori "CAPTURE_INT_OFF" signifie qu'on ne gère pas les intérruptions, comment fait on pour avoir une lecture continue de la période du signal alors?
Puis à ce niveau : "CloseCapture1();
while(1);"
Je comprends que ce programme ne fait qu'une seule lecture de période, et qu'en suite en ce retrouve dans la boucle infini while(1)....
Est ce bien le cas où est-ce une erreur d'interpretation de ma part?
Pour finir INCAPResult sera la valeur de ma periode mais sous quelle forme? En nombre d'incrémentation du Timer1 ou en µs?
Merci de votre aide,
Bonne journée
-----