Hi Alec,
"I feel your pain" I drive a 62 Ford, try this:
Code:
'****************************************************************
'* Name : auto_heater_controller.pbp *
'* Author : Alec Noble *
'* Notice : Copyright (c) 2010 Alec Noble *
'* : All Rights Reserved *
'* Date : 1/18/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
;@ device pic16F628a
;@ device INTRC_OSC_NOCLKOUT
@ __config _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _BOREN_OFF & _PWRTE_ON & _WDT_ON & _DATA_CP_OFF & _CP_OFF & _LVP_OFF
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
CCP1CON = %00001100 ' Set CCP1 to PWM
'********************** 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
LED var byte[10] '10 bits - 1 for each led segment
LED0 var PortB.0
LED1 var PortB.1
LED2 var PortB.2
LED3 var PortB.4
LED4 var PortB.5
LED5 var PortB.6
LED6 var PortB.7
LED7 var PortA.0
LED8 var PortA.1
LED9 var PortA.2
'********************** create variables **********************
duty var byte 'variable for the dutycycle
counter var word 'variable to increment/decrement
led_chk var byte
pwr var bit 'on/off bit
preset con 183 'minimum pwm duty value for low
stp con 2 'duty cycle steps
'*********************** initialize variables *****************
pwr = 1
duty = 15
counter = 50
LED = 0
'porta.3 = 0
'porta.4 = 0
'*********************** program begins here ******************
'pause 1000
gosub adjust
main:
if up = 1 then gosub increment
if down = 1 then gosub decrement
'********** display ***************
led = 0
' pause 1000
lookdown2 duty, [93, 111, 129, 147, 165, 183, 201, 219, 237, 255], led_chk
lookup led_chk, [%0000000001, %0000000011, %0000000111, %0000001111, %0000011111, _
%0000111111, %0001111111, %0011111111, %0111111111, %1111111111], led
'Remmed out replaced above
' if led.0 = 1 then portb.0 = 1
' if led.1 = 1 then portb.1 = 1
' if led.2 = 1 then portb.2 = 1
' if led.3 = 1 then portb.4 = 1
' if led.4 = 1 then portb.5 = 1
' if led.5 = 1 then portb.6 = 1
' if led.6 = 1 then portb.7 = 1
' if led.7 = 1 then porta.0 = 1
' if led.8 = 1 then porta.1 = 1
' if led.9 = 1 then porta.2 = 1
pause 100
toggle porta.3 'heartbeat
goto main
end
increment:
portb.1 = 1
pause 5
counter = counter + stp 'if so, increment
if counter > 254 then counter = 254
portb.1 = 0
pause 5
goto adjust
decrement:
portb.2 = 1
pause 5
counter = counter - stp
if counter < 2 then counter = 2
Portb.2 = 0
pause 5
goto adjust
adjust:
duty = counter
'********** duty_set ************** duty = preset + counter
' if duty >=255 then duty = 255
'if pwr = 0 then duty = 0
hpwm 1, duty, 2000
'********** button_chk ***********
return
I used the lower b ports as indicators, you can change them back, as I am using a Microchip demo board. I scoped the output and it does what you want, i didn't fuddle much with your display except to remove some of my favorite pasta
too many if thens for me.
Bookmarks