The basic input range is from 0V to 5V.
|Voltage range||0V - 5V|
|Input signal level||TTL|
|Maximum input impedance||2k5|
The LCD volt meter uses the microcontroller power supplies as reference voltages and so it is not likely to be very accurate (e.g. a 7805 5V regulator has an accuracy of 4%).
To improve accuracy add a voltage reference and feed the reference voltage to the Vref input on the PIC which is into RA3 ( change the control register values in the ADC to use the Vref). This project simply provides a quick and easy way of measuring volts without circuit complexity.
The project mainly shows how to control and setup the software to read an analogue value from the first analogue port RA0.
Note when designing using the analogue inputs its a good idea to start from AN0 as there is only a limited set of ways that more analogue ports can be selected for use (see the chip data sheet - analogue inputs).
|Compiler||Mikroelectronika MikroC Compiler Free!|
|Target||16F877A (retargetable to other PICs that have Analogue input AN0).|
|Software notes||Using fixed point long instead of floating point.|
|Hardware notes||LCD will work with LVP (if PGM pin is pulled high).|
your details to get the Download Link
and get the microcontroller newsletter:
Please Enter your Details in one of
the forms at the top or Bottom of
this page to get the Free Source code
(Note: Your email is safe it will never
be sold or rented).
You can use any PIC microcontroller that has an ADC and enough memory to hold the program.
The LED is pulsed after every ADC acquisition to indicate that the processor is alive - so you can tell if the software is active.
You can program the PIC in circuit through the ICSP connector.
Compiler project files:
C Source files:
For a tutorial on compiling these lcd volt meter files click here.
You can recompile the lcd volt meter files if you want examine code operation (using the built in simulator) or change the source code. Note the hex file is contained in the download.
The code is simple showing how to set up the ADC using direct control (it does not use built in routines) so that the code can easily be ported to other compilers.
It enters a continuous loop collecting ADC samples and displaying them on the LCD.
The only complexity is that the code uses fixed point maths so that it avoids using floating point variables (saving memory space). Long variables are used to scale the output result. This statement
lng = (ADC_ip * 5000L) >> 10;
Scales the ADC input value to 5000 and then divides by 1024. The output is a number between 0 and 5000. e.g. for a 2.5V input voltage the ADC will read 512. 512 * 5000 is 2560000 Dividing by 1024 gives 2500. So using the fixed decimal point between the 2 and the 5 gives the final result displaying "2.500"
The code converts the 10bit ADC number into a displayable voltage reading.
Note: The circuit does not feed in an accurate voltage to Vref+ so the accuracy of the reading is only as good as the power supply voltage regulator (not shown on circuit diagram) - this will usually be a 7805 standard 5V regulator. This has an accuracy of 5% so the displayed output will be wrong by 5%. If you want to calibrate the output to get a more realistic a reading you can set the scale factor in the software to match the 7805 output voltage value.
All you do is use a multimeter to measure the power supply (mine read 4.91V) then instead of the 'ideal' scale factor of 50000L change it to match the multimeter reading e.g. for 4.91V use the statement
lng = (ADC_ip * 49100L) >> 10
This scales the maximum ADC output to 4.91 (The maximum reference value) and displayed readings will now match the multimeter readings. For production use this is not a good idea and you would be better off adding a voltage reference.
This design provides a quick and easy way to measure voltage with minimal components but for better accuracy use a voltage reference.
Note: To smooth the input signal use a capacitor e.g.. 100nF or use software averaging in the code.
Jump from lcd volt meter page
to Best Microcontroller Projects Home Page.
How to make a Pulse Rate Sensor using a simple single opamp circuit with an Arduino and a few other components.
74HC595 : How to add nearly unlimited outputs to any microcontoller.
How to use the MAX6675 and an Arduino to measure temperatures from 0°C to 1024°C with two components: A chip - the MAX6675, and a Sensor: - a type-K thermocouple.