> > * Improved battery status reporting on 3800
> > * Random 3800 features:
> > - thermal sensor reading
> Where, how do we get to this? Is it the battery temp sensor?
Yes, the thermal sensor is the battery temperature. You can read it
from /proc/hal/thermal or via an ioctl().
> > - blinking green LEDs
> Where, what do they mean?
The iPAQ has three colored LEDS: blue, green, and yellow. The blue LED
is internally controlled by the Bluetooth device. The yellow LED is
controlled by the battery charger. The green LED is available for
public use. The easiest way is the user-mode program "led" (part of
h3600-utils).
> I just performed the battery calibration, with the ipaq in NO
> sleeve, and at
> the start of the calibration I saw this in /proc/asic/battery
> Battery Monitor
> Voltage : 3618 mV
> Active current : -240 mA
> Accumulated current : 843 mAh
> Temperature : 24.375 deg C
> Local calculations
> Local TAD : 300
> Last ACR update value : 3405
> Is learning? : no
> DS2760 updates : 39
> Full level : 1427 mAh
> Derated full level : 1427 mAh
> Empty level : 19 mAh
> Percentage : 58
> Lifetime : 206 min
> Looks good. Then I suspended the ipaq on the charger, and
> after a while the
> yellow light went solid, and I got this:
>
> Battery Monitor
> Voltage : 9995 mV
> Active current : 0 mA
> Accumulated current : 725 mAh
> Temperature : 28.375 deg C
> Local calculations
> Local TAD : 300
> Last ACR update value : 2902
> Is learning? : no
> DS2760 updates : 601
> Full level : 725 mAh
> Derated full level : 725 mAh
> Empty level : 14 mAh
> Percentage : 100
> Lifetime : -1 min
>
> In the meantime, I DID see the asic_learning message, and the
> asic done
> learning message. So the question is, where is the other
> 700mAh of capacity?
Try this experiment: Set up a script to read the battery level once
every 5 or 10 seconds. I usually read /proc/asic/battery and extract
active current, accumulated current, and percentage. Now unplug your
iPAQ and let it run the battery out. If you battery has been correctly
calibrated, you should see a linear decrease in percentage from 100% to
around 0%, followed by failure. If you see a non-linear decrease or if
your iPAQ doesn't die somewhere near 0%, then you have a calibration
failure.
Now charge your battery. You should see a linear rise in battery charge
percentage up to about 90-95%, followed by a much slower rise to 100%
(this is called the "knee" - the last 10% of LiPolymer is very slow).
If your battery goes to much higher or lower than 100% before finishing,
then you have a mis-calibrated battery.
Assuming that everything runs correctly, then where is the other 700
mAh?
Two possibilities:
1. Your battery monitor chip is measuring discharge incorrectly. When
I run tests I set my screen brightness to maximum, leave the screen
enabled, and run a few python scripts that calculate lots of prime
numbers. I see active current numbers on the order of -350 to -390 mA
under these conditions. If I have a sleeve with a battery in it, that
number will drop a bit because some current is coming from the sleeve.
2. Your battery is only good for 700 mAh. This can happen. As
batteries age, they lose ability to store current. Aging happens faster
when the iPAQ gets too cold, too hot, or is dropped in water. If you're
iPAQ is "well used", your best bet may be to send it out for a new
battery. If your iPAQ is relatively new, talk with HP service and tell
them you have a bad battery
Here's a Python script that can be used to watch your battery charge and
discharge:
#!/usr/bin/python
import sys
from time import time, sleep
def do_header():
f=open('/proc/bus/sleeve/device')
result='none'
for line in f.readlines():
line = line.strip()
elements=line.split('=')
if elements[0] == 'driver':
result = elements[1]
print 'driver=%s' % result
f.close()
plist=('Percentage', 'Voltage', 'Active current', 'Accumulated current',
'Temperature')
def readbat():
f=open('/proc/asic/battery','r')
mydict = {}
for line in f.readlines():
line = line.strip()
elements=line.split(':')
if len(elements) > 1:
mydict[elements[0].strip()] = elements[1].strip()
for i in plist:
print mydict[i].split()[0],',',
f.close()
print
do_header()
print 'Time,', ",".join(plist)
start_time=time()
while 1:
print int(time() - start_time),",",
readbat()
sys.stdout.flush()
sleep(5)
Received on Tue Sep 24 2002 - 20:18:11 EDT
This archive was generated by hypermail 2.2.0 : Mon Jul 25 2005 - 18:33:20 EDT