PIC Fuel Consumption Monitor. Updated Apr
2007 Back to my Home Page
Connect a fuel sensor (available from Radionics in Ireland www.radionics.ie,
stock code 256-225,) and the car's milometer/speedometer (outputs distance pulses)
output to a 16C84 PIC device. The Fuel rate, distance travelled per unit of
fuel used, time of journey, distance travelled, fuel used, fuel flow rate is
displayed on a Hitachi LM032 LCD display. Here are some photos
of the hardware. (updated Sep 2003). Here is the circuit
diagram (updated Sep 2003). Note that The PIC is clocked at 4MHz, the oscillator
componts have been ommitted from the circuit diagram.
The fuel units are in pulses from the fuel sensor. I noted approx 1000 pulses
= 1 liter. Distance units are in speedometer pulses. So if you want the display
to show Liters and Kilometers etc you will need to modify the software to accomodate
your particular fuel sensor and car speedometer. Use the divison routines in
the file dbl_divs.asm. Time is measured in seconds.
Notes on the circuit diagram:
Power is taken from the car's 12volt supply. It is then regulated to 5volt.
The speedometer pulses from you car are more than likely 0 to +12volt. D2 is
any small signal diode and prevents the +12 Volt pulses from bringing Port B
input B6 higher than 5volt.
The LCD display is a Hitachi LM032L. On initialisation the PIC software sets
the data mode to 4 bit (instead of 8) so that LCD data lines DB0 to DB3 are
D1 is any power diode rated at 1 Amp and prevents damage to the PIC etc if
the polarity is accidentally reveresed. Any 5V regulator will do, the current
consumption of the PIC/LCD/Fuel sensor is low.
For carburettor engines the fuel sensor is placed in the fuel line leading
to the carburettor fuel inlet. I have not tried it on a fuel injection car.
If you're not sure then seek the advice of a mechanic.
Port A3 can be connected to a seaker circuit. A beep is sounded whenever the
unit is powered up. As that's all it does you can leave out the speaker.
This project could of course be used in other areas: e.g. boats, central heating
etc. Anywhere situation where you want to measure fluid used and fluid flow
rate and fuel used per distance travelled. In a boat the fuel sensor can be
fitted as above and to get 'distance' pulses you can probably use the output
from the boat's distance meter e.g. Garmin Fishfinder depth guage can have a
speed sensor fitted and I'm sure the output if the speed sensor would also be
distance pulses to represent distance travelled over water.
PIC 16C84 Source files:
main.asm Main program. Initialises
everything and then falls into Main loop. Also handles interrupts
e.g. when the fuel sensor pulse occurs it causes an interrupt. The
fuel sensor interrupt calls a routine that increments a 16 bit
counter. Distance is counted the same way and the main loop divides
distance by fuel used and displays this on the LCD LM032 display.
The main loop looks like this:
- Call DisplayDistance ; Display cumulative
- Call DisplayFuel ; Display cumulative
- Call DisplayTime ; Display elapsed
- CallWPosCurs, MPGposn ; Position LCD
- Call PrintMPG ; Calculate and print MPG
- call HandleButtons ; Check/process any
- goto MainLoop
eelib.asm EEPROM routines. General purpose
routines to read, write, clear, increment EE ram locations in the
16C84 PIC device
lcd.asm & lcd.inc LCD Driver
- for Hitachi displays, supports 4 and 8 bit data path (by changing a flag setting).
Configurable for displays with different numbers of lines and number or characters
in a line. 4 bit data path is used in this application due to the limited I/O
of the PIC 16C84.
library.asm Library - Miscellaneous
routines. Wait timer routines. Speaker Toggle, Warble sound. Clear
dbl_divs.asm Double precision floating point division
- Modified version from Microchip library. The Microchip routines used fixed
ram locations for Denominator, Numerator, Result and remainder - so I modified
the routines so you can change these locations for better reuse of limited ram
macros.inc Miscellaneous macros
including: Move Hi nibble of W to Hi nibble of File and other nibble
manipulation routines, Load W register with literal and call
function, Move 16 bit files to 16 Destination file, Play tone with
specified frequency and duration.
messages.asm All messages for display are in this
source file for easy maintenance and/or translation into other languages.
p16cxx.inc Standard Header File, Version
2.04 Microchip Technology, Inc.
Note that the source files developed by Karl Grabe are in the public domain
but cannot be used for commercial purposes without permission.
You use the circuit, software, fuel sensor information and ideas presented
here at your own risk! Karl Grabe does not accept any responsibility for any
inconvenience, damage or personal injury caused by the information supplied
here. Ensure proper safety procedures are adhered to when working on your car
especially with fuel..