How do you program an EEPROM?

Hi,
I'm using some TLC5940 LED driver chips to light a sign. The chips have a function called Dot Correction which is an offset for each channel that allows you to change the current for each channel to compensate for brightness differences between LEDs. Here is the datasheet.

So I made an array of dot correction data. Normally it gets loaded into a register in my setup() routine. But I'd like to make it permanent and use the other option which is to load it into the EEPROM of the chips by applying 23V to the VPRG pin when loading the DC data.

I've gotten the DC control to work fine for me when just using the register, but I want to make it permanent in the EEPROM. However the literature is not making it clear to me quite how to do this. For instance, what does EEPROM data = 3 Fh (default) mean?

Would it be as simple as running the DC register programming code while I have VPRG = 23V?

Any help with this would be very much appreciated.

Which Arduino? Most of them have an internal EEPROM (or a simulation of an EEPROM) which means you don't need to mess around with old-style EEPROMs that need weird voltages like 23V.

Sorry, I should have been clearer, I meant the EEPROM on the TLC chip.

Perhaps you need to post your code.

Well...this uses the TLC5940 library package, so I don't really know the code to program the chip, only the subroutines I'm calling.

This is the code to load in the Dot Correction array.

const uint8_t dcArray1[NUM_TLCS * 12] PROGMEM = {
  //Channels 111-96
  DC_QUARTET(63, 63, 63, 63), DC_QUARTET(63, 63, 63, 18), //104
  DC_QUARTET(6, 63, 16, 19), DC_QUARTET(20, 27, 8, 63), //96
  //Channels 95-80
  DC_QUARTET(23, 25, 63, 13), DC_QUARTET(63, 23, 18, 8), //88
  DC_QUARTET(63, 9, 7, 9), DC_QUARTET(12, 9, 13, 11), //80
  //Channels 79-64
  DC_QUARTET(16, 8, 8, 8), DC_QUARTET(9, 9, 63, 12), //72
  DC_QUARTET(19, 7, 8, 20), DC_QUARTET(14, 7, 8, 10), //64
  //Channels 63-48
  DC_QUARTET(11, 10, 24, 10), DC_QUARTET(63, 63, 63, 63), //56
  DC_QUARTET(8, 27, 26, 63), DC_QUARTET(18, 8, 24, 63), //48
  //Channels 47-32
  DC_QUARTET(63, 10, 17, 12), DC_QUARTET(63, 13, 11, 63), //40
  DC_QUARTET(63, 63, 8, 6), DC_QUARTET(12, 11, 6, 7),    //32
  //Channels 31-16
  DC_QUARTET(17, 13, 4, 63), DC_QUARTET(63, 3, 13, 15),   //24
  DC_QUARTET(10, 63, 9, 10), DC_QUARTET(63, 13, 63, 63), //16
  //Channels 15-0
  DC_QUARTET(63, 63, 63, 63), DC_QUARTET(63, 63, 63, 63), //8
  DC_QUARTET(63, 18, 18, 63), DC_QUARTET(63, 63, 25, 25), //0
};

Then that's loaded into the TLC5940's registers with this call in the setup section...

tlc_setDCfromProgmem(dcArray1);

But I just could use some advice, if someone could lay an extra set of eyeballs on the datasheet, and confirm this is all I need to do, just with 23V applied to VPRG?

Sorry, I should have been clearer, I meant the EEPROM on the TLC chip.

Why? You can easily save the data in the Arduino's EEPROM. Where the data is saved doesn't seem all that important. Saving it in one place is hard. Saving it in another place is easy. Go for easy.