
Originally Posted by
karenhornby
Can I pick someone's brain please?
I'm at the moment trying to make an auto switchover gadget to change from running on Diesel to Veg Oil once certain temperatures have been reached, and to try and work this out I'm using the easypic5 development board.
So far: I have a 16f877A programmed so it will switch certain outputs when certain inputs go high all and well
It even displays what it's doing on the LCD display
What I'd like to incorporate if its possible is this? or a variation of it the Bargraph but use it as a fuel level sensor, i.e. changing position depending on the level of the fuel in the tank (variable resistor)
Does anyone know any code that will do that or give me a starting place to play with?
I know I've got 2 A/D converter inputs on the developement board I can play with that have a 10K pot connected and are configured so I can change the input on either of the RA0, RA1, RA2, RA3, RA4, or RA5 pins and measure the voltage on them ( unfortunatly I'm only just learning about Pic's at the moment and know nothing about A/D and how to use it, I am learning by trying and experimenting But I am a quick learner), so IF anyone has any code they could share with me to show me how to get started with this I'd be grateful

Thanks
Here is my code for monitoring the sensors in a car. Note: this method is more accurate than ADCIN
Code:
'****************************************************************
'* Name : CarMonitor.PBP *
'* Author : Chris Bezuidenhout *
'* Notice : Copyright (c) 2007 Micro Developments *
'* : All Rights Reserved *
'* Date : 2007/10/23 *
'* Version : 1.1.1 *
'* URL :http://www.patenttrade.net *
'* : *
'****************************************************************
INCLUDE "Modedefs.Bas"
OSCCON = %01100000 'set the intrc osc change bit 4 to logic 1 for 8 MHz
OSCTUNE = %000000
DEFINE OSC 4 ' Set IRC Frequency
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 1 ' Set clock source (rc = 3)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
IgnIn var word
Altin var word
Oilin var word
TempIn var word
ResIn var word 'Reserve input
IgnOut var portb.0
AltOut var portb.1
OilOut var portb.2
TempOut var portb.3
Buzzer var portb.4
ComO var portb.5
SigOut var portb.6
sp2 var portb.7
Spin1 var porta.6
Spin2 var porta.7
X var byte
Y var byte
TRISA = %11111111 'Porta 0-4 all analog 5 input only pull high
TRISB = %00000000
ADCON0 = %11000001
Pause 2000 ' Wait .5 second
ADCON1 = %10000010 ' Set PORTA analog and RIGHT justify result
OPTION_REG = $7f ' Enable PORTB pullups
pause 500
portb = 0
low Buzzer
Main:
gosub CIgn
gosub CAlt
gosub COil
gosub CTemp
gosub Send
Ignition:
if ignin = 0 then
high Ignout
gosub Send
goto main
endif
if ignin > 300 then
low ignout
goto Alternator
endif
' if ignin > 0 and ignin < 300 then
for y = 1 to 3
gosub CIgn
gosub Send
if ignin > 300 then Alternator
for x = 1 to 2
high Ignout
high buzzer
pause 200
low buzzer
pause 200
next x
pause 1000
next y
' endif
Alternator:
if ignin = 0 then goto main
low ignout
if Altin > 1020 then
high altout '?????????Kalibreer
for y = 1 to 3
gosub CAlt
gosub Send
if altin < 1020 then Oil
for x = 1 to 4
high buzzer
pause 200
low buzzer
pause 200
next x
pause 1000
next y
endif
Oil:
if ignin = 0 then goto main
low altout
if Oilin > 10 then 'This variable have to be calibrated to sensor unit
high Oilout 'for a plain on/of it must be set to 0, the pot at minimum
for y = 1 to 3 'if there is some contact resistance it can be calibrated acordingly
gosub COil 'For a analog (resistive) sensor it have to be calibrated to
gosub Send 'the sensor
if oilin < 10 then Temperature 'So is this one
for x = 1 to 6
high buzzer
pause 200
low buzzer
pause 200
next x
pause 1000
next y
endif
Temperature:
if ignin = 0 then goto main
low Oilout
if tempin < 85 then
high tempout
for y = 1 to 3
gosub CTemp
gosub Send
if tempin > 85 then main
for x = 1 to 8
high buzzer
pause 200
low buzzer
pause 200
next x
pause 1000
next y
endif
low tempout
goto main
CIgn:
ADCON0 = %11000101 'start ADC A0
gosub notdone
IgnIn.highbyte = ADRESH
IgnIn.Lowbyte = ADRESL
write 0,ignin.highbyte
write 1,ignin.lowbyte
return
CAlt:
ADCON0 = %11001101 'start ADC A1
gosub notdone
altin.highbyte = ADRESH
altin.Lowbyte = ADRESL
write 2,Altin.highbyte
write 3,Altin.lowbyte
return
COil:
ADCON0 = %11010101 'start ADC A2
gosub notdone
oilin.highbyte = ADRESH
oilin.Lowbyte = ADRESL
write 4,oilin.highbyte
write 5,oilin.lowbyte
return
CTemp:
ADCON0 = %11011101 'start ADC A3
gosub notdone
TempIn.highbyte = ADRESH
TempIn.Lowbyte = ADRESL
write 6,tempin.highbyte
write 7,tempin.lowbyte
return
CRes:
ADCON0 = %11100101 'start ADC A4
gosub notdone
resin.highbyte = ADRESH
resin.Lowbyte = ADRESL
Return
Send:
serout SigOut, N2400,["A",IgnIn.highbyte,IgnIn.lowbyte,altin.highbyte,altin.lowbyte,Oilin.highbyte,Oilin.lowbyte,Tempin.highbyte,Tempin.lowbyte,resin.highbyte,resin.lowbyte]
return
notdone: Pause 5
If ADCON0.2 = 1 Then notdone' Wait for low on bit-2 of ADCON0, conversion finished
return
end
Bookmarks