Car clock, temperature and voltmeter
1.
Introduction
This device was designed to replace the original
digital clock in a Fiat Ducato 1992-1994, mounted just above the inside
rearview mirror. The original clock is not very accurate, only displays time
and is sensitive to interference (e.g. from Xenon headlights). The replacement
device described here does not have these disadvantages, and on top of that
also displays the temperature and the car’s battery voltage. It works on the
car battery and uses the Microchip MCP9800 as a temperature sensor.
This circuit is based around the PIC16F1937 microcontroller.
This chip is actually a small computer contained in a single chip, including
RAM memory, EEPROM, I/O ports, CPU and
so on. When you buy this chip, it comes empty with no program on it. You have
to compile the source code and download the resulting machine code into it, using a PC and a small
programmer attached to the PC and the chip. To get yourself familiar with this
stuff, I suggest you first read this link: Getting started with microcontrollers.
2.
Description
The LCD display used in this design is the Varitronix
VIM-404 (Digikey ordernbr: 153-1047-ND), which is a 0.5” multiplexed 4 digits
7-segment transflective display. It is driven by the PIC16F1937 microcontroller
which has a built-in LCD driver.
The LCD is lit by a LED backlight unit (4.1V): Digikey
ordernbr. 153-1026-ND.
The design is based on Microchip’s
F1 evaluation board. The original PIC16LF1937 was replaced by the
PIC16F1937 to be able to operate at 5 volts (in stead of 3.3 volts) to have a
better contrast on the used LCD display.
3.
Usage
The device is operated with a single pushbutton.
When powered, time is displayed. Press the button to
change the display to temperature, press again to switch to voltage.
Setting the time is done using a unique one-button
user interface:
- First
set the hours. Press and hold the button, the units of the minutes will
increase until reached 0, then the tens of minutes will increase until reached
0, then the hours will increase. Release the button when the hours are correct.
- Then
set the tens of minutes. Press and hold the button, the units of the minutes
will increase until reached 0, then the tens of minutes will increase. Release
the button when the tens of minutes are correct.
- Then
set the units of minutes. Press and hold the button, the units of the minutes
will increase. Release the button when the units of minutes are correct.
4.
Connection
It is advised to use two 4-pin connector to connect
the device to the car. I made them myself from standard headers:
5.
Schematic
diagram
6.
Explanation of the schematic
diagram
(Refer to the schematic diagram).
12V power coming from contact or light switch must be
connected to PAD8. This is for the backlight, it will be on when the engine is
running or when the light is on, by means of IC4 (LM317) which is configured
for 4.1V (R3-R5).
12V continuous power must be connected to PAD6. This
is converted down to 5V by means of IC2, a very efficient power regulator by
Microchip (the MCP1790) which provides the power for the PIC, the LCD and the
temp sensor.
Three common lines and a lot of segment lines are
connected between the LCD display and the PIC’s LCD driver.
The digital temperature sensor is connected to the
clock and data lines of the PIC’s I2C bus.
A common 32768 Hz crystal is connected to the PIC’s
oscillator pins, this is used as the time base for the clock.
R1 and R2 are a voltage divider to measure the battery
voltage. It is connected to an analog input of the PIC.
7.
The
printed circuit board
The pcb is designed for smd components.
It is double sided and designed with Eagle (from Cadsoft).
The LCD display, the only non-SMD component, has long
pins and therefore can be mounted on top of the microcontroller, thus saving
space.
The LED backlight unit fits between the LCD display
and the PCB/PIC.
PDF file (top, mirrored) to print on a transparent: Print-layout
PDF file (bottom) to print on a transparent: Print-layout
Link to Eagle file brd file containing the PCB..
8.
The final device
Below some pictures of the final device.
The original device compared with the new one:
Device showing time, notice the special “font” showing
6 and 9 like in professional displays:
The device built in the mirror console of the Fiat
Ducato:
9.
Tips and tricks
- The
backlight unit can get a little bit warm and this may mislead the temperature
sensor. It is better to mount the sensor off the PCB and connect it with 4
wires.
- In
my motorhome the backlight goes on when either the contact is on or the light
is on. This is achieved with two diodes on both lines from contact and from
light to PAD8.
- Clock
accuracy: the time keeping is done using timer1, operated by a 32768 Hz quartz
crystal. Normally, the timer causes an interrupt every 2 seconds, but since we
set the TMR1 value to about 8000h, this is reduced to once a second. You can
play with the 8000h value: increasing it to e.g. 8001h will make the clock run
a bit faster, decreasing it will make it run slower. You can even use non
integer values, e.g. 8000.5h by incrementing every x interrupts. Using long
observation times for the accuracy, you can get the right value for TMR1,
resulting in a very high accuracy clock.
10.
Programming
The software is written in C (Hi-tech
C supporting Microchip). It uses power saving techniques such as Sleep()
and wake up from sleep after timer1 overflow.
For programming you need the Microchip
MPLAB IDE (free to download) and a PICkit3 compatible programmer. You also
need the Hi-tech C compiler (the lite version, free to download, will do).
Zip file containing all source code, header files and
project files: Link to MPLAB project.
The project file to open is called CarClockTempVoltMeter_5V.mcp, the workspace
file is LCD_CarClockTempVoltMeter_5V.mcw.
Connection to a PIC programmer.
The connector marked “M+-DC” should be connected
(during programming) to the PICkit3 programmer (M corresponds to the white
arrow on the PICkit3).
Home Back to Electronic
Projects