>I didn't see anything obviously wrong with your code, but I did not look >closely at it. Some general things though: I've added some delay's at a few points and changed the start condition... Now it is working OK. >Remember that I2C is a multidrop interface which should have a passive >pull-up to generate logic 1's on both clock and data. In practice if you >only have a single slave that does not clock stretch (EEPROMs in general >don't) you can drive the clock high and low actively. Don't know where I read this but it was say that you should use a 10K resistor for 100Khz and 2k2 for a 400Khz bus. >You should use an open drain to drive these lines which have passive >pull-ups. This allows you to simply wire-or two pins together, configure >one as input, and the other as output and avoid changing the tris register >for every byte transfered. This takes four PIC pins instead of two, but >the simplification in the code is worth it. I don't have any pins left... >An oscilloscope is an excellent investment for this kind of work. A DSO >works best, of course. Ehh, I'm just a student... I don't have the money to buy a scope... Unfortually >Get the phillips spec for I2C, it's much better than what comes with the >EEPROM. I'll have a look, Thanx.