;------------------------------------------------------------------- ; PROGRAM NAME & REVISION INFORMATION ; ;------------------------------------------------------------------- ; DAILY CHARGE TIMER ; ; VERSION 2.00 ; ; DESIGNED BY E BROUWER ; ; DATE: FEBRUARY 2015 ;------------------------------------------------------------------- ; DESCRIPTION ; ; DAILY, THE CONTROLLER WILL TURN ON FOR A FIXED TIME TO ; CHARGE BATTERY POWERED TOOLS (DEFAULT 30 MINUTES) ; AFTER TOOLS WERE USED, PRESS CHARGE BUTTON TO ENABLE ; A LONGER CHARGE (DEFAULT 8 HOURS) ; ; TIME IS KEPT BY MEANS OF THE LINE FREQUENCY. ;------------------------------------------------------------------- ; PIN ASSIGNMENTS ; ;------------------------------------------------------------------- ; PIN INPUT/OUTPUT USED FOR ; GP0 INPUT CHARGE BUTTON ; GP1 OUTPUT POWER LED ; GP2 OUTPUT CHARGE LED ; GP3 INPUT 50Hz/60Hz SELECTION ; GP4 OUTPUT RELAY OUTPUT ; GP5 INPUT 50Hz/60Hz INPUT SIGNAL ; ;------------------------------------------------------------------- ; COMPILER SETTINGS ; ;------------------------------------------------------------------- LIST F=INHX8M, P=12F675, R=HEX #include ;CONFIGRATION BITS ;----------------- __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT ;------------------------------------------------------------------- ; VARIABLES/LABELS DECLARATIONS ; ;------------------------------------------------------------------- CBLOCK H'20' ;DEFINE RAM LOCATION TIME_MS ;TIME - INTERRUPTS FROM LINE FREQ TIME_SEC ;TIME - SECONDS TIME_MIN ;TIME - MINUTES TIME_HRS ;TIME - HOURS FREQ ;LINE FREQUENCY TEMP ;TEMP CHARGE_MIN ;CHARGING TIME - MINUTES CHARGE_HRS ;CHARGING TIME - HOURS ENDC #DEFINE BTN GPIO,0 ;CHARGE BUTTON INPUT #DEFINE PWR_LED GPIO,1 ;POWER LED #DEFINE CHG_LED GPIO,2 ;CHARGE LED #DEFINE FREQ_PIN GPIO,3 ;LINE FREQUENCY SELECTION #DEFINE RELAY GPIO,5 ;OUTPUT RELAY ;DEFINE TIME FOR DAILY CHARGE #DEFINE DAILY_MIN .30 ;DAILY CHARGE MINUTES #DEFINE DAILY_HRS .0 ;DAILY CHARGE HOURS ;DEFINE TIME FOR BUTTON CHARGE #DEFINE BUTTON_MIN .0 ;BUTTON CHARGE MINUTES #DEFINE BUTTON_HRS .8 ;BUTTON CHARGE HOURS ;------------------------------------------------------------------- ; START-UP OF PIC ; ;------------------------------------------------------------------- ORG 0 ;RESET VECTOR GOTO START ; / ORG 4 ;INTERRUPT VECTOR GOTO ISR ; / ;------------------------------------------------------------------- ; SET-UP OF REGISTERS AND INTERRUPTS ; ;------------------------------------------------------------------- START ;CALL H'3FF' ;LOAD CALIBRATION DATA ;BSF STATUS,RP0 ;SET BANK 1 ;MOVWF OSCCAL ;SET CALIRATION ;BCF STATUS,RP0 ;SET BANK 0 ;REMOVE BELOW - USED FOR CODE TESTING ;------------------------------------ ;------------------------------------ ;REMOVE ABOVE - USED FOR CODE TESTING ;------------------------------------ ;SETUP OF REGISTERS ;------------------ CLRF GPIO ;CLEAR PORTS MOVLW B'111' ;SET COMPARATOR TO OFF MOVWF CMCON ; / BSF STATUS,RP0 ;SET BANK 1 CLRF ANSEL ;CLEAR ALL A/D'S MOVLW B'001001' ;ENABLE WEAK PULL-UPS MOVWF WPU ; / MOVLW B'101001' ;SETUP IO DIRECTION MOVWF TRISIO ; / MOVLW B'00000111' ;B'00101010'LOAD OPTION REGISTER ;BIT 7 - 0 = WEAK PULL-UPS ENABLED ;BIT 6 - 0 = INTERRUPT ON RISING EDGE OF GP2 ;BIT 5 - 1 = TMR0 CLOCK SET TO GP2 PIN ;BIT 4 - 1 = TMR0 INC ON HIGH TO LOW ;BIT 3 - 1 = PRESCALER ASSIGNED TO WDT ;BIT 2..1 = PRESCALER SET TO 1:256 MOVWF OPTION_REG ; / BCF STATUS,RP0 ;SET BANK 0 ;DETERMINE 50Hz OR 60Hz 50Hz - GPIO3 IS HIGH ;---------------------- 60Hz - GPIO3 IS LOW MOVLW .50 ;LOAD FREQ TO 50Hz MOVWF FREQ ; / MOVLW .60 ;IS FREQ PIN SET TO 60Hz? BTFSS FREQ_PIN ; / MOVWF FREQ ;YES, SO SET TO 60 ;RESET 24 HOUR TIMER ;------------------- CLRF TIME_MS CLRF TIME_SEC CLRF TIME_MIN CLRF TIME_HRS ;LOAD INITIAL DAILY CHARGE TIME MOVLW DAILY_MIN MOVWF CHARGE_MIN MOVLW DAILY_HRS MOVWF CHARGE_HRS ;------------------------------------------------------------------------ ;` WAIT FOR PPM PULSES ; ;------------------------------------------------------------------------ WAIT GOTO WAIT ;------------------------------------------------------------------------ ; INTERRUPT SERVICE ROUTINE ; CALLED ON EVERY RISING AND FALLING EDGE OF FREQ INPUT ;------------------------------------------------------------------------ ISR INCF TIME_MS,1 ;INCREMENT MS RETFIE ;RETURN & RESET INTERRUPTS ;------------------------------------------------------------------------ ; 0.5s DELAY ; ;------------------------------------------------------------------------ DLY_5 MOVLW D'65' ;REPEAT TEMP TIMES MOVWF TEMP ; / DLY_51 DECFSZ TEMP,1 ; / GOTO DLY_51 RETURN ;------------------------------------------------------------------------ ; END OF PROGRAM ; ;------------------------------------------------------------------------ END