Well, I got it working the essentially the way I wanted it to.
Holding the up button for a few seconds turns the power on, holding the down button turns the power off.
Thanks for the help and links for guidance.
BTW - how do I insert code neatly in a window?
'************************************************* ***************
'* Name : auto_heater_controller_rev1.pbp *
'* Author : Alec Noble *
'* Notice : Copyright (c) 2010 Alec Noble *
'* : All Rights Reserved *
'* Date : 1/25/2010 *
'* Version : 2.0 *
'* Notes : Modified with input from Joe S on PicBasicPro forum
'* : *
'************************************************* ***************
@ device pic16F628a
@ device INTRC_OSC_NOCLKOUT
DEFINE OSC 4
CMCON = 7 'port a digital i/o
VRCON = 0 'a/d voltage refernce disabled
PortB = 0 'initialize all portB logic low
TRISB = %00000000 'port b all outputs
PortA = 0 'Initialize all outputs as low
TRISA = %11000000 'a.7, a.6 inputs, all else output
'********************** aliasing I/O ****************************
up var porta.6 'up or increment button input
down var porta.7 'down or drcrement button input
heat var portb.3 'heater PWM output
tx var porta.4 'serial output pin for debuggin LCD
'********************** create variables **********************
LED var word '10 bits - 1 for each led segment
duty var word 'variable for the dutycycle
counter var word 'variable to increment/decrement
led_chk var byte 'variable for lookdown/lookup
pwr var bit 'on/off bit
counter1 var word 'counter for on/off check
preset con 93 'minimum pwm duty value for low
stp con 18 'duty cycle steps
'*********************** initialize variables *****************
pwr = 0
duty = 0
counter = 0
counter1= 0
LED = 0
led_chk = 0
'*********************** initialize serial LCD for debugging ****
pause 1000
serout2 tx, 396, [22, 17, 12]
pause 250
'*********************** program begins here ******************
main:
if up = 1 then increment
if down = 1 then decrement
'************************* display ***************
lookdown duty, [0,93, 111, 129, 147, 165, 183, 201, 219, 237, 255], led_chk
lookup2 led_chk, [%0000000000,%0000000001, %0000000011, %0000000111, %0000001111, %0000011111, _
%0000111111, %0001111111, %0011111111, %0111111111, %1111111111], LED
portb.0 = led.0
portb.1 = led.1
portb.2 = led.2
portb.4 = led.3
portb.5 = LED.4
portb.6 = LED.5
portb.7 = LED.6
porta.0 = LED.7
porta.1 = LED.8
porta.2 = LED.9
pause 100
toggle porta.3 'heartbeat
LCD_output: 'LCD output for debugging
serout2 tx, 396, [128, dec3 duty, " ", dec1 led_chk, " ", dec LED]
pause 5
goto main
end
increment:
pause 20 'debounce input
if up = 0 then main
while up = 1 'wait for button to be released
pause 5
counter1 = counter1 + 1
if counter1 > 250 then jump1 'if held long enough turn on
wend
counter = counter + 1 'increment PWM counter
if counter > 9 then counter = 9 'set maximum PWM counter
jump1:
pwr = 1 'turn on
counter1 = 0 'resete pwr counter to 0
goto adjust
decrement:
pause 20
if down = 0 then main 'debounce
while down = 1 'wait for button to be released
pause 5
counter1 = counter1 + 1
if counter1 > 250 then jump2 'if held long enough turn off
wend
counter = counter - 1 'decrement PWM counter
if counter < 2 then counter = 1 'set mimimum PWM counter
counter1 = 0 'reset on/off counter
goto adjust
jump2:
pwr = 0 'turn off
counter1 = 0 'reset on/off counter
goto adjust
'************************* PWM set ***********************************
adjust:
duty = preset + (counter * 18)
if duty >=254 then duty = 254 'set maximum PWM
if pwr = 0 then duty = 0 'if power off set PWM to 0
hpwm 1, duty, 20000
goto main 'do it again
Bookmarks