Conrad Charge Manager 2010

Protocol overview


Transfer settings: 9600 baud, 8 Data bits, no parity, 1 Stopbit
Connection via Null modem cable.

The CM2010 always sends info about the condition of each slot. The delay between 2 infos about the same slot is 1 second.

It seems you can't send commands to the CM2010 because the circuit plan from www.conrad.de (512265-in-01-de-charge_manager_2010_schnittstellenb.pdf) shows no input for the charging controller.

All values about a slot are sent in 34 Bytes. There are 4 Packets of 34 Bytes each.

All values are in Big-Endian (Big-End-First; 65536 = 01 00 00; 256 = 01 00)


Bytes Meaning
----- ----------------------
01    Slot (1-4)

02    ??? Chosen Program; Lo: Display state (Details: see below)
03    Hi: manually chosen capacity; Lo: current step in program (Details: see below)

04    ???

05    Internal counter/timer, counts back the 3 seconds after insertion of battery, where you have time to change settings. Otherwise it counts back from 60d and increases minute when 00.
06    Hours
07    Minutes

08    ???

09-10 Voltage (U) - only when charging, otherwise 00 00. Perhaps max. current for Delta-U-shut-off.

11    ??? (perhaps approx. charge of battery?)
12    ???
13    ???

14-15 Current (I)
16-17 Voltage (U)
18-20 Charged capacity (CCap)
21-23 Discharged capacity (DCap)

24    0Bh, if not charging, otherwise something else

25-26 Fourth last voltage
27-28 Third last voltage
29-30 Second last voltage
31-32 Last voltage
33-34 Resistance in slot (5MOhm = 01 F4; no battery: FF FF)


Bytes 02 and 03:

02 03 04
-- -- --
00 00 00 No program, Slot empty

01 00 00 Choice: Auto/Man: Auto
02 00 00 Choice: Auto/Man: Manual
(Counter in Byte 5 counts from 03 to 00 and then switches to next choice)

02 10 00 Choice: Man: 100-200
02 20 00 Choice: Man: 200-350
02 30 00 Choice: Man: 350-600
02 40 00 Choice: Man: 600-900
02 50 00 Choice: Man: 900-1200
02 60 00 Choice: Man: 1200-1500
02 70 00 Choice: Man: 1500-2200
02 80 00 Choice: Man: 2200-...
(Counter in Byte 5 counts from 03 to 00 and then switches to next choice/runs program)

03 xx 00 Choice: Auto: CHARGE
04 xx 00 Choice: Auto: DISCHARGE
05 xx 00 Choice: Auto: CHECK
06 xx 00 Choice: Auto: CYCLE
07 xx 00 Choice: Auto: ALIVE
(xx - 00:Auto, 10-80:Man)
(Counter in Byte 5 counts from 03 to 00 and then runs the program)

08 05 01 Auto: CHA (Charges)

09 06 00 Auto: DIS (Discharges)
09 26 08 Man: 200-350: DIS (Discharges)

0a 04 01 Auto: CHK (Discharges)
0a 24 08 Man: 200-350: CHK (Discharges)

0b 03 01 Auto: CYC (Charges)
0b 04 01 Auto: CYC (Discharges)
0b 05 04 Auto: CYC (Charges after Discharging)

0c 01 01 Auto: ALV (Charges)
0c 02 01 Auto: ALV (Discharges)
0c 02 03 Auto: ALV (still Discharges)
0c 02 04 Auto: ALV (still still Discharges)
0c 02 08 Auto: ALV (Discharges after Charging)
0c 03 01 Auto: ALV (Charges after Discharging)
0c 03 02 Auto: ALV (Charges after Discharging immer immer noch)
0c 03 03 Auto: ALV (Charges after Discharging immer noch)
0c 04 01 Auto: ALV (Discharges after Charging)
0c 04 03 Auto: ALV (Discharges after Charging after Discharging)
0c 04 08 Auto: ALV (Discharges after Charging after Discharging)
0c 05 01 Auto: ALV (Charges after Discharging after Charging after Discharging)
0c 05 02 Auto: ALV (Charges after Discharging after Charging after Discharging)
0c 05 04 Auto: ALV (Charges after Discharging)
0c 42 06 Man: 600-900: ALV (Discharges after Charging)
0c 44 06 Man: 600-900: ALV (Discharges after Charging after Discharging after Charging)

0d 08 01 Auto: CYC (RDY/Fertig)
0d 08 02 Auto: CHA (RDY/Fertig)
0d 08 03 Auto: ALV (RDY/Fertig)
0d 08 04 Auto: ALV (RDY/Fertig)
0d 48 04 Man: 600-900: ALV (RDY/Fertig)

0e 0c xx ERR

1b 03 01 Auto: CYC (Charges immer noch)

4c 03 03 Auto: ALV (Charges immer immer noch)
4c 05 04 Auto: ALV (Charges after Discharging after Charging after Discharging after Charging)

58 25 02 Man: 200-350: CHA (Charges)

5b 23 02 Man: 200-350: CYC (Charges)

5c 21 02 Man: 200-350: ALV (Charges)
5c 41 04 Man: 600-900: ALV (Charges)
5c 43 04 Man: 600-900: ALV (Charges after Discharging)
5c 45 04 Man: 600-900: ALV (Charges (last phase))

6b 03 03 Auto: CYC (still still still still Charges)

6c 03 03 Auto: ALV (Charges after Discharging)
6c 05 04 Auto: ALV (Charges after Discharging after Charging after Discharging after Charging)

cb 03 04 Auto: CYC (still Charges)

db 03 03 Auto: CYC (Charges ... for now)
db 03 04 Auto: CYC (still still still Charges)

dc 03 02 Auto: ALV (Charges after Discharging)
dc 05 03 Auto: ALV (Charges ... for now)

fb 03 03 Auto: CYC (still still Charges)



The Lo-Part of Byte 2 reflects the current display:
H bbbb Description
- ---- -----------
0 0000 ---
1 0001 Choice: Auto/Man: Auto
2 0010 Choice: Auto/Man: Manuell
3 0011 Choice: Auto: CHARGE
4 0100 Choice: Auto: DISCHARGE
5 0101 Choice: Auto: CHECK
6 0110 Choice: Auto: CYCLE
7 0111 Choice: Auto: ALIVE
8 1000 CHA
9 1001 DIS
a 1010 CHK
b 1011 CYC
c 1100 ALV
d 1101 RDY
e 1110 ERR
f 1111 TRI



The Lo-Part of Byte 3 reflects the program flow:
H bbbb Description
- ---- -----------
0 0000 No program active
1 0001 Charging      <--- ALV starts here
2 0010 Discharging
3 0011 Charging      <--- CYC starts here
4 0100 Discharging   <--- CHK starts here
5 0101 Charging      <--- CHA starts here
6 0110 Discharging (is being skipped, only when DIS, the program starts here)
7 0111 Trickle charge
8 1000 RDY/Ready



The Hi-Part of Byte 3 reflects the chosen battery capacity:
H bbbb Description
- ---- -----------
0 0000 Automatic
1 0001  100- 200 mAh
2 0010  200- 350 mAh
3 0011  350- 600 mAh
4 0100  600- 900 mAh
5 0101  900-1200 mAh
6 0110 1200-1500 mAh
7 0111 1500-2200 mAh
8 1000 2200-...  mAh


Byte 4 seems to reflect, if the capacity is being measured or not: 01 or 02 = Measuring, if 00, updating the battery symbol, 03/04 occurs during CYC.



More informations of corrections via eMail to Markus Birth <mbirth@webwriters.de>.