Hello all,
I am new to the pic world as you can probably see from my code below, I have all of the code working except for the creating a changeable setpoint.
I am at my wits end with trying to figure this out, something tells me its a simple problem but my lack coding experience cant figure it out.
All help would be apreciated
Aslo please comment on my coding or lack of, if there is a way to make this code more efficient please let me know
'************************************************* ***************
'* Name : 2LM34_LCD.BAS *
'* Author : tump *
'* Date : 10/30/2007 *
'* Version : 1.00 *
'* Notes : 8-bit A/D temperature conversion with National *
'* ; LM34CAZ analog temperature sensor. *
'* : 2 sensor input *
'* : When sensor 0 is higher than sensor 1 *
'* : Fire PortC.2 *
'* written for easy pic4 development board *
'************************************************* ***************
@ DEVICE PIC16F877A,HS_OSC
DEFINE debug_mode 0 ' Debug sending True serial data
DEFINE debug_reg portc ' Debug Port = PortC
DEFINE debug_bit 6 ' Debug.bit = PortC.6
DEFINE debug_baud 9600 ' Default baud rate = 9600
DEFINE osc 8 ' We're using a X MHz oscillator
DEFINE ADC_BITS 8 ' Set A/D for 8-bit operation
DEFINE ADC_CLOCK 3 ' Set A/D clock r/c
DEFINE ADC_SAMPLEUS 50 ' Set A/D sampling time @ 50 uS
Define LCD_DREG PORTD ' Define LCD pins
Define LCD_DBIT 4 'use upper 4 bits d4-d7
Define LCD_RSREG PORTD
Define LCD_RSBIT 2
Define LCD_EREG PORTD
Define LCD_EBIT 3
DEFINE LCD_LINES 2
Define LCD_COMMANDUS 2000 ' Command Delay (uS)
Define LCD_DATAUS 50 ' Data Delay (uS)
Fan VAR PortC.2
Idle Var PortC.3
Incr VAR portc.4 ' Increment button
Setup VAR portc.5 ' SetUp button
Season VAR PORTB.1 ' 1=summer 0=winter
AtticSamples VAR WORD ' Multiple A/D sample accumulator
AtticSample VAR BYTE ' Holds number of samples to take
GarageSamples VAR WORD ' Multiple A/D sample accumulator
GarageSample VAR BYTE ' Holds number of samples to take
AtticTemp VAR BYTE ' Attic Temperature storage
GarageTemp VAR Byte ' Garage Temperature Storage
Hysterisis VAR BYTE ' Hysterisis
SetPoint VAR BYTE ' Temperature Setpoint
SetPoint = 70
AtticSamples = 0 ' Clear samples accumulator on power-up
GarageSamples = 0 ' Clear samples accumulator on power-up
Hysterisis = 2
TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %00000011 ' Set PORTA.0,1,2,5 = A/D, PortA.3 = +Vref
TRISC.2 = 0
PAUSE 500 ' Wait .5 second
powerup:
pause 500
DEBUG "P",10,13
LCDOUT $fe, 1, "Heat Circulator"
LCDOUT $fe, $C0, " By Tump"
DEBUG "PowerUp",10,13
loop:
if Setup = 1 then
pause 200
goto SetSetPoint
endif
Toggle Idle
FOR Atticsample = 1 TO 20 ' Take 20 samples
ADCIN 0, AtticTemp ' Read channel 0 into AtticTemp variable
Atticsamples = Atticsamples + Attictemp ' Accumulate 20 samples
PAUSE 250 ' Wait approximately 1/4 seconds per loop
Toggle Idle
NEXT Atticsample
Attictemp = Atticsamples/20
Toggle Idle
FOR Garagesample = 1 TO 20 ' Take 20 samples
ADCIN 1, Garagetemp ' Read channel 1 into GarageTemp variable
Garagesamples = Garagesamples + Garagetemp ' Accumulate 20 samples
PAUSE 250 ' Wait approximately 1/4 seconds per loop
Toggle Idle
NEXT Garagesample
Garagetemp = Garagesamples/20
Toggle Idle
Pause 100 ' Do it about 10 times a second
; If Garagetemp >= 70 then GOSUB TempOK
If Season=0 THEN goSUB Winter
If SEASON=1 THEN goSUb Summer
TempOK:
'************************************************* ****************************
'** If temperature in garage is greater than or equal to SetPoint turn off ***
'** circulator fan ***
'************************************************* ****************************
LCDOUT $fe, 1, "CirculatorOff ", #AtticTemp,"F" ' Send to LCD Line 1
Lcdout $fe, $C0, "GarageTemp >= 70", #GarageTemp,"F" 'Send to LCD Line 2
Fan = 0
DEBUG "OK,","G",#GarageTemp,".","A",#AtticTemp,10,13
Atticsamples = 0 ' Clear old sample accumulator
Garagesamples = 0 ' Clear old sample accumulator
pause 500
goto loop
Winter:
' if attic temp is greater than garage temp turn on ciculator fan
If GarageTemp >= SetPoint then
goto TempOK
ENDIF
If AtticTemp > GarageTemp + Hysterisis Then
Fan = 1
Else
Fan = 0 'Turn OFF Fan Output
endif
GOTO Messages ' Do it forever
Summer:
' if attic temp is less than garage temp turn on circulator fan
If GarageTemp > SetPoint then
goto TempOK
ENDIF
If AtticTemp + Hysterisis < GarageTemp Then
Fan = 1
Else
Fan = 0
endif
GOTO Messages ' Do it forever
SetSetPoint:
if Incr = 1 then 'change the setpoint
pause 100
SetPoint=SetPoint+1
if Setpoint>80 then SetPoint=60 'Allow setpoint from 60 to 80
LCDOut $FE,1, "Setpoint at", #SetPoint, "F"
endif
Messages:
LCDOUT $fe, 1, "Attic=", #AtticTemp,"F", " ",#Season ' Send to LCD Line 1
Lcdout $fe, $C0, "Garage=", #GarageTemp,"F", " ",#Fan 'Send to LCD Line 2
DEBUG DEC AtticTemp,",", DEC GarageTemp,",",#fan,",",#Season,10,13
Atticsamples = 0 ' Clear old sample accumulator
Garagesamples = 0 ' Clear old sample accumulator
GOTO Loop
END
Bookmarks