-
on interrupt help
can somebody tell me why my code keeps resetting please
Code:
Define LCD_DREG PORTB
'Set starting data bit
Define LCD_DBIT 4 'rb4,rb5,rb6,rb7
'Set LCD RS Port
DEFINE LCD_RSREG portb
'Set LCD RS Bit
define LCD_RSBIT 3
'Set LCD Enable Port
Define LCD_EREG portb
'Set LCD Enable Bit
Define LCD_EBIT 2
'Set number of LCD Lines
Define LCD_LINES 2
'Set Command Delay time in uS
define LCD_COMMANUS 2000
'Set Data delay time in uS
define LCD_DATAUS 50
pause 100 'let lcd start
symbol fire = portb.1
symbol ac = portb.0
symbol up = porta.0
symbol down = porta.1
maxdelay var word
maxdelay = 8000
delay var word
delay = 0
trisa = %00000011
trisb = %00000001
lcdout 254,1, "BenjiTEMP"
lcdout 254,192, "Dimmer v1"
pause 1000
lcdout 254,1
on interrupt goto firetriac
intcon = %10010000
scan:
if up = 1 then
delay = delay + 2
if delay > maxdelay then
delay = maxdelay
endif
endif
if down = 1 then
delay = delay - 2
if delay < 2 then
delay = 2
endif
endif
goto scan
firetriac:
pauseus maxdelay - delay
fire = 1
pauseus 10
fire = 0
INTCON.1=0
resume
enable
-
Hi,
DISABLE before the interrupt stubb could be the first good idea ...
a look at OPTION_REG.6 could be a good idea too ( value depends on your zero crossing method ...)
by the way , processor ?= 16F84a ???
Alain
-
yep a 16f84. thanks for your help, i got portb.1 through a resister strait to a rectifier so I guess OPTION_REG.6 = 0 for a negative edge??
-
found the problem, it was the watchdog but now i can get the interupt to trigger properly.
it seems like once the interrupt is triggered it just keeps triggering? even if I strap it to ground while running? strange
Code:
on interrupt goto firetriac
intcon = %10010000
scan:
fire = 0
if up = 1 then
delay = delay + 100
if delay > maxdelay then
delay = maxdelay
endif
lcdout 254,1, dec delay
endif
if down = 1 then
delay = delay - 100
if delay < 100 then
delay = 100
endif
lcdout 254,1, dec delay
endif
goto scan
disable
firetriac:
pauseus maxdelay - delay
fire = 1
pauseus 10
fire = 0
intcon.0 = 0
resume
enable
-
-
-
:o well... your first code was right :o but i noticed the INTCON change between your 2 version, then i looked into the datasheet to confirm it could be the problem.. seems yes.
Out of curiosity, which version of the compiler are you using? The Watch-Dog reset sounds weird to me as the compiler should handle it for you... unless you ask to not doing it with a DEFINE.
I could also bet on a hardware problem... but i don't see any schematic... bah... since it's working now ;)
-
2.46 it doesnt seem to do it anymore but when it did i unchecked the wdt box on ic prog