If things still are not working you ought to post some waveforms of the device's i2c read request and response. Chances are that it would be easy to see what the problem is from that information (eg. Pull ups too weak, incorrect clock stretching, wrong clock rate, etc.) On Monday, October 21, 2019, James Burkart wrote= : > I saw that. I do have a logic analyzer I'm using to debug. > > I gave up on my soft i2c code and I am earnestly trying to figure out how > to use the mcc foundation services simple i2c drivers. The reason I ditch= ed > it before is because it was slow. There was a long pause between every by= te > written and read. But I just dug into the driver and found where the dela= y > is and shortened it some. It's acceptable now. > > The delay is in a function labeled inline void mssp_waitForEvent(uint16_t > *timeout) > > There was a 100us delay located in a while loop that's checking for an > interrupt flag to set. If someone knows why it's even there, I'm all ears= .. > In the meantime, I'm moving on though I've noted where I made the change = in > case something gets wonky in the future. I'll eventually dig deeper to > understand the driver more. > > On Mon, Oct 21, 2019, 2:23 AM Chris Roper wrote: > > > If you have a PICKit 2 or 3 you can use the GUI as a crude Logic > > analyzer that will allow you to see your SLC and SDA lines and look at > the > > response and timing. It is a very useful and oft overlooked tool for th= is > > sort of debugging. > > > > On Mon, 21 Oct 2019 at 09:41, Joep Suijs wrote: > > > > > The slave is allowed to strech the clock. > > > I once had trouble with i2c software master code reading a slave. It > > turned > > > out the slave used clock streching to setup data requested by the > master. > > > The master didn't check the clock though, and read rubbish while the > > slave > > > was still busy preparing the requested data... > > > > > > Joep > > > > > > Op ma 21 okt. 2019 om 09:00 schreef James Burkart < > > > james@burkartstudios.com > > > >: > > > > > > > I haven't got to the clock stretching yet. I'm still just working o= n > > > > reading the I2C bus. > > > > -- > > > > Sincerely, > > > > > > > > James Burkart > > > > *925.667.7175* > > > > > > > > > > > > On Sun, Oct 20, 2019 at 11:12 PM Joep Suijs > wrote: > > > > > > > > > Hi James, > > > > > > > > > > I did check your code and didn't see where it actually checks for > the > > > > clock > > > > > to go high (that is, read input and check it, not fixed delay). > > Didn't > > > > > check all of your code though, so I might have missed it. > > > > > > > > > > Good luck. > > > > > Joep > > > > > > > > > > Op ma 21 okt. 2019 om 06:44 schreef James Burkart < > > > > > james@burkartstudios.com > > > > > >: > > > > > > > > > > > Thanks Joep, > > > > > > > > > > > > I appreciate the help. I do understand how I2C works, my > questions > > > are > > > > > > about my code. The port pins I am using for clock and data are > > > > operating > > > > > as > > > > > > open drain, so I'm not driving anything high. > > > > > > > > > > > > -- > > > > > > Sincerely, > > > > > > > > > > > > James Burkart > > > > > > *925.667.7175* > > > > > > > > > > > > > > > > > > On Sun, Oct 20, 2019 at 4:11 AM Joep Suijs > > wrote: > > > > > > > > > > > > > Hi James, > > > > > > > > > > > > > > The slave hold the clock low to hold off the master when it > needs > > > > time. > > > > > > So > > > > > > > after the master 'releases' the clock to go high, it needs to > > wait > > > > > until > > > > > > > the clock line actually is high before it can proceed. This i= s > > also > > > > the > > > > > > > reason you shouldn't drive clock high, only low... > > > > > > > > > > > > > > Joep > > > > > > > > > > > > > > Op zo 20 okt. 2019 om 00:23 schreef James Burkart < > > > > > > > james@burkartstudios.com > > > > > > > >: > > > > > > > > > > > > > > > I am using pull up resistors on both SCL and SDA. Analog is > > > > disabled > > > > > on > > > > > > > > RC7. The author of the original code mentions that he wrote > the > > > > code > > > > > to > > > > > > > be > > > > > > > > as universal as possible. I understand the reasoning, it's > just > > > > > > > > implementing it that's giving me issue. So I re wrote the > code > > > and > > > > am > > > > > > > using > > > > > > > > the open drain feature of my micro on SDA and SCL. But now > I'm > > > > trying > > > > > > to > > > > > > > > successfully read from SDA. > > > > > > > > > > > > > > > > On Sat, Oct 19, 2019, 4:13 PM Mike > > > > wrote: > > > > > > > > > > > > > > > > > Do you have pull-up resistors on both SCL and SDA? Have > you > > > > > > configured > > > > > > > > > the ANSELC register to disable analog input in RC7? > > > > > > > > > > > > > > > > > > Using the TRIS register to switch a pin between an input, > or > > an > > > > > > output > > > > > > > > > with a logic 0 level set is a common way of simulating an > > > > > open-drain > > > > > > > > > output if this function is not support in hardware. The > code > > > you > > > > > used > > > > > > > > > was very likely written for an old 14 bit part (16C/16Fxx > > etc.) > > > > > which > > > > > > > > > don't have open-drain outputs. > > > > > > > > > > > > > > > > > > Regards > > > > > > > > > > > > > > > > > > Mike > > > > > > > > > > > > > > > > > > On 19/10/2019 22:49, James Burkart wrote: > > > > > > > > > > I wrote up a bit-bang I2C routine to communicate with a > > > couple > > > > > > > devices, > > > > > > > > > an > > > > > > > > > > SSD1306 OLED and an MCP23018 port extender. I'm using a > > > > > > PIC18F27K40. > > > > > > > > > > > > > > > > > > > > I've got the sending data part just fine, but I can't > > figure > > > > out > > > > > > the > > > > > > > > > > receiving part, including reading acknowledge bits. I, = in > > > > large, > > > > > > > copied > > > > > > > > > the > > > > > > > > > > code example from a blog post by Calvin Cherry ( > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://calcium3000.wordpress.com/2016/08/19/i2c-bit- > banging-tutorial-part-i/ > > > > > > > > > > ). > > > > > > > > > > To be honest, the way he was switching SDA between an > input > > > and > > > > > > > output > > > > > > > > > was > > > > > > > > > > confusing to me and so I just enabled open drain on the > > port > > > > pins > > > > > > in > > > > > > > > > > question. And that's why I can write to the I2C bus jus= t > > > fine, > > > > > but > > > > > > > > > reading > > > > > > > > > > from it I am stumbling. For my bit read function I chan= ge > > the > > > > > port > > > > > > > pin > > > > > > > > > used > > > > > > > > > > for SDA to an input and read its value through > > PORTCbits.RC7 > > > > but > > > > > > it's > > > > > > > > > > always reading 0. > > > > > > > > > > > > > > > > > > > > I'd like to use the hardware I2C but I can't get the MC= C > > code > > > > to > > > > > > > work, > > > > > > > > > > either the Foundation Services version, nor the other o= ne > > > that > > > > is > > > > > > to > > > > > > > be > > > > > > > > > > obsoleted soon. > > > > > > > > > > -- > > > > > > > > > > Sincerely, > > > > > > > > > > > > > > > > > > > > James Burkart > > > > > > > > > > *925.667.7175* > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list > > > archive > > > > > > > > > View/change your membership options at > > > > > > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > > > > > > > > > > > -- > > > > > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list > > archive > > > > > > > > View/change your membership options at > > > > > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > > > > > > > > > -- > > > > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list > archive > > > > > > > View/change your membership options at > > > > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > > > > > > > -- > > > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archiv= e > > > > > > View/change your membership options at > > > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > > > > > -- > > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > > > > > View/change your membership options at > > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > > > -- > > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > > > > View/change your membership options at > > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > > > -- > > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > > > View/change your membership options at > > > http://mailman.mit.edu/mailman/listinfo/piclist > > > > > -- > > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > > View/change your membership options at > > http://mailman.mit.edu/mailman/listinfo/piclist > > > -- > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > View/change your membership options at > http://mailman.mit.edu/mailman/listinfo/piclist > --=20 Jason White --=20 http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .