Keithley 2000 - Adjusting single ranges possible? - Page 1
Forum section: electronics / general

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 24, 2017, 10:31:28 am
content: I know, you can adjust "ALL" or "DC+OHMs" or "AC" separately...But can you adjust only one specific range (maybe by reading calibration data and writing modified data back by IEEE)?Problem is:Some devices look very nice at first verification of DCV but for example OHMs is not very well, and after running ALL or DC+OHMs calibration, DCV is often no longer as nice as before (but still in tolerance). So I'd like to only correct specific cal data of the bad ranges, not to degrade the other ranges...

author: ap
author_rank: Frequent Contributor
timestamp: May 24, 2017, 02:47:39 pm
content: Not so, unfortunatelly.

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 24, 2017, 03:08:59 pm
content: If you calibrate the 2000 over GPIB, it is possible to stop and save the constants after each section, for example you can calibrate only DC Volts, but not Ohms or Amps, or DC Volts and Ohms but not Amps and so on.CheersAlex

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 24, 2017, 04:44:41 pm
content: Do you know the commands to read and write cal memory over GPIB?

author: Muxr
author_rank: Super Contributor
timestamp: May 24, 2017, 05:01:44 pm
content: The calibration manual has them:http://ridl.cfd.rit.edu/products/IDTL%20products/Manuals/Keithley%20manuals/2000_905_01D.pdfChapter: 2-11

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 24, 2017, 05:58:05 pm
content: Do you mean the STEP commands?Is it possible to change the step's sequence or use only one specific step and leave the other steps out?

author: hwj-d
author_rank: Frequent Contributor
timestamp: May 24, 2017, 06:09:04 pm
content: That's a good question, also to me. My K2k is spot on, except the ohms-range in 2- and 4-wire.I have an other pretty new 34461a, and it would be enough for me, to match the K2K with it over the Front-Panel without destroying any other calibrations. So, i wont to sync the ohms as shown in Table 2-4. But only these manually over the front-panel, because i didn't own GPIB.Knows someone whether that is possible or not?

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 24, 2017, 06:40:50 pm
content: Quote from: hwj-d on May 24, 2017, 06:09:04 pmAs I understood front panel calibration you can select ALL, DC or AC adjustment, but even if you select DC or AC you have to do all DC or all AC steps. So you cannot adjust OHM ranges only without adjusting DC ranges using front panel adjustment.I can use GPIB for adjustment, so I can try using single steps next monday, when I'm back in the lab.

author: hwj-d
author_rank: Frequent Contributor
timestamp: May 24, 2017, 07:58:54 pm
content: QuoteThat's right. But maybe it's possible to- confirm stored calibration values in DC-range, after that- edit old calibrated values to my comparatively resistors?I do not trust me there before ask someone, who knows the precise behaviour at this point.

author: z01z
author_rank: Regular Contributor
timestamp: May 25, 2017, 06:12:46 am
content: You can print current cal values with :CAL:PROT:DATA? and you can also dump the contents of the EEPROM holding these constants.TiN has apagewhere he matched these printed constants with range and EEPROM position for a 2001, I suppose this would be similar for a 2000, too. Based on this info you could match the 2000 constants to EEPROM positions.Then, even if you calibrate all the DC ranges for example, you could take the constants for only those ranges you wanted to change and combine it with the original dump (and update the checksum).

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 25, 2017, 08:12:48 am
content: Quote from: z01z on May 25, 2017, 06:12:46 amThat's interesting, and maybe first third of my idea of reading out data, modifying and writing back.So I hope this (undocumented?) command will also be accepted by K2000 instead of K2001.Quote from: z01z on May 25, 2017, 06:12:46 amThat's exactly I wanted to do, but how to write it back via GPIB? Couldn't find that info in TiN's article.

