PDA

View Full Version : on interrupt help



cphillips82
- 25th April 2008, 11:38
can somebody tell me why my code keeps resetting please


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

Acetronics2
- 25th April 2008, 12:40
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

cphillips82
- 25th April 2008, 13:18
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??

cphillips82
- 25th April 2008, 15:29
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



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

mister_e
- 25th April 2008, 15:32
Must be INTCON.1=0

cphillips82
- 25th April 2008, 15:39
you are "THE MAN"
cheers

mister_e
- 25th April 2008, 15:44
: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 ;)

cphillips82
- 25th April 2008, 15:48
2.46 it doesnt seem to do it anymore but when it did i unchecked the wdt box on ic prog