Banner with yellow background
Tuesday, 29. July 2008
Measuring Supply Voltage

I'm running my latest handheld computer on solar power. It starts up when the sun rises and runs all day. I started wondering how I could measure the voltage coming in from the solar panel. I came up with a way to use a diode and a resistor and the ADC, but I wondered if there was a way to skip the ADC input.

I could time charging a capacitor, but since I don't know the supply voltage I don't think that would work. More voltage means more current, so the capacitor charges faster. On the other hand, when the capacitor discharges the time is based on the actual voltage. As long as the discharge resistance doesn't change I should be able to time it and get a reasonably accurate voltage.

I rigged up a test circuit using the Arduino. It charges the capacitor (33 uF) to 5 volts when I turn on pin 4. I let the capacitor charge for 1 second, then discharge it and measure the time until pin 4 goes low. The main discharge capacitor is 100K ohms.

I wanted to see what lower voltages would do, so I added a second 100K resistor on pin 3. This formed a voltage divider with the discharge resistor, so the capacitor would only charge to 2.5 volts. The software to drive this is cool: I set the charge pin (3 or 4) to output and drive it high. After 1 second of charging I turn the pin back to input mode. That makes it high impedance (but not high enough relative to the 100K discharge resistor...). Then I set pin 4 low and time how long it takes to read back as low. I'm getting about 172 milliseconds for 5 volts and 70 seconds for 2.5 volts.

I'm not sure about the input impedance of the Mega8 chip. I added another wire to pin 5 so I could charge the capacitor to 5 volts without switching the sense pin (pin 4) back and forth from input to output. When I did this the time went down to 160 milliseconds. I figure that the leakage back into the chip was the cause. All the resistances are in parellel. This means each time you add a pin to the circuit the overall resistance goes down. Perhaps keeping the charge pins high will change things.

... Link

Creative Commons License (by-nd)

Creative Commons License

Blog entries licensed under a Creative Commons License.

8014 days of detection
mod: 12/3/08, 5:42 AM

days of detection

... PMOG
... ideas
... brain hurts
... weblo



Randall Bohn lives in Orem, Utah, USA. He works as a Software Quality Engineer. He is a big fan of the AVR line of microcontrollers. He has been in the computer industry since 1989. Randall is married and has three children.

rsbohn can be reached via

Youre not logged in ... Login DVD Shop
... home
... topics
... galleries

... home


July 2008
recent updates
Arduino Starter Kit
MAKE Blog How-to Tuesday posted a challenge: Optimize the sketch code for a pressure sensor bar graph. Here is my second attempt: int gate[] = {10, 20, 50, 100, 200, 32767}; void setup() {DDRB = 0b00111110;} void loop() { int dval = 0; int rval = analogRead(2); for (int x = 0; rval...
12/3/08, 5:42 AM
Measuring Supply Voltage
I'm running my latest handheld computer on solar power. It starts up when the sun rises and runs all day. I started wondering how I could measure the voltage coming in from the solar panel. I came up with a way to use a diode and a resistor and the...
7/29/08, 9:53 AM
Ten Pin ISP adapter
I've already built a six pin ISP adapter, but my Olmex cards use the ten pin ISP. I put a header on a scrap of perf board, added an LED for the heartbeat, and then connected the ten pin cable. Actually it is a fifteen pin cable, off a joystick...
7/16/08, 10:00 PM
Hello 5x7 Style
Wrote a new firmware for the 5x7 display. Now it scrolls out 'hello' over and over again. I'm running it on a solar panel, so it wakes up with the sun and runs all day long. When I built the LED matrix I put resistors on the five columns. I'm starting...
6/17/08, 12:48 PM
Provo, Utah
With a walkable downtown and access to two Universities, Provo Utah is a great location. I live next door in Orem. Kipplinger: Provo: Pristine Tech Mecca (Video) (Text)
6/2/08, 10:07 AM
Another release of AVRISP sketch
There is a new release of the AVRISP emulation sketch for Arduino: This one should work with Mega8 and Mega168. mega-isp
5/28/08, 4:48 PM
Sorting Out Page Sizes
There is a new release of AVRISP Emulation for Arduino. This is an Arduino firmware that allows you to program other AVR microcontrollers. The new zip file ( should compile on the current Arduino IDE, and I changed the comments that put the wrong labels on the SPI pins. Go ahead...
5/27/08, 11:31 AM
Flash Problems
I'm building a project using the AVR ATMega8 microcontroller. Once I got the thing wired up to where I could write firmware to it I found that it was always failing. I made a .hex file full of 0x10 values (256 bytes worth) and tried uploading that to the chip....
5/16/08, 2:56 PM
William's Arduino Board
I'm building an Arduino-compatible board for William. I'm building it on the Evil Mad Scientist MegaXX8 business card. It will have four built-in LEDs and a USB interface. It will also have connectors so he can use it with a breadboard. Perhaps we can connect it to some of his...
5/15/08, 7:26 AM
Cybord Signal Detector
Some digital radio signals use Frequency Shift Keying (FSK). This often has one frequency for a Mark and one for a Space. I plan to build a cybord or other chip that will decode an FSK signal, producing three different values: NO_SIGNAL, MARK, and SPACE. The signals would then go...
5/15/08, 7:20 AM


Listen to IT Conversations

Made with Antville

Quantum Touch

RSS Feed