5

I have written a code that transmits data over the I2C channel, The device ID and every other stuff is working fine. The only issue being that my code gets stuck at Wire.endTrasnmission().

I found the issue using Serial debug messages.

Strange thing:

When i disconnect the SCL line (A5 on arduino Pro Mini), the hang disappears and the code starts to function again.

A search brought me to this forum http://forum.arduino.cc/index.php?topic=66353.0

where a guy talks about the code snippet

if(hang)
unfreeze();

is this possible, if yes where do i place it?

Observation: The hang goes away if i disconnect the SCL line on either of the arduinos communicating, the sam edoes not happen if i disconnect the SDA.

ArunMKumar
  • 205
  • 1
  • 2
  • 8

1 Answers1

7

The device ID and every other stuff is working fine. The only issue being that my code gets stuck at Wire.endTransmission().

  • Nothing is transmitted until you call Wire.endTransmission() so that is where it will hang.

  • You should not try to do Wire transmissions inside an ISR (if you are doing that).

  • There is an alternative to the Wire library which times-out rather than hanging. It is at: Arduino I2C Master Library.

  • Make sure you have pull-up resistors on SDA and SCL. Typically 4.7 k from both to +5 V.

  • If none of that helps, please post your code.

Nick Gammon
  • 38,184
  • 13
  • 65
  • 124
  • Arduino I2C Master Library link is dead. It's now on GitHub: https://github.com/rambo/I2C – Casey Oct 21 '20 at 00:40
  • @Casey (sigh) Let's hope that link doesn't go down. Amended answer. Thanks. – Nick Gammon Oct 21 '20 at 06:29
  • 1
    @Casey With a bit more reputation (like, 1000) you will be able to edit answers and fix things like that up, which is perfectly acceptable to do, providing you don't change the intention of the answer. – Nick Gammon Oct 21 '20 at 06:32
  • I think you can suggest edits with fairly low rep, I'm not sure exactly what that threshold is. – Nick Gammon Oct 21 '20 at 06:34
  • Thanks for that. I'll have to learn how to do edits if SE ever gives me some big boy pants. It's worth noting that the original DSS Circuits I2C library is on github (https://github.com/DSSCircuits/I2C-Master-Library), but it died 8 years ago and was forked and carried forward by rambo (https://github.com/rambo/I2C) which has some activity this year. – Casey Oct 21 '20 at 13:28