Solved the trigger by holding button, ingenuity works![]()
I still can't figure out why the led does not blink while counting time at the first while wend
And I noticed the ASM SLEEP does not work, consumption is the same (0.4mA) regardless I use it or comment it out. I replaced @ sleep with ASM SLEEP ENDASM to compile with MPASM do I need to add something else?
changed code:
Code:'**************************************************************** '* Name : pentax.BAS * '* Author : PEU based on examples from www.rentron.com * '* Notice : Copyleft (c) 2011 * '* : No Rights Reserved on derived work * '* Date : 05-ENE-11 * '* Version : 1.10 * '* Notes : pablou at gmail dot com * '**************************************************************** @ #define IRTX GPIO ; Define port to use for IR out @ #define PIN 2 ; Define port pin to use for IR out ' 12F683.INC at picbasic folder has this defined already for MPASM use ' __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_ON '@ device pic12f683,INTRC_OSC_NOCLKOUT , wdt_on, mclr_off, protect_on INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" INCLUDE "Elapsed_INT.bas" ; Elapsed Timer Routines by Darrel Taylor DEFINE OSC 4 GPIO = 0 TRISIO.2 = 0 ' LED IR TRISIO.1 = 0 ' Red LED TRISIO.5 = 1 ' Normal open pushbutton (w/ pulldown) CMCON0 = 7 ' Comparators disabled ANSEL = 0 ' A/D disabled ' GIE VAR INTCON.7 ' Global interrupt enable 1=ON, 0=OFF GPIE VAR INTCON.3 ' Port change interrupt enable 1=ON, 0=OFF GPIF VAR INTCON.0 ' Port Change Interrupt Flag bit Cycles VAR BYTE ' Number of carrier cycles ContaSec var word ' Seconds Counter TLFlag var byte ' Timelapse counter programmed? IRLED var GPIO.2 ' alias LED IR LED var GPIO.1 ' alias red LED BOTON var GPIO.5 ' pushbutton GIE = 0 ' Disable global ints GPIE = 1 ' Enable port change int IOC.5 = 0 ' Int-on-change for GPIO.5 disbled PAUSE 100 ' little pause to settle the processor after cold start GOTO OverASM ' jump over ASM routines ' Generate "Cycles" number of ~38.4kHz pulses Bruce at www.rentron.com ASM _Pulse38 bcf IRTX,PIN ; 1uS, LED=on goto $+1 ; + 2uS = 3uS goto $+1 ; + 2uS = 5uS goto $+1 ; + 2uS = 7uS goto $+1 ; + 2uS = 9uS goto $+1 ; + 2uS = 11uS goto $+1 ; + 2uS = 13uS bsf IRTX,PIN ; 1uS, LED=on goto $+1 ; + 2uS = 3uS goto $+1 ; + 2uS = 5uS goto $+1 ; + 2uS = 7uS goto $+1 ; + 2uS = 9uS nop ; + 1uS = 10uS decfsz _Cycles,f ; + 1uS = 11S goto _Pulse38 ; + 2uS = 13uS return ; Return to caller ENDASM ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR1_INT, _ClockCount, PBP, yes endm INT_CREATE ; Creates the interrupt processor INT_ENABLE TMR1_INT ; Enable Timer 1 Interrupts ENDASM OverASM: ' END of ASM routines contasec=0 tlflag=0 ' New timer GOSUB ResetTime ' Reset Time to 0d-00:00:00.00 GOSUB StartTimer ' Start the Elapsed Timer while boton = 1 ' Loops while the button is pressed if SecondsChanged = 1 then 'if the seconds changed flash the red led high led pause 50 'should blink once a second but it doesn't low led SecondsChanged = 0 ' set flag back to 0 endif tlflag=1 ' This flags lets me know if the timer was used wend contasec = Seconds + (Minutes * 60) ' Total time elapsed gosub StopTimer 'Loop del TimeLapse if tlflag = 1 then ' if the timer was used continue while boton = 0 sleep contasec ' sleep programmed time gosub trigger ' trigger high led ' red LED on pause 50 ' little pause low led ' red LED off wend ' Timelapse ended because the button was pushed for contasec = 1 to 15 ' flash red LED to let the user know high led pause 100 low led pause 100 next endif IOC.5 = 1 ' Int-on-change for GPIO.5 enabled GPIO = 0 Main: ' main Loop ASM SLEEP ; Sleep endasm while boton=0 ' wait for button push wend GPIF = 0 ' Clear port change interrupt flag while boton=1 ' shoot while pressed gosub trigger ' trigger high led ' blink red LED pause 50 low led wend GOTO Main Trigger: ' PENTAX pulse train Cycles = 255 CALL Pulse38 Cycles = 239 CALL Pulse38 pauseus 3000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 1000 cycles = 38 CALL Pulse38 pauseus 5000 ' end PENTAX pulse train return END ' Fin :)




Bookmarks