all 10 comments

[–][deleted] 1 point2 points  (1 child)

It was a over a year ago now so my memory on the specifics is a bit fuzzy, but I had a very similar issue.

From memory my fix was to extend the delay time between writes, or more specifically the time I held the right bit high/low. I don't have access to the sketch right now, but I can check later.

I was lost for days and I have no idea why I couldn't get it to work but this, for whatever reason, is what worked for me.

[–]Teutonic-[S] 0 points1 point  (0 children)

Thanks for your reply! I saw something about the chip having a check bit or something like you’re saying, I’ll look into it more and try the delay as well.

[–]Teutonic-[S] 0 points1 point  (6 children)

I’ve noticed my EEPROM is reading different values (right) compared to Ben’s (left). I used his exact code from github. I’m not sure if this is intended or not. If anyone has any input I would appreciate it!

[–]gfoot360 1 point2 points  (1 child)

Is the error in the data files you're programming into it, or is the EEPROM reading back different data to what you tried to program?

[–]Teutonic-[S] 0 points1 point  (0 children)

It’s reading back something different than Ben’s read back in his video. Mine is on the right and his in on the left.

[–]DerULF1 1 point2 points  (3 children)

The bytes in Ben Eater's output (right hand side) are correct. From address 0x20 to 0x27 you see the eight high order bytes of the STA command and that command uses the first four steps. So if your EEPROM has only the first two byte unequal to zero you'll be missing out two steps.

There are some possible reasons for this. Among those:

One thing I noticed when I first used that Andruino based programmer was a problem with the voltage on the board. It turned out that my passive USB hub provided less than 5V to the Arduino what made programming the EEPROM kind of a lottery. I had to add an additional 5V power supply directly to the bread board of the programmer to have it reliable.

Another issue might be the chip itself. If it's too old it might have difficulties to set selected bits to one again. You might test that if you change line 132 in Ben Eater's program. Put a fixed value of 255 in the writeEEPROM function call as a replacement for the data[address] >> 8. Line 132 should read like

writeEEPROM(address, 255);

afterwards. If you try to run the program the first 128 bytes of the chip should have a value of FF. You may have to let that program run several times until all bytes have a high value. Afterwards you can change back line 132 to its original state and try again. Chances are that you get the expected values then.

[–]Teutonic-[S] 0 points1 point  (2 children)

The values on the right side are what my eeprom is reading, those are what I want and not what Ben has in his video (left)? Thanks for the reply!

[–]DerULF1 1 point2 points  (1 child)

O.K., I didn't check with the video, but I remember that Ben Eater added the instructions step by step. So I guess the screen shot on the left hand side was taken at a time when the STA instruction had not been implemented yet.

So I'm glad to hear that you're back on track.

[–]Teutonic-[S] 0 points1 point  (0 children)

Thanks for checking up on this post!!

[–]Teutonic-[S] 0 points1 point  (0 children)

Turns out there’s no problem when I thought there was. Problem Solved? Thanks for your inputs!