author: TiN
author_rank: Super Contributor
timestamp: May 25, 2017, 10:52:48 am
content: Low-level calibration must be run completely in order listed in SM, otherwise meter will become upset and reject new calculated values. That's why I couldn't calibrate 2001 before without actual 5700, even though I could run comprehensive cal for 2V/20V/20K/1Meg. But that does nothing for current ranges, so not enoughI'd say easiest for hobbyist is to read and decode calibration ROM format with constants (you can read floating values by :CAL:PROT:DATA? query over GPIB, but can't save to cal rom).Calculate values, correct checksum and then write calibration ROM back to meter by external I2C programmer (I've used TL866 with sucess on my 2001s/2002, however I just read/wrote cal dumps when swapped analog boards between digital boards, didn't modify them).But I doubt you get much improvement to justify the effort, as even if you leave meter run for few weeks, it will already drift few ppms here and there (still within specs), so it's bit much to expect ppm-level accuracy from 6.5d or 7.5d meter

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 25, 2017, 10:59:19 am
content: Quote from: TiN on May 25, 2017, 10:52:48 amI have two K2015 and run calibration on DCV only on both of them successfully over GPIB over a year ago. And I have to say that the pair did not drift more than 2-3ppm over the last year on the 10V range (for both polarities, relative to the Fluke 731B and to each other).CheersAlex

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 25, 2017, 05:06:59 pm
content: Quote from: Alex Nikitin on May 25, 2017, 10:59:19 amWas it DCV without OHMs?

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 25, 2017, 05:18:51 pm
content: Quote from: carl_lab on May 25, 2017, 05:06:59 pmYes.CheersAlex

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 25, 2017, 07:15:23 pm
content: Thanks, then maybe it is possible to adjust OHMs without DCV and DCI...

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 25, 2017, 07:39:21 pm
content: Quote from: carl_lab on May 25, 2017, 07:15:23 pmAFAIK, no. You can adjust DCV and OHMs without DCI however. You can stop after each section, but it is not possible to omit previous sections.CheersAlex

author: z01z
author_rank: Regular Contributor
timestamp: May 26, 2017, 05:35:15 am
content: Quote from: carl_lab on May 25, 2017, 08:12:48 amIt worked on my K2000.

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 29, 2017, 12:38:00 pm
content: Quote from: z01z on May 26, 2017, 05:35:15 amIt also worked on our K2000:QuoteI tried to completely skip the voltage steps, but on first resistance step an error message of Met/Cal appeared:QuoteSo it is correct, what Alex said:Quote from: Alex Nikitin on May 24, 2017, 03:08:59 pm

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 29, 2017, 01:58:18 pm
content: After DC calibration step 1 (short circuit)data changed:Quote

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 30, 2017, 10:12:55 am
content: After repeated DC calibrationstep 1(short circuit, minor changes) +step 2(open circuit) data changed:Quote

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 30, 2017, 10:58:35 am
content: I better interrupt at this point. It's getting to complicated and time-consuming checking all changes after each additional step without an easy way to write back modified data for one specific range. Programming over I²C is no alternative for every-day-calibration-job.BTW: What is going on at step 2 (open circuit) adjustment?Step 1 (closed circuit) is clear, it is for offset correction.Steps after step 2 are also clear, that's for gain correction.But open circuit? I don't know...

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 30, 2017, 01:57:23 pm
content: Finally I managed to totally mess up DCV ranges...Tried to adjust manually and via GPIB, without success.Any idea to set it back to "default values"?It looks like I need a programmer to try to reanimate that K2000 via I²C.Any suggestions for a good value programmer?

