UNI-T 139C restore eeprom - Page 1
Forum section: electronics / testgear

author: Erwin Ried
author_rank: Regular Contributor
timestamp: October 03, 2019, 08:59:57 am
content: Hi, I have a broken 139C that if you switch to voltage or mV it loudly beeps and autorange-range indicator glitches out. I wrote a eeprom restorer based on some messages here:https://www.eevblog.com/forum/testgear/uni-t-ut139c-lcd-biasing-(schematics-avail)/25/This is the restorer:Code:// --------------------------------------// Modified i2c_scanner to find, dump and update a DTM0660 based multimeter EEPROM// to hack in missing features.//// See http://www.kerrywong.com/2016/03/19/hacking-dtm0660l-based-multimeters/comment-page-1/#comment-874169// for more about hacking this chipset//// The i2c scanner code came with the following comments.// Version 1// This program (or code that looks like it)// can be found in many places.// For example on the Arduino.cc forum.// The original author is not know.// Version 2, Juni 2012, Using Arduino 1.0.1// Adapted to be as simple as possible by Arduino.cc user Krodal// Version 3, Feb 26 2013// V3 by louarnold// Version 4, March 3, 2013, Using Arduino 1.0.3// by Arduino.cc user Krodal.// Changes by louarnold removed.// Scanning addresses changed from 0...127 to 1...119,// according to the i2c scanner by Nick Gammon// http://www.gammon.com.au/forum/?id=10896// Version 5, March 28, 2013// As version 4, but address scans now to 127.// A sensor seems to use address 120.////// This sketch tests the standard 7-bit addresses// Devices with higher bit address will not be seen properly.//// Additional i2c hints from http://playground.arduino.cc/Code/I2CEEPROM//// This code was written for and tested on and STM32F103C8T6 - the so called BluePill - see http://wiki.stm32duino.com/index.php?title=Blue_Pill// but should work pretty much unmodified on most 'duinos.//// Thanks to the many coding giants, who's shoulders this sketch stands upon.//// The hexdump of the 24c02 will appear on the STM32 USB serial device, or UART1, depending on the settings in the IDE.// See http://stm32duino.com for details of how the serial ports on the STM32F103XX devices are defined.//// For most Multimeters, you should be able to use a SOC8 clamp to connect without the inconvenience of soldering to the board.// Search Ebay for "SOIC8 SOP8 Flash Chip IC Test Clips Socket Adapter BIOS" or similar.#include <Wire.h>// #define BLINK_PIN 13 // Unused.. Can be used to assist with debugging.#define BOARD_POWER 9 // This can theoretically be used to power the multimeter/24c02 since the board draws a few miliamps.// In the end, I just opted to power the board from 3v3 directly, as this makes manually resetting the multimeter only, easier.#define BOARD_WP 8 // Pull down WP pin to allow us to write to the 24c02 - by default this is held high by a pullup resistor on the multimeter.void setup(){// Allow the USB to re-enumerate before we attempt to talk. You can probably shorten this delay considerably.//delay(30000);Serial.begin(9600);// Using the BluePill, or other STM32F103XX boards, PB6 is SCL => Pin 6 on the 24C02// PB7 is SDA => Pin 5 on the 24C02// PB8 is GPOI used to pull WP (Write Protect) (Pin7) low on the 24C02 to allow writing to the chip.// There is a pullup on WP on the Victor VC921 and probably most other devices, so we need to pull low to write.// Power up the multimeter if connected to the BOARD_POWERpinMode(BOARD_POWER, OUTPUT);digitalWrite(BOARD_POWER, HIGH);//Enable writing to the eeprompinMode(BOARD_WP, OUTPUT);digitalWrite(BOARD_WP, LOW);Serial.println("\nDTM0660 EEPROM dumper and updater.");Wire.begin();Serial.println("Waiting for DTM0660 POST and i2c Bus to settle.");delay(3000);}void loop(){byte error, address;int nDevices;Serial.println("Scanning...");nDevices = 0;for (address = 1; address < 127; address++ ){// The i2c_scanner uses the return value of// the Write.endTransmisstion to see if// a device did acknowledge to the address.Wire.beginTransmission(address);error = Wire.endTransmission();if (error == 0){Serial.print("\nI2C device found at address 0x");if (address < 16) {Serial.print("0");}Serial.print(address, HEX);Serial.println(" ");// Dump the current rom values, so we have somthing to fall back on if it all goes pear shaped.// NOTE: The 24c02 also contains calibration values, so should be unique to the meter, simply pasting the hexdump from// one meter to another will screw up the calibration.dump24c02(address);//restore139ceeprom(address);restore139ceeprom_alt(address);dump24c02(address);// Enable serial.// NOTE: On some meters, this will break the button matrix, or screw up some other features.// You do this entirely at your own risk.. magic smoke and a dead meter may result.// If in doubt, check whether pin 20 on the DTM0660 looks to be connected to some other circuitry before attempting to enable serial output.// It is however safe to do this on the version of Victor VC921 I have as the Tx pin pad is not connected to anything else.//enableRS232();// Set LCD bias to 3.3V//VLCD();//Select one of the following three modes.//enable4000Count();//enable6000Count();//enable8000Count();extendPowerOn();nDevices++;}else if (error == 4){Serial.print("Unknow error at address 0x");if (address < 16)Serial.print("0");Serial.println(address, HEX);}}if (nDevices == 0)Serial.println("No I2C devices found\n");elseSerial.println("\nDone.\n");// Put any changes to bytes immediately after the dump, since that will ensure they hit the found i2c device.delay(5000); // Wait 5 seconds then re-scan.}void dump24c02(byte i2cAddress){int addrPointer = 0;int romLength = 0xff; // 24c02 - 256x8 bits (256 bytes)byte b = 0;Serial.println("-- : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");while (addrPointer <= romLength){if (!(addrPointer % 16)) {Serial.print("\n");if (addrPointer < 16) {Serial.print("0");}Serial.print(addrPointer, HEX);Serial.print(" : ");}b = i2c_eeprom_read_byte(i2cAddress, addrPointer); // Read byteaddrPointer++; // increment address pointerif (b < 0x10) {Serial.print("0");}Serial.print(b, HEX); // Print byteSerial.print(" ");}Serial.println(" ");}byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {Wire.beginTransmission(deviceaddress);Wire.write((int)eeaddress);Wire.endTransmission();Wire.requestFrom(deviceaddress, 1);if (Wire.available()) {return Wire.read();} else {return 0xff;}}void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {digitalWrite(BOARD_WP, LOW);delay(100);int rdata = data;Wire.beginTransmission(deviceaddress);Wire.write((int)(eeaddress)); //Wire.write(rdata);Wire.endTransmission();//digitalWrite(BOARD_WP, HIGH);}void restore139ceeprom_alt(byte address){Serial.println("Restoring UNI-T 139C EEPROM, stop now if you dont have that one...");delay(5000);Serial.println("There is no way back now.");i2c_eeprom_write_byte(address, 0x00, 0xFF);i2c_eeprom_write_byte(address, 0x01, 0xFF);i2c_eeprom_write_byte(address, 0x02, 0xFF);i2c_eeprom_write_byte(address, 0x03, 0xFF);i2c_eeprom_write_byte(address, 0x04, 0xFF);i2c_eeprom_write_byte(address, 0x05, 0xFF);i2c_eeprom_write_byte(address, 0x06, 0xFF);i2c_eeprom_write_byte(address, 0x07, 0xFF);i2c_eeprom_write_byte(address, 0x08, 0xFF);i2c_eeprom_write_byte(address, 0x09, 0x52);i2c_eeprom_write_byte(address, 0x0A, 0x00);i2c_eeprom_write_byte(address, 0x0B, 0x04);i2c_eeprom_write_byte(address, 0x0C, 0x01);i2c_eeprom_write_byte(address, 0x0D, 0x0C);i2c_eeprom_write_byte(address, 0x0E, 0xC1);i2c_eeprom_write_byte(address, 0x0F, 0x03);i2c_eeprom_write_byte(address, 0x10, 0x10);i2c_eeprom_write_byte(address, 0x11, 0x27);i2c_eeprom_write_byte(address, 0x12, 0x38);i2c_eeprom_write_byte(address, 0x13, 0x18);i2c_eeprom_write_byte(address, 0x14, 0x4E);i2c_eeprom_write_byte(address, 0x15, 0x02);i2c_eeprom_write_byte(address, 0x16, 0x65);i2c_eeprom_write_byte(address, 0x17, 0x4B);i2c_eeprom_write_byte(address, 0x18, 0x3D);i2c_eeprom_write_byte(address, 0x19, 0x3D);Serial.println("10%");i2c_eeprom_write_byte(address, 0x1A, 0xFF);i2c_eeprom_write_byte(address, 0x1B, 0x3B);i2c_eeprom_write_byte(address, 0x1C, 0x0A);i2c_eeprom_write_byte(address, 0x1D, 0xFF);i2c_eeprom_write_byte(address, 0x1E, 0x40);i2c_eeprom_write_byte(address, 0x1F, 0xFF);i2c_eeprom_write_byte(address, 0x20, 0x96);i2c_eeprom_write_byte(address, 0x21, 0x98);i2c_eeprom_write_byte(address, 0x22, 0x58);i2c_eeprom_write_byte(address, 0x23, 0x81);i2c_eeprom_write_byte(address, 0x24, 0xFA);i2c_eeprom_write_byte(address, 0x25, 0x00);i2c_eeprom_write_byte(address, 0x26, 0x32);i2c_eeprom_write_byte(address, 0x27, 0x00);i2c_eeprom_write_byte(address, 0x28, 0x00);i2c_eeprom_write_byte(address, 0x29, 0x80);i2c_eeprom_write_byte(address, 0x2A, 0x00);i2c_eeprom_write_byte(address, 0x2B, 0x80);i2c_eeprom_write_byte(address, 0x2C, 0xA3);i2c_eeprom_write_byte(address, 0x2D, 0x7D);i2c_eeprom_write_byte(address, 0x2E, 0xF3);i2c_eeprom_write_byte(address, 0x2F, 0xAD);i2c_eeprom_write_byte(address, 0x30, 0x4E);i2c_eeprom_write_byte(address, 0x31, 0x02);i2c_eeprom_write_byte(address, 0x32, 0x09);i2c_eeprom_write_byte(address, 0x33, 0x1C);i2c_eeprom_write_byte(address, 0x34, 0x02);i2c_eeprom_write_byte(address, 0x35, 0x09);i2c_eeprom_write_byte(address, 0x36, 0xA6);i2c_eeprom_write_byte(address, 0x37, 0x00);i2c_eeprom_write_byte(address, 0x38, 0x0B);i2c_eeprom_write_byte(address, 0x39, 0x41);i2c_eeprom_write_byte(address, 0x3A, 0x14);i2c_eeprom_write_byte(address, 0x3B, 0x0A);i2c_eeprom_write_byte(address, 0x3C, 0x1C);i2c_eeprom_write_byte(address, 0x3D, 0x03);i2c_eeprom_write_byte(address, 0x3E, 0x0A);i2c_eeprom_write_byte(address, 0x3F, 0x00);i2c_eeprom_write_byte(address, 0x40, 0x00);i2c_eeprom_write_byte(address, 0x41, 0x01);i2c_eeprom_write_byte(address, 0x42, 0x00);i2c_eeprom_write_byte(address, 0x43, 0x01);i2c_eeprom_write_byte(address, 0x44, 0x00);i2c_eeprom_write_byte(address, 0x45, 0x07);i2c_eeprom_write_byte(address, 0x46, 0x98);i2c_eeprom_write_byte(address, 0x47, 0x00);i2c_eeprom_write_byte(address, 0x48, 0x64);i2c_eeprom_write_byte(address, 0x49, 0x00);i2c_eeprom_write_byte(address, 0x4A, 0x64);i2c_eeprom_write_byte(address, 0x4B, 0x00);i2c_eeprom_write_byte(address, 0x4C, 0x64);i2c_eeprom_write_byte(address, 0x4D, 0x00);i2c_eeprom_write_byte(address, 0x4E, 0x00);i2c_eeprom_write_byte(address, 0x4F, 0x00);i2c_eeprom_write_byte(address, 0x50, 0x00);i2c_eeprom_write_byte(address, 0x51, 0x80);i2c_eeprom_write_byte(address, 0x52, 0x00);i2c_eeprom_write_byte(address, 0x53, 0x80);i2c_eeprom_write_byte(address, 0x54, 0x00);i2c_eeprom_write_byte(address, 0x55, 0x80);i2c_eeprom_write_byte(address, 0x56, 0x00);i2c_eeprom_write_byte(address, 0x57, 0x80);i2c_eeprom_write_byte(address, 0x58, 0x00);i2c_eeprom_write_byte(address, 0x59, 0x80);i2c_eeprom_write_byte(address, 0x5A, 0x00);i2c_eeprom_write_byte(address, 0x5B, 0x80);i2c_eeprom_write_byte(address, 0x5C, 0x00);i2c_eeprom_write_byte(address, 0x5D, 0x80);i2c_eeprom_write_byte(address, 0x5E, 0x00);i2c_eeprom_write_byte(address, 0x5F, 0x80);i2c_eeprom_write_byte(address, 0x60, 0xAB);i2c_eeprom_write_byte(address, 0x61, 0x7F);i2c_eeprom_write_byte(address, 0x62, 0xE9);i2c_eeprom_write_byte(address, 0x63, 0x80);i2c_eeprom_write_byte(address, 0x64, 0x01);i2c_eeprom_write_byte(address, 0x65, 0x00);i2c_eeprom_write_byte(address, 0x66, 0x8F);i2c_eeprom_write_byte(address, 0x67, 0x2A);i2c_eeprom_write_byte(address, 0x68, 0x00);i2c_eeprom_write_byte(address, 0x69, 0x00);i2c_eeprom_write_byte(address, 0x6A, 0x00);i2c_eeprom_write_byte(address, 0x6B, 0x00);i2c_eeprom_write_byte(address, 0x6C, 0x00);i2c_eeprom_write_byte(address, 0x6D, 0x00);i2c_eeprom_write_byte(address, 0x6E, 0x00);i2c_eeprom_write_byte(address, 0x6F, 0x00);i2c_eeprom_write_byte(address, 0x70, 0x47);i2c_eeprom_write_byte(address, 0x71, 0x7F);i2c_eeprom_write_byte(address, 0x72, 0x00);i2c_eeprom_write_byte(address, 0x73, 0x80);i2c_eeprom_write_byte(address, 0x74, 0x4A);i2c_eeprom_write_byte(address, 0x75, 0x81);i2c_eeprom_write_byte(address, 0x76, 0xE0);i2c_eeprom_write_byte(address, 0x77, 0x7C);i2c_eeprom_write_byte(address, 0x78, 0xD2);i2c_eeprom_write_byte(address, 0x79, 0x2C);i2c_eeprom_write_byte(address, 0x7A, 0x00);i2c_eeprom_write_byte(address, 0x7B, 0x00);i2c_eeprom_write_byte(address, 0x7C, 0x00);i2c_eeprom_write_byte(address, 0x7D, 0x00);i2c_eeprom_write_byte(address, 0x7E, 0x00);i2c_eeprom_write_byte(address, 0x7F, 0x00);i2c_eeprom_write_byte(address, 0x80, 0x00);i2c_eeprom_write_byte(address, 0x81, 0x00);i2c_eeprom_write_byte(address, 0x82, 0x00);i2c_eeprom_write_byte(address, 0x83, 0x0E);i2c_eeprom_write_byte(address, 0x84, 0x00);i2c_eeprom_write_byte(address, 0x85, 0x10);i2c_eeprom_write_byte(address, 0x86, 0x1E);i2c_eeprom_write_byte(address, 0x87, 0x18);i2c_eeprom_write_byte(address, 0x88, 0x00);i2c_eeprom_write_byte(address, 0x89, 0x00);i2c_eeprom_write_byte(address, 0x8A, 0x0C);i2c_eeprom_write_byte(address, 0x8B, 0x12);i2c_eeprom_write_byte(address, 0x8C, 0x13);i2c_eeprom_write_byte(address, 0x8D, 0x07);i2c_eeprom_write_byte(address, 0x8E, 0x03);i2c_eeprom_write_byte(address, 0x8F, 0x01);i2c_eeprom_write_byte(address, 0x90, 0x00);i2c_eeprom_write_byte(address, 0x91, 0x00);i2c_eeprom_write_byte(address, 0x92, 0x00);i2c_eeprom_write_byte(address, 0x93, 0x0F);i2c_eeprom_write_byte(address, 0x94, 0x00);i2c_eeprom_write_byte(address, 0x95, 0x11);i2c_eeprom_write_byte(address, 0x96, 0x00);Serial.println("Almost there.");i2c_eeprom_write_byte(address, 0x97, 0x19);i2c_eeprom_write_byte(address, 0x98, 0x00);i2c_eeprom_write_byte(address, 0x99, 0x00);i2c_eeprom_write_byte(address, 0x9A, 0x0D);i2c_eeprom_write_byte(address, 0x9B, 0x00);i2c_eeprom_write_byte(address, 0x9C, 0x15);i2c_eeprom_write_byte(address, 0x9D, 0x09);i2c_eeprom_write_byte(address, 0x9E, 0x04);i2c_eeprom_write_byte(address, 0x9F, 0x02);i2c_eeprom_write_byte(address, 0xA0, 0x00);i2c_eeprom_write_byte(address, 0xA1, 0x00);i2c_eeprom_write_byte(address, 0xA2, 0x00);i2c_eeprom_write_byte(address, 0xA3, 0x00);i2c_eeprom_write_byte(address, 0xA4, 0x00);i2c_eeprom_write_byte(address, 0xA5, 0x00);i2c_eeprom_write_byte(address, 0xA6, 0x00);i2c_eeprom_write_byte(address, 0xA7, 0x00);i2c_eeprom_write_byte(address, 0xA8, 0x00);i2c_eeprom_write_byte(address, 0xA9, 0x00);i2c_eeprom_write_byte(address, 0xAA, 0x00);i2c_eeprom_write_byte(address, 0xAB, 0x00);i2c_eeprom_write_byte(address, 0xAC, 0x00);i2c_eeprom_write_byte(address, 0xAD, 0x0A);i2c_eeprom_write_byte(address, 0xAE, 0x00);i2c_eeprom_write_byte(address, 0xAF, 0x00);i2c_eeprom_write_byte(address, 0xB0, 0x00);i2c_eeprom_write_byte(address, 0xB1, 0x00);i2c_eeprom_write_byte(address, 0xB2, 0x00);i2c_eeprom_write_byte(address, 0xB3, 0x00);i2c_eeprom_write_byte(address, 0xB4, 0x00);i2c_eeprom_write_byte(address, 0xB5, 0x00);i2c_eeprom_write_byte(address, 0xB6, 0x00);i2c_eeprom_write_byte(address, 0xB7, 0x00);i2c_eeprom_write_byte(address, 0xB8, 0x00);i2c_eeprom_write_byte(address, 0xB9, 0x00);i2c_eeprom_write_byte(address, 0xBA, 0x00);i2c_eeprom_write_byte(address, 0xBB, 0x00);i2c_eeprom_write_byte(address, 0xBC, 0x00);i2c_eeprom_write_byte(address, 0xBD, 0x0B);i2c_eeprom_write_byte(address, 0xBE, 0x00);i2c_eeprom_write_byte(address, 0xBF, 0x00);i2c_eeprom_write_byte(address, 0xC0, 0x0D);i2c_eeprom_write_byte(address, 0xC1, 0x00);i2c_eeprom_write_byte(address, 0xC2, 0x02);i2c_eeprom_write_byte(address, 0xC3, 0x20);i2c_eeprom_write_byte(address, 0xC4, 0x0D);i2c_eeprom_write_byte(address, 0xC5, 0x00);i2c_eeprom_write_byte(address, 0xC6, 0x03);i2c_eeprom_write_byte(address, 0xC7, 0x20);i2c_eeprom_write_byte(address, 0xC8, 0x20);i2c_eeprom_write_byte(address, 0xC9, 0x00);i2c_eeprom_write_byte(address, 0xCA, 0x03);i2c_eeprom_write_byte(address, 0xCB, 0x20);i2c_eeprom_write_byte(address, 0xCC, 0x20);i2c_eeprom_write_byte(address, 0xCD, 0x00);i2c_eeprom_write_byte(address, 0xCE, 0x03);i2c_eeprom_write_byte(address, 0xCF, 0x10);i2c_eeprom_write_byte(address, 0xD0, 0x41);i2c_eeprom_write_byte(address, 0xD1, 0x00);i2c_eeprom_write_byte(address, 0xD2, 0x03);i2c_eeprom_write_byte(address, 0xD3, 0x08);i2c_eeprom_write_byte(address, 0xD4, 0x41);i2c_eeprom_write_byte(address, 0xD5, 0x00);i2c_eeprom_write_byte(address, 0xD6, 0x03);i2c_eeprom_write_byte(address, 0xD7, 0x05);i2c_eeprom_write_byte(address, 0xD8, 0x41);i2c_eeprom_write_byte(address, 0xD9, 0x00);i2c_eeprom_write_byte(address, 0xDA, 0x03);i2c_eeprom_write_byte(address, 0xDB, 0x05);i2c_eeprom_write_byte(address, 0xDC, 0x0D);i2c_eeprom_write_byte(address, 0xDD, 0x00);i2c_eeprom_write_byte(address, 0xDE, 0x02);i2c_eeprom_write_byte(address, 0xDF, 0x20);i2c_eeprom_write_byte(address, 0xE0, 0xE2);i2c_eeprom_write_byte(address, 0xE1, 0xF1);i2c_eeprom_write_byte(address, 0xE2, 0x0B);i2c_eeprom_write_byte(address, 0xE3, 0x80);i2c_eeprom_write_byte(address, 0xE4, 0x00);i2c_eeprom_write_byte(address, 0xE5, 0x80);i2c_eeprom_write_byte(address, 0xE6, 0x00);i2c_eeprom_write_byte(address, 0xE7, 0x80);i2c_eeprom_write_byte(address, 0xE8, 0x00);i2c_eeprom_write_byte(address, 0xE9, 0x80);i2c_eeprom_write_byte(address, 0xEA, 0x00);i2c_eeprom_write_byte(address, 0xEB, 0x80);i2c_eeprom_write_byte(address, 0xEC, 0x00);i2c_eeprom_write_byte(address, 0xED, 0x80);i2c_eeprom_write_byte(address, 0xEE, 0x00);i2c_eeprom_write_byte(address, 0xEF, 0x80);i2c_eeprom_write_byte(address, 0xF0, 0x00);i2c_eeprom_write_byte(address, 0xF1, 0x80);i2c_eeprom_write_byte(address, 0xF2, 0x00);i2c_eeprom_write_byte(address, 0xF3, 0x80);i2c_eeprom_write_byte(address, 0xF4, 0x00);i2c_eeprom_write_byte(address, 0xF5, 0x80);i2c_eeprom_write_byte(address, 0xF6, 0x00);i2c_eeprom_write_byte(address, 0xF7, 0x80);i2c_eeprom_write_byte(address, 0xF8, 0x5A);i2c_eeprom_write_byte(address, 0xF9, 0xC7);i2c_eeprom_write_byte(address, 0xFA, 0xEC);i2c_eeprom_write_byte(address, 0xFB, 0x0F);i2c_eeprom_write_byte(address, 0xFC, 0x0F);i2c_eeprom_write_byte(address, 0xFD, 0x80);i2c_eeprom_write_byte(address, 0xFE, 0x00);i2c_eeprom_write_byte(address, 0xFF, 0x00);Serial.println("DONE.");}void restore139ceeprom(byte address){Serial.println("Restoring UNI-T 139C EEPROM, stop now if you dont have that one...");delay(5000);Serial.println("There is no way back now.");i2c_eeprom_write_byte(address, 0x00, 0xFF);i2c_eeprom_write_byte(address, 0x01, 0xFF);i2c_eeprom_write_byte(address, 0x02, 0xFF);i2c_eeprom_write_byte(address, 0x03, 0xFF);i2c_eeprom_write_byte(address, 0x04, 0xFF);i2c_eeprom_write_byte(address, 0x05, 0xFF);i2c_eeprom_write_byte(address, 0x06, 0xFF);i2c_eeprom_write_byte(address, 0x07, 0xFF);i2c_eeprom_write_byte(address, 0x08, 0xFF);i2c_eeprom_write_byte(address, 0x09, 0x52);i2c_eeprom_write_byte(address, 0x0A, 0x00);i2c_eeprom_write_byte(address, 0x0B, 0x04);i2c_eeprom_write_byte(address, 0x0C, 0x01);i2c_eeprom_write_byte(address, 0x0D, 0x0C);i2c_eeprom_write_byte(address, 0x0E, 0xC1);i2c_eeprom_write_byte(address, 0x0F, 0x03);i2c_eeprom_write_byte(address, 0x10, 0x10);i2c_eeprom_write_byte(address, 0x11, 0x27);i2c_eeprom_write_byte(address, 0x12, 0x38);i2c_eeprom_write_byte(address, 0x13, 0x18);i2c_eeprom_write_byte(address, 0x14, 0x4E);i2c_eeprom_write_byte(address, 0x15, 0x02);i2c_eeprom_write_byte(address, 0x16, 0x65);i2c_eeprom_write_byte(address, 0x17, 0x4B);i2c_eeprom_write_byte(address, 0x18, 0x3D);i2c_eeprom_write_byte(address, 0x19, 0x3D);i2c_eeprom_write_byte(address, 0x1A, 0xFF);i2c_eeprom_write_byte(address, 0x1B, 0x3B);i2c_eeprom_write_byte(address, 0x1C, 0x0A);i2c_eeprom_write_byte(address, 0x1D, 0xFF);i2c_eeprom_write_byte(address, 0x1E, 0x40);Serial.println("10%");i2c_eeprom_write_byte(address, 0x1F, 0xFF);i2c_eeprom_write_byte(address, 0x20, 0x96);i2c_eeprom_write_byte(address, 0x21, 0x98);i2c_eeprom_write_byte(address, 0x22, 0x58);i2c_eeprom_write_byte(address, 0x23, 0x81);i2c_eeprom_write_byte(address, 0x24, 0xFA);i2c_eeprom_write_byte(address, 0x25, 0x00);i2c_eeprom_write_byte(address, 0x26, 0x32);i2c_eeprom_write_byte(address, 0x27, 0x00);i2c_eeprom_write_byte(address, 0x28, 0x00);i2c_eeprom_write_byte(address, 0x29, 0x80);i2c_eeprom_write_byte(address, 0x2A, 0x00);i2c_eeprom_write_byte(address, 0x2B, 0x80);i2c_eeprom_write_byte(address, 0x2C, 0xA3);i2c_eeprom_write_byte(address, 0x2D, 0x7D);i2c_eeprom_write_byte(address, 0x2E, 0xF3);i2c_eeprom_write_byte(address, 0x2F, 0xAD);i2c_eeprom_write_byte(address, 0x30, 0x4E);i2c_eeprom_write_byte(address, 0x31, 0x02);i2c_eeprom_write_byte(address, 0x32, 0x09);i2c_eeprom_write_byte(address, 0x33, 0x1C);i2c_eeprom_write_byte(address, 0x34, 0x02);i2c_eeprom_write_byte(address, 0x35, 0x09);i2c_eeprom_write_byte(address, 0x36, 0xA6);i2c_eeprom_write_byte(address, 0x37, 0x00);i2c_eeprom_write_byte(address, 0x38, 0x0B);i2c_eeprom_write_byte(address, 0x39, 0x41);i2c_eeprom_write_byte(address, 0x3A, 0x14);i2c_eeprom_write_byte(address, 0x3B, 0x0A);i2c_eeprom_write_byte(address, 0x3C, 0x1C);i2c_eeprom_write_byte(address, 0x3D, 0x03);i2c_eeprom_write_byte(address, 0x3E, 0x0A);i2c_eeprom_write_byte(address, 0x3F, 0x00);i2c_eeprom_write_byte(address, 0x40, 0x00);i2c_eeprom_write_byte(address, 0x41, 0x01);i2c_eeprom_write_byte(address, 0x42, 0x00);i2c_eeprom_write_byte(address, 0x43, 0x01);i2c_eeprom_write_byte(address, 0x44, 0x00);i2c_eeprom_write_byte(address, 0x45, 0x07);i2c_eeprom_write_byte(address, 0x46, 0x98);i2c_eeprom_write_byte(address, 0x47, 0x00);i2c_eeprom_write_byte(address, 0x48, 0x64);i2c_eeprom_write_byte(address, 0x49, 0x00);i2c_eeprom_write_byte(address, 0x4A, 0x64);i2c_eeprom_write_byte(address, 0x4B, 0x00);i2c_eeprom_write_byte(address, 0x4C, 0x64);i2c_eeprom_write_byte(address, 0x4D, 0x00);i2c_eeprom_write_byte(address, 0x4E, 0x00);Serial.println("30%");i2c_eeprom_write_byte(address, 0x4F, 0x00);i2c_eeprom_write_byte(address, 0x50, 0x00);i2c_eeprom_write_byte(address, 0x51, 0x80);i2c_eeprom_write_byte(address, 0x52, 0x00);i2c_eeprom_write_byte(address, 0x53, 0x80);i2c_eeprom_write_byte(address, 0x54, 0x00);i2c_eeprom_write_byte(address, 0x55, 0x80);i2c_eeprom_write_byte(address, 0x56, 0x00);i2c_eeprom_write_byte(address, 0x57, 0x80);i2c_eeprom_write_byte(address, 0x58, 0x00);i2c_eeprom_write_byte(address, 0x59, 0x80);i2c_eeprom_write_byte(address, 0x5A, 0x00);i2c_eeprom_write_byte(address, 0x5B, 0x80);i2c_eeprom_write_byte(address, 0x5C, 0x00);i2c_eeprom_write_byte(address, 0x5D, 0x80);i2c_eeprom_write_byte(address, 0x5E, 0x00);i2c_eeprom_write_byte(address, 0x5F, 0x80);i2c_eeprom_write_byte(address, 0x60, 0xAB);i2c_eeprom_write_byte(address, 0x61, 0x7F);i2c_eeprom_write_byte(address, 0x62, 0xE9);i2c_eeprom_write_byte(address, 0x63, 0x80);i2c_eeprom_write_byte(address, 0x64, 0x01);i2c_eeprom_write_byte(address, 0x65, 0x00);i2c_eeprom_write_byte(address, 0x66, 0x8F);i2c_eeprom_write_byte(address, 0x67, 0x2A);i2c_eeprom_write_byte(address, 0x68, 0x00);i2c_eeprom_write_byte(address, 0x69, 0x00);i2c_eeprom_write_byte(address, 0x6A, 0x00);i2c_eeprom_write_byte(address, 0x6B, 0x00);i2c_eeprom_write_byte(address, 0x6C, 0x00);i2c_eeprom_write_byte(address, 0x6D, 0x00);i2c_eeprom_write_byte(address, 0x6E, 0x00);i2c_eeprom_write_byte(address, 0x6F, 0x00);i2c_eeprom_write_byte(address, 0x70, 0x47);i2c_eeprom_write_byte(address, 0x71, 0x7F);i2c_eeprom_write_byte(address, 0x72, 0x00);i2c_eeprom_write_byte(address, 0x73, 0x80);i2c_eeprom_write_byte(address, 0x74, 0x4A);i2c_eeprom_write_byte(address, 0x75, 0x81);i2c_eeprom_write_byte(address, 0x76, 0xE0);i2c_eeprom_write_byte(address, 0x77, 0x7C);i2c_eeprom_write_byte(address, 0x78, 0xD2);i2c_eeprom_write_byte(address, 0x79, 0x2C);i2c_eeprom_write_byte(address, 0x7A, 0x00);i2c_eeprom_write_byte(address, 0x7B, 0x00);i2c_eeprom_write_byte(address, 0x7C, 0x00);i2c_eeprom_write_byte(address, 0x7D, 0x00);i2c_eeprom_write_byte(address, 0x7E, 0x00);i2c_eeprom_write_byte(address, 0x7F, 0x00);i2c_eeprom_write_byte(address, 0x80, 0x00);i2c_eeprom_write_byte(address, 0x81, 0x00);i2c_eeprom_write_byte(address, 0x82, 0x00);i2c_eeprom_write_byte(address, 0x83, 0x0E);i2c_eeprom_write_byte(address, 0x84, 0x00);i2c_eeprom_write_byte(address, 0x85, 0x10);i2c_eeprom_write_byte(address, 0x86, 0x1E);i2c_eeprom_write_byte(address, 0x87, 0x18);i2c_eeprom_write_byte(address, 0x88, 0x00);i2c_eeprom_write_byte(address, 0x89, 0x00);i2c_eeprom_write_byte(address, 0x8A, 0x0C);i2c_eeprom_write_byte(address, 0x8B, 0x12);i2c_eeprom_write_byte(address, 0x8C, 0x13);i2c_eeprom_write_byte(address, 0x8D, 0x07);i2c_eeprom_write_byte(address, 0x8E, 0x03);i2c_eeprom_write_byte(address, 0x8F, 0x01);i2c_eeprom_write_byte(address, 0x90, 0x00);i2c_eeprom_write_byte(address, 0x91, 0x00);i2c_eeprom_write_byte(address, 0x92, 0x00);i2c_eeprom_write_byte(address, 0x93, 0x0F);Serial.println("50%");i2c_eeprom_write_byte(address, 0x94, 0x00);i2c_eeprom_write_byte(address, 0x95, 0x11);i2c_eeprom_write_byte(address, 0x96, 0x00);i2c_eeprom_write_byte(address, 0x97, 0x19);i2c_eeprom_write_byte(address, 0x98, 0x00);i2c_eeprom_write_byte(address, 0x99, 0x00);i2c_eeprom_write_byte(address, 0x9A, 0x0D);i2c_eeprom_write_byte(address, 0x9B, 0x00);i2c_eeprom_write_byte(address, 0x9C, 0x15);i2c_eeprom_write_byte(address, 0x9D, 0x09);i2c_eeprom_write_byte(address, 0x9E, 0x04);i2c_eeprom_write_byte(address, 0x9F, 0x02);i2c_eeprom_write_byte(address, 0xA0, 0x00);i2c_eeprom_write_byte(address, 0xA1, 0x00);i2c_eeprom_write_byte(address, 0xA2, 0x00);i2c_eeprom_write_byte(address, 0xA3, 0x00);i2c_eeprom_write_byte(address, 0xA4, 0x00);i2c_eeprom_write_byte(address, 0xA5, 0x00);i2c_eeprom_write_byte(address, 0xA6, 0x00);i2c_eeprom_write_byte(address, 0xA7, 0x00);i2c_eeprom_write_byte(address, 0xA8, 0x00);i2c_eeprom_write_byte(address, 0xA9, 0x00);i2c_eeprom_write_byte(address, 0xAA, 0x00);i2c_eeprom_write_byte(address, 0xAB, 0x00);i2c_eeprom_write_byte(address, 0xAC, 0x00);i2c_eeprom_write_byte(address, 0xAD, 0x0A);i2c_eeprom_write_byte(address, 0xAE, 0x00);i2c_eeprom_write_byte(address, 0xAF, 0x00);i2c_eeprom_write_byte(address, 0xB0, 0x00);i2c_eeprom_write_byte(address, 0xB1, 0x00);i2c_eeprom_write_byte(address, 0xB2, 0x00);i2c_eeprom_write_byte(address, 0xB3, 0x00);i2c_eeprom_write_byte(address, 0xB4, 0x00);i2c_eeprom_write_byte(address, 0xB5, 0x00);i2c_eeprom_write_byte(address, 0xB6, 0x00);i2c_eeprom_write_byte(address, 0xB7, 0x00);i2c_eeprom_write_byte(address, 0xB8, 0x00);i2c_eeprom_write_byte(address, 0xB9, 0x00);i2c_eeprom_write_byte(address, 0xBA, 0x00);i2c_eeprom_write_byte(address, 0xBB, 0x00);i2c_eeprom_write_byte(address, 0xBC, 0x00);i2c_eeprom_write_byte(address, 0xBD, 0x0B);i2c_eeprom_write_byte(address, 0xBE, 0x00);i2c_eeprom_write_byte(address, 0xBF, 0x00);i2c_eeprom_write_byte(address, 0xC0, 0x0D);i2c_eeprom_write_byte(address, 0xC1, 0x00);i2c_eeprom_write_byte(address, 0xC2, 0x02);i2c_eeprom_write_byte(address, 0xC3, 0x20);i2c_eeprom_write_byte(address, 0xC4, 0x0D);i2c_eeprom_write_byte(address, 0xC5, 0x00);i2c_eeprom_write_byte(address, 0xC6, 0x03);i2c_eeprom_write_byte(address, 0xC7, 0x20);Serial.println("80%");i2c_eeprom_write_byte(address, 0xC8, 0x20);i2c_eeprom_write_byte(address, 0xC9, 0x00);i2c_eeprom_write_byte(address, 0xCA, 0x03);i2c_eeprom_write_byte(address, 0xCB, 0x20);i2c_eeprom_write_byte(address, 0xCC, 0x20);i2c_eeprom_write_byte(address, 0xCD, 0x00);i2c_eeprom_write_byte(address, 0xCE, 0x03);i2c_eeprom_write_byte(address, 0xCF, 0x10);i2c_eeprom_write_byte(address, 0xD0, 0x41);i2c_eeprom_write_byte(address, 0xD1, 0x00);i2c_eeprom_write_byte(address, 0xD2, 0x03);i2c_eeprom_write_byte(address, 0xD3, 0x08);i2c_eeprom_write_byte(address, 0xD4, 0x41);i2c_eeprom_write_byte(address, 0xD5, 0x00);i2c_eeprom_write_byte(address, 0xD6, 0x03);i2c_eeprom_write_byte(address, 0xD7, 0x05);i2c_eeprom_write_byte(address, 0xD8, 0x41);i2c_eeprom_write_byte(address, 0xD9, 0x00);i2c_eeprom_write_byte(address, 0xDA, 0x03);i2c_eeprom_write_byte(address, 0xDB, 0x05);i2c_eeprom_write_byte(address, 0xDC, 0x0D);i2c_eeprom_write_byte(address, 0xDD, 0x00);i2c_eeprom_write_byte(address, 0xDE, 0x02);i2c_eeprom_write_byte(address, 0xDF, 0x20);i2c_eeprom_write_byte(address, 0xE0, 0xE2);i2c_eeprom_write_byte(address, 0xE1, 0xF1);i2c_eeprom_write_byte(address, 0xE2, 0x0B);i2c_eeprom_write_byte(address, 0xE3, 0x80);i2c_eeprom_write_byte(address, 0xE4, 0x00);i2c_eeprom_write_byte(address, 0xE5, 0x80);i2c_eeprom_write_byte(address, 0xE6, 0x00);i2c_eeprom_write_byte(address, 0xE7, 0x80);i2c_eeprom_write_byte(address, 0xE8, 0x00);i2c_eeprom_write_byte(address, 0xE9, 0x80);i2c_eeprom_write_byte(address, 0xEA, 0x00);i2c_eeprom_write_byte(address, 0xEB, 0x80);i2c_eeprom_write_byte(address, 0xEC, 0x00);i2c_eeprom_write_byte(address, 0xED, 0x80);i2c_eeprom_write_byte(address, 0xEE, 0x00);i2c_eeprom_write_byte(address, 0xEF, 0x80);i2c_eeprom_write_byte(address, 0xF0, 0x00);i2c_eeprom_write_byte(address, 0xF1, 0x80);i2c_eeprom_write_byte(address, 0xF2, 0x00);i2c_eeprom_write_byte(address, 0xF3, 0x80);i2c_eeprom_write_byte(address, 0xF4, 0x00);i2c_eeprom_write_byte(address, 0xF5, 0x80);i2c_eeprom_write_byte(address, 0xF6, 0x00);i2c_eeprom_write_byte(address, 0xF7, 0x80);i2c_eeprom_write_byte(address, 0xF8, 0x5A);i2c_eeprom_write_byte(address, 0xF9, 0xC7);i2c_eeprom_write_byte(address, 0xFA, 0xEC);i2c_eeprom_write_byte(address, 0xFB, 0x0F);i2c_eeprom_write_byte(address, 0xFC, 0x0F);i2c_eeprom_write_byte(address, 0xFD, 0x80);i2c_eeprom_write_byte(address, 0xFE, 0x00);i2c_eeprom_write_byte(address, 0xFF, 0x00);Serial.println("DONE.");}void enableRS232() {Serial.println("Enabling RS232");i2c_eeprom_write_byte(0x50, 0xFA, 0xCE);Serial.println("Done");}void extendPowerOn() {Serial.println("Extending Power On time");i2c_eeprom_write_byte(0x50, 0xFB, 0x1e);Serial.println("Done");}void VLCD() {Serial.println("Setting LCD bias to 3.3V");i2c_eeprom_write_byte(0x50, 0xF9, 0xC3);Serial.println("Done");}void enable8000Count() {Serial.println("Enabling 8000 Count Mode");// Enable 8000 Count - Values taken from - this thread. May require a little polishing, but do appear to work.// https://www.eevblog.com/forum/testgear/canadian-tire-mastercraft-dmm-new-and-old-revision-teardown/msg928377/#msg928377i2c_eeprom_write_byte(0x50, 0x10, 0x40); // Full Scale 0x1F40 - 8000i2c_eeprom_write_byte(0x50, 0x11, 0x1F); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x12, 0x41); // Range Up 0x1F41 - 8001i2c_eeprom_write_byte(0x50, 0x13, 0x1F); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x14, 0xEE); // Range down value, changed to 750 (0x02EE).i2c_eeprom_write_byte(0x50, 0x15, 0x02); // Note: Little endian byte swapSerial.println("Done");}void enable6000Count() {Serial.println("Enabling 6000 Count Mode");// Enable 6000 Count - values similar to 8000 count mode, but based on Kerry Wong's ennoLogic eM860T dumpi2c_eeprom_write_byte(0x50, 0x10, 0x70); // Full Scale 0x1710 - 5904i2c_eeprom_write_byte(0x50, 0x11, 0x17); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x12, 0x17); // Range Up 0x1838 - 6200i2c_eeprom_write_byte(0x50, 0x13, 0x71); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x14, 0x44); // Range down value, changed to 580 (0x0244).i2c_eeprom_write_byte(0x50, 0x15, 0x02); // Note: Little endian byte swapSerial.println("Done");}void enable4000Count() {Serial.println("Enabling 4000 Count Mode");// Enable 4000 Count - these values are taken from the Victor VC921 unmodified dump.i2c_eeprom_write_byte(0x50, 0x10, 0xA0); // Full Scale 0x0FA0 - 4000i2c_eeprom_write_byte(0x50, 0x11, 0x0F); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x12, 0x68); // Range Up 0x1068 - 4200i2c_eeprom_write_byte(0x50, 0x13, 0x10); // Note: Little endian byte swap//i2c_eeprom_write_byte(0x50, 0x14, 0x7C); // Range down value, changed to 380 (0x017C).i2c_eeprom_write_byte(0x50, 0x15, 0x01); // Note: Little endian byte swapSerial.println("Done");}However it does not fix the problemanyone knows what else can I do?Thanks!