Device = 18F4520
Clock = 8
// some LCD options...
#option LCD_DATA = PORTD.4
#option LCD_RS = PORTD.2
#option LCD_EN = PORTD.3
// uses LCD and AD libraries...
Include "LCD.bas"
Include "ADC.bas"
Include "convert.bas"
Include "InternalOscillator.bas"
Include "math.bas"
Dim ADVal As Word
Dim LED_g As PORTC.0
Dim LED_r As PORTC.1
Dim opti As PORTE.0
//Dim Vref, Vsensor As longWord
Dim Vref, Vsensor As Integer
//Dim tiptemp As Integer
// Read the AD port and scale for 0.00 - 5.00 volts...
Function REF_V() As Word
result = (ADC.Read(1)+1)*5000/1024 //1024 is divide by tip sensor
End Function
Function sensor() As Word
result = (ADC.Read(0)*1023)/ 5 *(81/1000)-45//1024 is divide by tip sensor 0.07 at RT .25 melt
//1024 is divide by temp ref desired
End Function
// Start Of Program...
Input(PORTA.0) // temp ref voltage desired temp
Input(PORTA.1) // tip sensor
Low (LED_g) //set lEDs OFF
Low (LED_r)
High(opti)
ADCON1 = %10000000 //set up ADC regesters
ADCON0.7 = 1
ADCON0.6 = 1
DelayMS (150)
LCD.Cls
// main program loop...
While true
// call function REF_V() and assign the result to word variable 'Vref'
Vref = REF_V() // desired temp
LCD.MoveCursor (1,1)
LCD.Write("REF_V = ", DecToStr(Vref/100), ".", DecToStr(Vref, 2), " ")
DelayMS(250)
// call function sensor() and assign the result to word variable 'Vsensor'
Vsensor = sensor() // tip sensor
LCD.MoveCursor (2,1)
LCD.Write("sensor = ", DecToStr(Vsensor/100), ".", DecToStr(Vref, 2), " ")
DelayMS(250)
// compare Vsensor and Vref values
If Vsensor < Vref Then // not hot enough
LED_r=1
LED_g=0
opti=0 // turn on opti couplier by going low
Else // Vsensor must be >= Vref, so desired temperature
LED_g=1
LED_r=0
opti=1 // turn off opti couplier by going high
End If
Wend