Arduino I2C write data with repeated start

hi guys,
I'm new to the Arduino. Now I'm trying to program the DS1086L with I2C.
the DS1086 request a pulse after the ACK bit. But my arduino keep pulling it down.
Is there any parameter I can insert a pulse between data bytes?



image

Rewrite:
The receiver holds SDA low during the 9th clock pulse to indicate ACK. If it releases SDA so that it goes high before SCL then it's a NACK. Afterwards the sender puts the first bit of the next byte onto SDA The spike or transition while SCL is low is unimportant. A stop at the end of transmission is signaled by SCL going high followed by SDA going high.

1 Like

DS1086L, a spread spectrum oscillator: https://www.maximintegrated.com/en/products/analog/clock-generation-distribution/silicon-crystal-oscillators/DS1086.html
With a datasheet.

I can not read in the datasheet that a pulse after the ACK bit is required.
The short pulses on the scope are glitches. That is okay. The I2C protocol allows hiccups in some places.

If you can not communicate with the chip, could you show your sketch ?

[ADDED] After posting this message, it turned out that I wrote the same as DrDiettrich.

Hi DrDiettrich,
Thank you for the reply.
the reason I assume the pull up is important because I talked with maxim's AE and he shows me his worked waveform(shows below)


he couldn't tell the difference of our code except the pulse after the ACK bit, so I guess that is the key point?

Hi Koepel,
Thank you for your reply.
interesting thing is, I can read the register and write the ADDR register(the only one) and make it work, so I guess I did something right but not completely. And as I replaied to DrDiettrich. The Maxim's engineer can make it work on the same board. so I guess it is a code issue?

If that works, why bother with unimportant details?

The width of the gap between bytes written may be affected by the firmware that transmits the next byte. The Arduino firmware seems to be faster than the Maxim firmware, that's all.

The slave address looks different between your and the Maxim project. How is that other address achieved?

the ADDR is the only register I can write... that leads problems.
the devices address difference is because I changed the ADDR register and it works, the address is the part I'm not concerned.
yours reply reminds me. I will check the waveform of the success code to see what can I get. Thanks!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.