* source code for mikroC PRO compiler V1.65
* feel free to use this code at your own risks
*
* target : PIC12, oscillator in HS mode, watchdog enabled
*
* PIC PIN Assignemnt :
*
* GP0 : detect LED indicator
* GP1 : calibrate LED indicator
* GP2 : NC
* GP3 : NC
* GP4, GP5 : inductor
*
*******************************************************************************
*/
#define MAXTRY 15 // number of watchdog restart to calibrate loop counter
unsigned char ctr ; // number of loops between two watchdog resetsunsigned char previous ; // previous value of ctrunsigned char calibr ; // calibration value when oscillator runs freeunsigned char restarts ; // number of watchdog restartsunsigned char en ; // enable flag, allows detection
/*
* main loop
*/void main() { unsigned char i ;
/*
* configure GPIO as digital port
*/ CMCON0 = 7 ; ANSEL = 0 ; TRISIO = 0 ; GPIO = 0 ;
/*
* power up ?
*/ if(STATUS.NOT_TO) { /*
* yes, init variables
*/ restarts = 0 ; calibr = 1 ; }
/*
* watchdog reset counter
*/ if(restarts < 255) restarts++ ;
/*
* if counter differs too much from calibration value
*/ if((previous ^ ctr) > calibr) { /*
* turn detect LED on
*/ GPIO.F0 = en ;
/*
* if not on power up
*/ if(STATUS.NOT_TO == 0) { /*
* while in calibration mode
*/ if(restarts < MAXTRY) { /*
* shift calibration value
* and wait a little bit
*/ calibr <<= 1 ; Delay_ms(5) ; } } else { /*
* turn detect LED off
*/ GPIO.F0 = 0 ; } }
/*
* save last counter
*/ previous = ctr ;
/*
* is calibration over ?
*/ if(restarts > MAXTRY) { /*
* yes, turn calibrate LED off
* and set enable flag
*/ GPIO.F1 = 0 ; en = 1 ; } else { /*
* no, turn calibrate LED on
* and clear enable flag
*/ GPIO.F1 = 1 ; en = 0 ; }
/*
* set watchdog prescaler
*/ OPTION_REG = 0b11111001 ;
/*
* start counter, to be interrupted by watchdog
*/ ctr = 0 ; for(;;) { ctr++ ; } }