author: hwj-d
author_rank: Frequent Contributor
timestamp: May 31, 2017, 03:13:52 am
content: QuoteThat i've feared. You prevented me to make my k2k useless.Thanks for that, even if it doesn't help you for now...

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 31, 2017, 05:51:15 am
content: Quote from: hwj-d on May 31, 2017, 03:13:52 amSo my posting wasn't senseless...

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 31, 2017, 07:51:18 am
content: Quote from: carl_lab on May 30, 2017, 01:57:23 pmCould you describe how exactly did you manage to mess it up? A partial adjustment where you save the constants after a section is described in the service manual so should be perfectly valid (and I've done it a number of times on two meters without any problems).CheersAlex

author: z01z
author_rank: Regular Contributor
timestamp: May 31, 2017, 09:35:35 am
content: If you are looking for a programmer now, the chances are you didn't dump the contents of the EEPROM in the beginning.Probably the best would be to try to calibrate the DCV and resistance ranges, as those the ones seem to be messed up.As Alex mentioned, if what you did was normal procedure, this shouldn't have happened. This can well be a bug or you could've done something out of sequence.As for the programmer, TL866 can be an option. It's cheap, so far worked fine with serial/parallel E(E)PROMS for me. For SMD packages there are a lot of adapters available. It all depends what do you want to use it for.If you only want to program the 24LC16 in your meter, for a quick and dirty solution an arduino could also be used.If it helps, I could print out the constants and dump the EEPROM in my meter. Please PM me if you need this.

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 31, 2017, 03:07:54 pm
content: Quote from: Alex Nikitin on May 31, 2017, 07:51:18 amI used an existing Met/Cal (= Fluke calibration software) procedure, I modified before to skip specific cal steps.First, I skipped DC adjustments step 1 to step 5 (closed circuit, open circuit, DC ranges 10V, -10V, 100V full scale) and tried to start with step 6 (1kOhm 4-wire).Result: Met/Cal displayed error message:QuoteTest was interrupted, so test steps to save cal constants were not executed.Then I set back adjustment procedure to original, but skipped all cal steps except step 1, saving cal constants and resetting security code.It worked without error message, but calibration was (way) out of spec for DCV and 2-wire-OHM.Then I set back adjustment procedure to original again, but skipped all cal steps except step 1+2, saving cal constants and resetting security code.It worked without error message, but calibration was out of spec as before.(this image is a montage of 4 test result screenhots: Test 1 + Test 2 is unchanged K2000. Column "UUT indicated" is from TEST1 only, I did not copy the new values of the following tests)Following attempts of using complete (original) Met/Cal adjustment procedure and complete manual adjustment ended without error message, but results were unchanged and out of spec as before. I tried 2 or 3 times - no changes. It seems to ignore new attempts of adjustment.I think, now I understand, what Tin said:Quote from: TiN on May 25, 2017, 10:52:48 am

author: carl_lab
author_rank: Frequent Contributor
timestamp: May 31, 2017, 03:40:34 pm
content: Quote from: z01z on May 31, 2017, 09:35:35 amYes, I know. I should have read out EEPROM before starting this experiment...But maybe I can copy data from a working K2000. I'm not sure how to read out and write back in-circuit.Quote from: z01z on May 31, 2017, 09:35:35 amThat's what I tried. But no visible success (see results table above).Quote from: z01z on May 31, 2017, 09:35:35 amI really don't know, what went wrong.Quote from: z01z on May 31, 2017, 09:35:35 amThanks for your offer. Can you read out data in-circuit? How to set meter's CPU in hi-Z or inactive state?

author: Muxr
author_rank: Super Contributor
timestamp: May 31, 2017, 09:43:28 pm
content: The worst case scenario is you find an affordable calibrator and have it calibrated by a real lab. Not sure how much it costs but shop around. You'll also get a calibrated piece of equipment out of it.

author: Alex Nikitin
author_rank: Super Contributor
timestamp: May 31, 2017, 10:35:59 pm
content: Quote from: carl_lab on May 31, 2017, 03:40:34 pmWhat are you using to supply the voltages required (+/-10V and 100V)?CheersAlex

author: carl_lab
author_rank: Frequent Contributor
timestamp: June 01, 2017, 06:20:51 am
content: Our calibrator is Datron/Wavetek 4808.

author: z01z
author_rank: Regular Contributor
timestamp: June 01, 2017, 07:28:21 am
content: Quote from: carl_lab on May 31, 2017, 03:40:34 pmIt might worth a try, though there are other stuff stored there, apart from the calibration constants, the serial number for example. And who knows what else, hopefully only menu settings and nothing important.Fixing the corrupted ranges could be another approach.QuoteYes, it should be possible by keeping the uP in reset (it was discussed in some other topics). It did work for me but others had problem with this method. What worked for them I think was to remove the two PLCC EPROMs.The EEPROM contents also depend on the firmware revision, so you should get a dump from the same fw as yours. It is displayed at power on and it's also printed in the answer for *IDN?.I've a dump somewhere from the time when A05 revision was running and I can dump it again quite easily on the A19 currently in use. With more effort I could even install the fw version you have (if it's not the A20, which requires recalibration).

author: carl_lab
author_rank: Frequent Contributor
timestamp: June 01, 2017, 09:20:23 am
content: Quote from: z01z on June 01, 2017, 07:28:21 amYes, of course. But you have to know memory adresses and how to recalculate checksum.Quote from: z01z on June 01, 2017, 07:28:21 amIt's Rev. A13/A02.Do not read out or do anything, before I got my ordered EEPROMs and tried to copy complete EEPROM from working K2000, maybe that that's enough to reanimate.

author: z01z
author_rank: Regular Contributor
timestamp: June 02, 2017, 12:03:53 pm
content: Well, I did try to install the A13 fw fromTiN's sitebut the meter did not work with it (no comm link). Either downgrade like this doesn't work or that dump is not good. After putting back the A19 fw, the meter works again.I can try again if you read the EPROM contents once you have your programmer, if needed.I can reconfirm however, that with the EPROMs removed, the EEPROM can be read. It was done with a TL866 and an SO8 clip likethis(which is just a random image from google search), though it's a tight fit.

author: TiN
author_rank: Super Contributor
timestamp: June 02, 2017, 12:35:29 pm
content: Just hold CPU in RESET and you can just hook SDA/SCL/GND to TL866 to readout the calibration EEPROM data. That's how I did it on 2001/2002's.It's strange (to say softly) to experiment with calibrations without saving original dump first.So we saw the described outcome coming.

author: hwj-d
author_rank: Frequent Contributor
timestamp: June 02, 2017, 01:45:34 pm
content: Yeah, shit happens, everytime, everywhere.The truth is, without, we're mostly all not able to learn 2'nd half of bees dick.Quote

author: carl_lab
author_rank: Frequent Contributor
timestamp: June 04, 2017, 11:05:28 am
content: Quote from: TiN on June 02, 2017, 12:35:29 pmThanks, for that information.Quote from: TiN on June 02, 2017, 12:35:29 pmYou are right,but there's also a bad error handling by Keithley, I did not expect.Trying to directly execute resistance adjustment via GPIB leads to an error message "Execution error" and break off. So far, so good.But nevertheless cal constants were changed, and following adjustment attempts are ignored anyhow. (why?)Normally, at the end of adjustment, you have to save cal constants explicitly by GPIB command (or front panel confirmation)...PS: edited after finding hardware failure...

author: Robert763
author_rank: Super Contributor
timestamp: June 05, 2017, 07:47:02 am
content: We had a couple of 2000's at work and on their 2nd calibration (3years old) one came back from Keithley as BER due to being out of calibration on one or two ranges (can't remember the exact details).This is, for me at least, unacceptable for an expensive current production meter and has put me off them for work or home use.

author: carl_lab
author_rank: Frequent Contributor
timestamp: June 05, 2017, 07:19:52 pm
content: What is BER?

author: Alex Nikitin
author_rank: Super Contributor
timestamp: June 05, 2017, 07:22:48 pm
content: Quote from: carl_lab on June 05, 2017, 07:19:52 pmBeyond Economical Repair.CheersAlex

author: Andreas
author_rank: Super Contributor
timestamp: June 05, 2017, 09:04:04 pm
content: Quote from: Robert763 on June 05, 2017, 07:47:02 amHello,And why do you think this is different on other manufacturers?Opening and closing a 1K$ DMM by a qualified technician, error findingand exchanging one of both defect PCBs will cost more than a new unit produced in Malaysia.with best regardsAndreas

author: carl_lab
author_rank: Frequent Contributor
timestamp: June 08, 2017, 04:21:45 pm
content: Finally I found the cause of the problem when I tried to calibrate another DMM (34410A)...One of our 4-wire calibration shorts Agilent 34171/34172 was faulty!We have 4 of them so the problem wasn't consistent. Problem: One of the clamping nuts was loose, but the wire touched the bolt, so resistance wasn't consistent or temporary was complete interrupted.I also did not know, this specific calibration short has clamped shorting wire, because one of our Agilent calibration shorts, i opened some day, has soldered wire, so I did not consider loose connections...Error message was correct and not caused by previous failed calibration attempt.Sorry for accusing Keithley of bad error handling!I was wrong...At the end, complete adjustment using short with re-tightened clamping nuts, was successful - no need for reprogramming EEPROM.

author: chekhov
author_rank: Regular Contributor
timestamp: August 17, 2022, 09:45:14 pm
content: Let's revive this thread a bit.I have K2010 that has sick or 'sick' 1M-100M ranges (I've looked in reversed schematics of K2000 and partial of K2010 and it doesn't seem the problem is in TF-245 or switches or anything else, at least not for now).Instead of 1M is shows smth like 1.00434... on 1M and 10M ranges, which is more than 4300ppm off.That may seem to be 'fine/enough' for Australia (but unacceptable for me) on 10M range that has 400 ppm/year spec and meter wasn't calibrated for 9 years.But not for 1M range - 70 ppm/year let's say.So, I decided to try adjusting it to something. And similar to topicstarter I bumped in this silly and artificial obstacle - the need to go through all steps. That is even worse in my case since 1M is the highest adjustable range and that is STEP10.Nowadays it seems to be popular discovering hidden commands in DMMs, I decided to give it a try.(What's next is for quite educational purposes, don't try things since you can loose your precious calibration - if you screw up it's your responsibility)After some digging I found the following unknown to me commands:Code::CALibration:PROTected:RCOunt:DIAGnostic:KEIThley:CALibration:AC:CONSTant:DIAGnostic:KEIThley:CALibration:DC:CONSTant:DIAGnostic:KEIThley:CALibration:UNLOCK:DIAGnostic:KEIThley:EHRaccess:DIAGnostic:KEIThley:ISN:DIAGnostic:KEIThley:WARMBOOTIt's time to try some of them, but first - let's insure we won't loose our precious calibration. :'(Capacitor makes it a bit harder, but clip accurately sits on the right side of the chip where data lines are, only need to connect programmator to ground in some other place.Calibration flash data is saved, now we are prepared and safe.By different reasons, first thing I tried to execute was:CALibration:PROTected:RCOunt.This command doesn't seem to take any arguments and just does one unpleasant thing - immediately clears calibration count and dates, of course persistently saving them in a flash - precaution measure was very right decision, this meter is very unkindly to unknown command seekers.After some digging, I found that some other commands are doing::DIAGnostic:KEIThley:ISNis "Instrument Serial Number", they need somehow to program it, right ?Execution format is:DIAGnostic:KEIThley:ISN '1234567'- these quotes were quite unexpected thing, I only tried them because of how current measurement function is set, like:SENS:FUNC 'RESistance'. Maximum length is 7 symbols, but you can specify less. If someone specified symbols are not printable they will be shown as ' ' in *IDN? command. Action is also immediate, persistent and irrevertable.:DIAGnostic:KEIThley:WARMBOOTis just some kind of reboot, still quite handy thing during experiments because things like calibration constants are not applied to the meter until reboot (or maybe some other action but I don't know exactly).:DIAGnostic:KEIThley:EHRaccesssounds like"External Hardware Access", but I have no idea what it really does inside, maybe just freezes CPU via special instruction, anyway it will unlikely help me with my task.:DIAGnostic:KEIThley:CALibration:UNLOCKdoes not take any arguments, it just does something (will see later).Finally, the most tasty things:DIAGnostic:KEIThley:CALibration:AC|DC:CONSTant.Unfortunately doesn't start constantly playing AC/DC on the meter, but for success execution should take a number - number in various formats that meter usually accepts.And as usual, nothing really happens, I've tried to execute them several times w/o any evident result.Than just applying logic of how calibration happens, I decided to SAVE calibration - in order to to that you have to specify current and next calibration dates (which I already wiped).So we executing:Code::CALibration:PROTected:DATE 2000,01,01:CALibration:PROTected:NDUE 2001,01,01:CALibration:PROTected:SAVERebooting the meter ... and immediately seeing something likeQuoteLet's call it a success.Then we invoke command:CALibration:PROTected:DATA?and after some staring at the screen with old and new output we realize that some calibration constants changed to all that nonsense that I've tried before.After some experimenting and digging I found that::DIAGnostic:KEIThley:CALibration:UNLOCK- allows to change calibration constants. Each time it invoked it resets in-memory constants we will change to the ones the meter has for now. Also allows to invoke calibration code change command.:DIAGnostic:KEIThley:CALibration:AC|DC:CONSTant- these commands just take all calibration parameters from corresponding section one after another, very similar how calibration steps go.In my case:CALibration:PROTected:DATA?shows91value:26AC constants (not sure about first 4 numbers) and66DC constants. In order to change one of them you have to invoke appropriate command, passing previous constants as they are (that's not really true, a bit later about it), then put a changed value(s), save calibration and reboot the meter - adjustment is ready.This all enables possibility to play with calibration constants in repeatable and almost revertable way. Why almost?Remember how meter outputs constants - it will show number like '+2.78018988E-01'. Fine, right ? Not really.If we look now it's stored in flash (which btw has a few sections which meter reads and updates as single huge blocks, also with a hash in the end of most of them) then we find that all constants (except 4 numbers in the beginning of DATA? output) are represented as 8-bytes double numbers.Number we try to find is (python is helping here):QuoteAnd we only see something like:QuoteSo here is the little trap for putting original constants back - we need 15 digits after decimal point in order to put back what is supposed to be here, but meter is only printing 8. For most of constants which are small, 10^-4 or 10^-6, but that's a bit unpleasant, +1 for why dumping flash directly from chip is very good option for those who can open the instrument.Having all that, it's possible to adjust something in a meter like with a screw driverlike in the old days, but don't screw it up completely.Since my meter has much more constants than K2000 I cannot say which does what, finding that is the other huge task.I can only say that setting constants one by one (via small script of course), I found gain constant for 1M range (which applies to 1M-100M ranges) and additional constant that applies to 10M and 100M ranges on the top of previous one (since as far as I understood 10M divider that is used for high voltages is used to measure 10M and 100M resistance in parallel to it). I still haven't found the way how to skip calibration steps, but this is at least something that helps me to solve my issue.

author: alm
author_rank: Super Contributor
timestamp: August 17, 2022, 10:10:19 pm
content: Nice work! Please share which constants you have (roughly) identified the function of.

author: chekhov
author_rank: Regular Contributor
timestamp: September 14, 2022, 10:37:02 pm
content: I spend some time and identified almost all DC constants and what they are doing, see attached screenshot from my table.Each calibration step may modify several constants, in firmware they are arranged in blocks with additional info, this way I found which ones are modified by each step and in which sequence.Basically, values stored are:Values of standards used for calibration'RAW ADC values' for zero offsets'RAW ADC values' measured with each standardHere 'RAW ADC values' are not exactly RAW because they are scaled, not just integer values. In table I'm writing 'gain' just for convenience, in reality they are more like 1/Gain.I don't know what happens in a code exactly, so all is my imagination is only based on what I see from constants changing and results observing, I unfortunately not going to spend years reversing it all (at least for now).In order to show some similar measurement, DMM likely using Zero and 'Gain' constants as values of two points that define a line going through them:QuoteIn case of OCOMP and DRYCKT modes:QuoteI will double check eventually, but constants #52 and #54 are supposed to be zero offsets for rear ohms - 10K, 100K and 1M. They seem to be calculated during calibration but don't used in reality. If that's a bug, that's really funny, or I just missed it all twice.Constants #36 and #37 do something unknown to me at the moment. They seem to be some kind of ratio - change of ratio changes measurements, but just scaling them changes next to nothing. At the moment I'm not brave enough to hook 'digital analyzer' to switching circuitry in order to identity actions that DMM does when calculating them, but may be related to ADC itself - maybe 1V goes into it and meter executes charging/discharging sweeps. I tend to think in this direction.BTW, I noticed that my meter does not have TF-245 but one custom network + networks made from equal resistors (though still has footprint for TF-245).

author: chekhov
author_rank: Regular Contributor
timestamp: September 27, 2022, 08:31:40 pm
content: Instead of epilogue ...Since I anyway found all high and low level entry points for calibration steps, I decided to try to break hard sequence of calibration steps.Indeed, high level functions have several checks of variables and appropriate error codes.I've tried to flip a few bits, and got some result ... it allowed me to execute cal steps in non-standard way without immediate '-200,"Execution error"'.Unfortunately I wasn't able to make it work smoothly - somewhere somewhere deep inside crazy spaghetti or state machines there are additional check that always fails the first execution of any step I try.However:Second execution of the same cal step passes (time to time I see failures, maybe due to meter wasn't warmed enough, or my meter is getting sick, no idea)All oher cal steps also pass (at lease a few I tried)Save works as usualI cannot really call it a win, but at least pretty valuable 'success'.So, what are the tweaks you may ask ...Since each firmware is unique (unique addresses of all the same functions in most cases due to little change), patch is only applicable to version I worked on - A15. Changes basically skip check and instead of going somewhere by condition just go somewhere as if condition had the result we wanted.Here is the diff:Code:EVEN:-0000e530: ff67+0000e530: ff60-0000e5f0: 0004 2dff 6720+0000e5f0: 0004 2dff 6020-0003ffe0: 0000 0000 0000 0000 0000 0000 0000 0071+0003ffe0: 0000 0000 0000 0000 0000 0000 0000 0072ODD:-0003ffe0: 0000 0000 0000 0000 0000 0000 0000 00f8+0003ffe0: 0000 0000 0000 0000 0000 0000 0000 005aThus, brave meter owners that have a few SST39SF020 laying around may try this change. Don't forget to sump cal flash before any manipulations.Unfortunately, I don't have opportunities to verify whether steps executed in reverse/arbitrary order are going to produce 'same' result as steps going in their natural order. I only see that steps change CAL constants in the way I annotated in my table.

author: voltsandjolts
author_rank: Unknown
timestamp: August 20, 2025, 03:18:59 pm
content: Quote from: carl_lab on June 01, 2017, 09:20:23 amIt's a one's complement checksum, so in Python:Code:def ones_complement_checksum_16bit(data: bytearray) -> int:return ~sum(data) & 0xffffThe attached python script search4blocks can be used to search an eeprom binary file to find all possible blocks terminated with that checksum.:CALibration:PROTected:DATA?...returns the coefficients as held in sram, which were read from eeprom at boot time, I expect. They are returned in the order they are stored in eeprom. The coeffs are stored in eeprom in two seperate blocks, presumably for the AC and DC calibrations, which can be done seperately;Code:Start End Length0x020 0x0d9 186 * block of coefficients, 4 of 4-byte integers followed by 21 of 8-byte doubles, plus 2 byte checksum0x0da 0x223 330 * block of coefficients, 41 of 8-byte doubles, plus 2 byte checksumAttached python script eeprom_coeffs takes the eeprom binary file and prints each coefficient with its eeprom address. This will show the same coeffs as ":CALibration:PROTected:DATA?".*** The above was determined from a year 2018 DMM with B01 firmware, pre-A20 firmware has different calibration scheme without the 10MOhm step ***

author: voltsandjolts
author_rank: Unknown
timestamp: September 13, 2025, 10:06:28 am
content: The attached python script helps perform the dc cal part over the serial interface, and saves a copy of the coefficients at each step. From that we can can see which coefficients change at each step, summary shown in the pdf attached. So the first block starting at 0x020 in eeprom is the ac coefficients, and the second block at 0x0da is the dc coefficients.If anyone knows a way to read/write the eeprom bytes directly via serial or gpib, that would be helpful. But maybe not possible.

author: SanderMTI
author_rank: Contributor
timestamp: September 19, 2025, 12:06:35 am
content: Given the length of this thread, I'd say it's all very time consuming and complicated.You could consider using another approach.Instead of insisting that the meter shows you the "correct" number, Excel can correct it.I use the reading at zero (shorted input), reading at my calibration signal and actual value of the calibration signal.Excel can now correct the meter reading via an offset and slope scheme.You can use this on any range or part of a range if you like.Re-calibrating is quick and can be done as often as I like.The software I use for experimenting reads a file which contains the calibration numbers for each instrument and rangeI use in the experiment, so that the resulting Excel data file already contains corrected data.That's good enough for me, I don't really want to deal with the horror of calibrating individual instruments.Pick one "truth" and calibrate everything else to it.Sander