"...did you mean HP-IB?" Yes, I use HPIB/GPIB interchangeably.
Before I did anything, I wanted to have a copy of the calibration data. This is what I did...
Thanks to WaveyDipole (see:
https://www.eevblog.com/forum/projects/ar488-arduino-based-gpib-adapter/), I connected my Arduino as per the simplest configuration in Appendix A (see:
https://github.com/Twilight-Logic/AR488/raw/master/AR488-manual.pdf). Installed Version 0.48.08 of his software, verified connectivity with the meter and got familiar with the command-set.
I then created the following program (a.c):
#include <stdio.h>
#include <unistd.h>
void main() {
for(int i = 0; i < 256; i++) {
printf("W\033%c\r++read\r", i);
fflush(stdout);
usleep(500000);
}
}
Before executing the ./a program, I started recording to a gtkterm log file (newstcal1.log).
$ gcc -o a a.c
$ ./a >>/dev/ttyACM0
$ awk <newestcal1.log '{printf "%s", substr($0,1,1);}' >newestcal1.cal
The last line above copies the first character of each log line to a "cal" file.
For better readability (broken into records and hexdumped) execute:
$ cat newestcal1.cal|od -A x -t x1z -w13 --skip=1
000001 40 40 40 42 48 47 43 4c 4d 40 42 4d 40 >@@@BHGCLM@BM@< 30 mV DC // 0
00000e 40 40 40 40 42 48 43 4c 4c 42 41 4d 47 >@@@@BHCLLBAMG< 300 mV DC // 1
00001b 40 40 40 40 40 43 42 45 43 41 45 4e 4c >@@@@@CBECAENL< 3 V DC // 2
000028 49 49 49 49 49 44 43 4c 4c 4f 4d 49 47 >IIIIIDCLLOMIG< 30 V DC // 3
000035 49 49 49 49 49 49 42 45 43 4e 4d 4a 44 >IIIIIIBECNMJD< 300 V DC // 4
000042 40 40 40 40 40 40 40 40 40 40 40 4f 4f >@@@@@@@@@@@OO< <not used> // 5
00004f 49 49 49 40 43 48 42 43 42 43 43 4c 4c >III@CHBCBCCLL< AC V // 6
00005c 49 49 49 49 43 47 40 45 45 40 44 4c 43 >IIIICG@EE@DLC< 30 Ohm 2W/4W // 7
000069 49 49 49 49 49 44 40 45 44 42 4e 4b 45 >IIIIID@EDBNKE< 300 Ohm 2W/4W // 8
000076 49 49 49 49 49 49 40 45 41 41 4d 4b 45 >IIIIII@EAAMKE< 3 kOhm 2W/4W // 9
000083 49 49 49 49 49 49 40 45 40 40 42 4c 42 >IIIIII@E@@BLB< 30 kOhm 2W/4W // 10
000090 49 49 49 49 49 49 40 45 41 4e 4f 4a 46 >IIIIII@EANOJF< 300 kOhm 2W/4W // 11
00009d 49 49 49 49 49 49 40 45 4f 41 42 4b 42 >IIIIII@EOABKB< 3 MOhm 2W/4W // 12
0000aa 49 49 49 49 49 49 40 45 42 44 40 4b 4e >IIIIII@EBD@KN< 30 MOhm 2W/4W // 13
0000b7 49 49 49 49 49 48 44 4d 4e 4d 4c 49 42 >IIIIIHDMNMLIB< 300 mA DC // 14
0000c4 40 40 40 40 40 40 44 4d 4c 43 40 4d 4f >@@@@@@DMLC@MO< 3A DC // 15
0000d1 40 40 40 40 40 40 40 40 40 40 40 4f 4f >@@@@@@@@@@@OO< <not used> // 16
0000de 49 49 49 40 43 48 43 44 42 42 4c 4c 42 >III@CHCDBBLLB< 300 mA/3A AC // 17
0000eb 40 40 40 40 40 40 40 40 40 40 40 4f 4f >@@@@@@@@@@@OO< <not used> // 18
0000f8 40 40 40 40 40 40 40 40 >@@@@@@@@<
I then verified each of the records above using the following pseudo-code (checksum is in [11][12] positions of each entry):
for(byte cksum = 0, int j = 0; j < 19; j++, cksum = 0) {
for(int i = 0; i < 11; i++)
cksum += (entry[j][i] & 0xf);
cksum += entry[j][11] << 4
cksum += entry[j][12] & 0x0f
if (cksum == 0xff) then SUCCESS!!!!
}
1st entry example (ignore the leading nibble): (0+0+0+2+8+7+3+c+d+0+2)+d0+00 == ff
Once that was out of the way, I moved onto the hardware.
After studying the schematic, I determined that the simplest and safest solution was, WITH THE 3478A POWER PLUG DISCONNECTED, to solder a "pig tail" with series 330R resistor and signal diode to the cathode of CR500 and ground-side of a nearby bypass cap. Before committing, I checked that I had the right trace by using my hand-held meter to confirm that it had +3V (lithium battery) when the 3478a was powered off and +5V (meter main digital power rail) when the 3478a was powered-on.
I then turned on the 3478a to confirm the calibration was still okay. It was, and the hard part was over.
WITH THE 3478A POWER PLUG DISCONNECTED, I then attached a battery holder with 3 AA batteries to the pigtail. Again, using my hand-held meter, I confirmed that the cathode of CR500 had +4.5V with the new battery holder attached and +3V (lithium battery) without it. I left the new AA holder attached, then proceeded to cut-out the old lithium battery (at the spot-welded points) leaving two lead stumps. Again, I then turned on the 3478a to confirm the calibration was still okay. It was.
WITH THE 3478A POWER PLUG DISCONNECTED, I then soldered in the new lithium battery and disconnected the AA battery holder. I left in the pigtail for the next guy.
No isolation [equipment] was required. Just planning and an extra battery.
P.S.
Much thanks to this thread:
https://www.eevblog.com/forum/repair/hp-3478a-how-to-readwrite-cal-sram/