Here is an example by Darrel Taylor for a voltage divider circuit. This makes it possible for a PIC to give an analog measurement for voltage that is more than 5v.
This example divides a 25 volt source into about 4.38 volts for the PIC's A/D converter to handle.
The ratio of the voltage divider is (R1+R2)/R2. To scale up the A/D reading you just multiply the value times the total resistance of the divider (R1+R2) then divide that number by R2.
If the input is 25Vdc then the output voltage will be 25v/((R1+R2)/R2) or 25v / ((4700+1000)/1000)) = about 4.38 Vdc. With 10-bit A/D you should get an ADCin of around 898. If you first scale that A/D value up to match the voltage divider ratio, you can then calculate the voltage the same way you would if you were reading 0-5 V.
898 * 5700 / 1000 = 5118 This is what the A/D would be if it could actually read 0-25 volts directly.
Now then, for 1 decimal place, multiply that by 50 and divide by 1023. For 2 decimal places, multiply by 500 instead.
5118 * 50 / 1023 = 250 or 25.0Vdc
The program below is one way to do it in PBP.
HTH, Darrel
Res1 Var Word Res2 Var Word Rt Var Word Volts Var Word AD Var Word GetReadings: ADCin 0, AD Res1 = 4700 ' Change these to match your Voltage divider Res2 = 1000 ' resistor values for the Solar Cell Gosub CalcVoltage LCDout $FE,2,"Solar= ",DEC Volts/10,".",DEC1 Volts Dig 0," Vdc" ADCin 1, AD Res1 = 2200 ' Change these to match your Voltage divider Res2 = 1000 ' resistor values for the Battery Gosub CalcVoltage LCDout $FE,$C0,"Batt = ",DEC Volts/10,".",DEC1 Volts Dig 0," Vdc" goto GetReadings CalcVoltage: Rt = Res1 + Res2 ' Total resistance of Voltage Divider Volts = AD * Rt ' Scale the AD reading accordingly Volts = DIV32 Res2 Volts = Volts * 50 ' Convert AD to Voltage Volts = DIV32 1023 Return
This article was originally published in forum thread: Using the A/D for Monitoring a Solor Cell and Battery started by chuck.sieveking