@ DEVICE PIC12F683,MCLR_OFF,INTRC_OSC_NOCLKOUT,WDT_OFF,BOD_OFF
@ DEVICE PWRT_ON,FCMEN_OFF,IESO_OFF,PROTECT_ON
GrnLED CON 0 ' Green LED
RedLED CON 1 ' Red LED
Sample VAR WORD
Vin VAR WORD ' Input voltage on Pin 3
LCD CON 5 ' 4-Line serial LCD on pin 2 for debugging
pause 300 ' Let LCD initialize
DEFINE OSC 8
DEFINE ADC_BITS 10 ' Use 10-bit A/D
Define ADC_CLOCK 3 ' Set clock source (3=rc)
Define ADC_SAMPLEUS 50 ' Set sampling time in uS
DISABLE INTERRUPT ' Disable interrupts
ADCON0.0 = 1 ' Turn On A/D
ADCON0.2 = 1 ' A/D channel 3
ADCON0.3 = 1 ' ?
ADCON0.6 = 0 ' VDD is voltage reference
ADCON0.7 = 1 ' Right Justify result
ANSEL = %00111000 ' Set AN3 analog, rest digital
CMCON0 = 7 ' Analog comparators off
'GPIO port pins 0, 1 as outputs
TRISIO.0 = 0
TRISIO.1 = 0
TRISIO.5 = 0 ' LCD
SEROUT LCD, 2400, [$FE, 1] ' Clear LCD
pause 100
start:
ADCON0.1 = 1 ' Start conversion
while ADCON0.1 = 1 ' Wait for conversion
Pauseus 100
wend
sample.highbyte = ADRESH 'Write conversion result
Sample.lowbyte = ADRESL
PAUSE 10
'Display results
if sample < 573 then ' < 12v
LOW GrnLED
HIGH RedLED
endif
if sample > 572 AND sample < 600 then ' 12V TO 12.6V
HIGH GrnLED
HIGH RedLED
endif
if sample > 599 AND sample < 695 then ' 12.6 TO 14.6
HIGH GrnLED
LOW RedLED
endif
if sample > 694 then ' > 14.6v
LOW GrnLED
TOGGLE RedLED
endif
Pause 100
LET Vin = sample * 5 / 1023
display:
SEROUT LCD, 2400, [$FE, 2]
serout LCD, 2400, ["Sample = "]
serout LCD, 2400, [#Sample]
SEROUT LCD, 2400, [$FE, $C0]
serout LCD, 2400, ["Vin = "]
serout LCD, 2400, [#Vin]
Pause 100
goto start