Author Topic: UNI-T 139C restore eeprom  (Read 1638 times)

0 Members and 1 Guest are viewing this topic.

Offline Erwin RiedTopic starter

  • Regular Contributor
  • *
  • Posts: 202
  • Country: no
UNI-T 139C restore eeprom
« on: October 03, 2019, 08:59:57 am »
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: [Select]
// --------------------------------------
// Modified i2c_scanner to find, dump and update a DTM0660 based multimeter EEPROM
// to hack in missing features.
//
// See [url]http://www.kerrywong.com/2016/03/19/hacking-dtm0660l-based-multimeters/comment-page-1/#comment-874169[/url]
// 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
//    [url]http://www.gammon.com.au/forum/?id=10896[/url]
// 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 [url]http://playground.arduino.cc/Code/I2CEEPROM[/url]
//
// This code was written for and tested on and STM32F103C8T6 - the so called BluePill -  see [url]http://wiki.stm32duino.com/index.php?title=Blue_Pill[/url]
// 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 [url]http://stm32duino.com[/url] 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_POWER
  pinMode(BOARD_POWER, OUTPUT);
  digitalWrite(BOARD_POWER, HIGH);

  //Enable writing to the eeprom
  pinMode(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");
  else
    Serial.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 byte
    addrPointer++;                                      // increment address pointer
    if (b < 0x10) {
      Serial.print("0");
    }
    Serial.print(b, HEX);                               // Print byte
    Serial.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.
  // [url]https://www.eevblog.com/forum/testgear/canadian-tire-mastercraft-dmm-new-and-old-revision-teardown/msg928377/#msg928377[/url]
  i2c_eeprom_write_byte(0x50, 0x10,  0x40); // Full Scale 0x1F40 - 8000
  i2c_eeprom_write_byte(0x50, 0x11,  0x1F); // Note: Little endian byte swap
  //
  i2c_eeprom_write_byte(0x50, 0x12,  0x41); // Range Up 0x1F41 - 8001
  i2c_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 swap
  Serial.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 dump
  i2c_eeprom_write_byte(0x50, 0x10,  0x70); // Full Scale 0x1710 - 5904
  i2c_eeprom_write_byte(0x50, 0x11,  0x17); // Note: Little endian byte swap
  //
  i2c_eeprom_write_byte(0x50, 0x12,  0x17); // Range Up 0x1838 - 6200
  i2c_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 swap
  Serial.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 - 4000
  i2c_eeprom_write_byte(0x50, 0x11,  0x0F); // Note: Little endian byte swap
  //
  i2c_eeprom_write_byte(0x50, 0x12,  0x68); // Range Up 0x1068 - 4200
  i2c_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 swap
  Serial.println("Done");
}


However it does not fix the problem :( anyone knows what else can I do?

Thanks!
My website: http://ried.cl
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf