element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum I2C buss
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 27 replies
  • Subscribers 404 subscribers
  • Views 1859 views
  • Users 0 members are here
Related

I2C buss

Former Member
Former Member over 12 years ago

Can an Arduino UNO communicate to 4 other UNO's via the I2C buss?

  • Sign in to reply
  • Cancel

Top Replies

  • michaelkellett
    michaelkellett over 12 years ago in reply to Former Member +1
    @Andrew, I agree with you that a very long test may not be that informative but there are also (reasonably common) cases when error detection does little to help. If, for example, the system timing is…
  • Former Member
    Former Member over 12 years ago in reply to gdstew +1
    If anyone interested in defining "distance" problems would like to check I believe page 60 of the most recent I2C manual "UM10204", has a note with regards to bus lengths above 10 cm requiring careful…
Parents
  • shabaz
    0 shabaz over 12 years ago

    Also, make sure they are all fairly close to each other; I2C was designed for short distances (more than say 20-30 cm start worrying).

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • gdstew
    0 gdstew over 12 years ago in reply to shabaz

    shabaz wrote:

     

    Also, make sure they are all fairly close to each other; I2C was designed for short distances (more than say 20-30 cm start worrying).

     

    I can find nothing in the Philips specification that limits I2C to 20 - 30 cm (~ 8 to 12 in.). What I do find is a limit of 400 pF capacitance on the

    bus. With IC inputs at a conservative 25 pF each allowing for some stray PCB capacitance, and standard 28 gage ribbon cable at 46 pF/m

    (AMP.Ansley catalog) it should allow ten I2C devices (250 pF) to be connected with a maximum cable distance of ~ 3 meters (~ 10 ft., 138 pF).

    Using connectors will also add capacitance to the I2C bus and should be added in if used. It should be noted that the design of the I2C bus is

    not very tolerant to EMI or other electrical noise so keeping distances as short as possible and routing away from any noise sources is a good

    idea. Shielding could be used on the cable although this will increase the capacitance of the cable.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • shabaz
    0 shabaz over 12 years ago in reply to gdstew

    Sigh. I didn't say there was a limit at 20-30cm - I said start worrying.

     

    Gary Stewart wrote:

    so keeping distances as short as possible ... is a good

    idea.

     

    If you're considering running this over much more than a short distance, you need to start taking additional concerns. You can't just take (any) pair of wires and expect it to work over 3m, nor even a meter (not that I would try - I would pick RS232 for this distance).

    From experience, even at distances of around 30-40cm, running at 400bkit/sec with I2C devices from reputable manufacturers, you have to start

    taking care (and sizing your pull-up resistors appropriately for a decent waveform).

    BTW - I2C is a great protocol - and is therefore the ubiquitous choice for good reason and virtually every electronic item beyond a flashlight probably uses it.

    For end product-to-end-product comms (where you may want a distance between them) there are better options.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • gdstew
    0 gdstew over 12 years ago in reply to shabaz

    shabaz wrote:

     

    Sigh. I didn't say there was a limit at 20-30cm - I said start worrying.

     

    Gary Stewart wrote:

    so keeping distances as short as possible ... is a good

    idea.

     

    If you're considering running this over much more than a short distance, you need to start taking additional concerns. You can't just take (any) pair of wires and expect it to work over 3m, nor even a meter (not that I would try - I would pick RS232 for this distance).

    From experience, even at distances of around 30-40cm, running at 400bkit/sec with I2C devices from reputable manufacturers, you have to start

    taking care (and sizing your pull-up resistors appropriately for a decent waveform).

    BTW - I2C is a great protocol - and is therefore the ubiquitous choice for good reason and virtually every electronic item beyond a flashlight probably uses it.

    For end product-to-end-product comms (where you may want a distance between them) there are better options.

     

    Start worrying is not a very informative reply, the follow up is much better.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • gdstew
    0 gdstew over 12 years ago in reply to shabaz

    shabaz wrote:

     

    Sigh. I didn't say there was a limit at 20-30cm - I said start worrying.

     

    Gary Stewart wrote:

    so keeping distances as short as possible ... is a good

    idea.

     

    If you're considering running this over much more than a short distance, you need to start taking additional concerns. You can't just take (any) pair of wires and expect it to work over 3m, nor even a meter (not that I would try - I would pick RS232 for this distance).

    From experience, even at distances of around 30-40cm, running at 400bkit/sec with I2C devices from reputable manufacturers, you have to start

    taking care (and sizing your pull-up resistors appropriately for a decent waveform).

    BTW - I2C is a great protocol - and is therefore the ubiquitous choice for good reason and virtually every electronic item beyond a flashlight probably uses it.

    For end product-to-end-product comms (where you may want a distance between them) there are better options.

     

    Start worrying is not a very informative reply, the follow up is much better.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • shabaz
    0 shabaz over 12 years ago in reply to gdstew

    Gary Stewart wrote:

    Start worrying is not a very informative reply, the follow up is much better.

     

    Whilst all the responses so far contributed to the OP's question, I think your response here does not.

     

    I think we have answered to some degree Chris' original post - to summarize, the answer being yes, but take some care over distance - the

    point in my very first post. It can be run to greater distances (over a large chassis for example) but some hobbyists with

    Arduino devices may not have test tools beyond a multimeter/logic probe. Running over expensive! shielded cables while possibly

    feasible, is an odd suggestion.. if you're resorting to that, why not pick an appropriate protocol.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • gdstew
    0 gdstew over 12 years ago in reply to shabaz

    shabaz wrote:

     

    Gary Stewart wrote:

    Start worrying is not a very informative reply, the follow up is much better.

     

    Whilst all the responses so far contributed to the OP's question, I think your response here does not.

     

    I think we have answered to some degree Chris' original post - to summarize, the answer being yes, but take some care over distance - the

    point in my very first post. It can be run to greater distances (over a large chassis for example) but some hobbyists with

    Arduino devices may not have test tools beyond a multimeter/logic probe. Running over expensive! shielded cables while possibly

    feasible, is an odd suggestion.. if you're resorting to that, why not pick an appropriate protocol.

     

    You could easily say the same about this reply. Your first post was a poor response to the question since it clearly left a false impression about

    what distance I2C could be used (exactly what does start worrying mean to the "typical" Arduino user you describe here ?), or what could be

    done to improve it. Basing your response on an assumption of what equipment may or may not be available to that "typical" user does not help either.

    A shielded cable is more expensive but not excessively so and using it has more to do with noise than distance as was clearly stated. The protocol

    is not the problem, the physical interface is. It was designed to go over 30 - 40 cm with more than a few devices connected to the bus even at

    400 KB/s, but it may require some tweeking of the pull up resistors to get there. If you do not have an oscilloscope to verify the signal intergrity

    (not really sure how a multimeter/logic probe helps here since multimeters are usually bandwidth limited to about 1 KHz and neither the multimeter

    or logic probe in any way tell you if what is on the line is the correct data at any given time) I would suggest writing a sketch for the master that

    continuosly sends data to the slaves and a sketch for the slaves that allows the master to read back the data it sent for say 10 to 20 minutes

    while counting the number of errors to make sure it is working properly. Adjusting the pull up resistors might be more than a bit of a problem.

    Note, I would only use short wires to verify that the sketches work and that there is an Arduino I2C library that makes writing these sketches

    fairly easy. See, that actually says something useful.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • shabaz
    0 shabaz over 12 years ago in reply to gdstew

    Well, post #6 (your post) actually had zero "informative" quality for the original question, yet you chose to criticise my post for this exact reason.

     

    Maybe that irony was lost on you.

     

    As for your (self-stated) "useful" post above:

     

    "not really sure how a multimeter/logic probe helps here since multimeters are usually bandwidth limited to about 1 KHz and neither the multimeter or logic probe in any way tell you if what is on the line is the correct data at any given time"

     

    By the way, I didn't suggest using a multimeter or logic probe if that's what you're implying. I stated (fairly clearly, but maybe there is a language problem), that this is all some hobbyists will have.

     

    Also your comment: "The protocol is not the problem, the physical interface is"

    The physical layer is a protocol. It defines the voltages that you expect on the lines amongst other parameters. I2C only has two layers.

     

    Finally your comment: "that allows the master to read back the data it sent for say 10 to 20 minutes while counting the number of errors to make sure it is working properly."

    Really.. I'd run it constantly for (at the very very least) days non-stop to ensure I got absolutely zero errors, if I really was attempting to run it over cable (shielded or not) over any significant distance - not that I would design like this. 10-20 mins is insignificant. And sure you can build in reliability in your final code too by error detection/correction, but I'd at least start with a reliable hardware design and test it thoroughly. I'm not so sure there is any benefit or pleasure  in discussing this futher with you. Have a good day.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • gdstew
    0 gdstew over 12 years ago in reply to shabaz

    shabaz wrote:

     

    Well, post #6 (your post) actually had zero "informative" quality for the original question, yet you chose to criticise my post for this exact reason.

     

    Maybe that irony was lost on you.

     

    As for your (self-stated) "useful" post above:

     

    "not really sure how a multimeter/logic probe helps here since multimeters are usually bandwidth limited to about 1 KHz and neither the multimeter or logic probe in any way tell you if what is on the line is the correct data at any given time"

     

    By the way, I didn't suggest using a multimeter or logic probe if that's what you're implying. I stated (fairly clearly, but maybe there is a language problem), that this is all some hobbyists will have.

     

    Also your comment: "The protocol is not the problem, the physical interface is"

    The physical layer is a protocol. It defines the voltages that you expect on the lines amongst other parameters. I2C only has two layers.

     

    Finally your comment: "that allows the master to read back the data it sent for say 10 to 20 minutes while counting the number of errors to make sure it is working properly."

    Really.. I'd run it constantly for (at the very very least) days non-stop to ensure I got absolutely zero errors, if I really was attempting to run it over cable (shielded or not) over any significant distance - not that I would design like this. 10-20 mins is insignificant. And sure you can build in reliability in your final code too by error detection/correction, but I'd at least start with a reliable hardware design and test it thoroughly. I'm not so sure there is any benefit or pleasure  in discussing this futher with you. Have a good day.

     

    The only irony missed here is that you still seem to think that "start to worry" is informative in any context.

     

    No the protocol is not the physical interface. A physical interface is the electrical specification for sending/recieving data across some physical

    medium, RS-232RS-232 vs RS-485 as an example. The protocol determines how the data is sent across the physical interface - addressing, byte order,

    error detection/correction (which can be done in hardware or software) etc. and it resides in one or more layers above the physical interface.

     

    For a hobbiest, which is what this is aimed for, 10 to 20 minutes will tell you if it is working with reasonable reliability. A 20 minute test at

    100 KB/s will have sent/recieved  ~ 100,000,000 bits. If you need better reliablity, run the test for a longer time.

     

    You are right about one thing, this conversation has become a waste of time.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to shabaz

    Running for "DAYS" may seem like a good alternative, but its not really, its just mostly a waste of time. It only tests one setup, in one place, one time.

     

    The right way to do it is to build in error correction, so that if your "tested for days system with no errors", suddenly starts getting errors due to sudden circumstances beyond your control like a thunderstorm or simply something has been placed near your cables, or taken away, or a big motor is started or stopped within a mile of where it is, of just ANYTHING, the error correction just cuts in and fixes the poroblems.

     

    To get error correction to work, you also need to actually find out that an error has occurred, so you may need to understand how parity works, plus longitudal error detection as parity will not find a double error always, but its a start.......

     

    I have read all the posts and actually, they all seem to be trying to help the OP, and they also demonstrate to me at least to have more understanding than some here...

     

    Do please remember that someone asked a question, killing the messenger is not helpful or friendly....try to be slightly more forgiving please to those trying to help who maybe did not appear to be "helpful enough" in YOUR eyes.....OK?

     

    Have a great day.

     

    Regards

     

    Andy

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • michaelkellett
    0 michaelkellett over 12 years ago in reply to Former Member

    @Andrew,

     

    I agree with you that a very long test may not be that informative but there are also (reasonably common) cases when error detection does little to help. If, for example, the system timing is marginal it may got from an error rate of less than 1 bit in 1E9 to 1 bit in 1E2 as the temeperature changes from 20C to 30C. Error detection folowed by re-transmission probably won't save you. It's still a very good idea to have it because it's a big step on the way to measuring and ultimately dealing with the source of the problem.

     

    I would expect a professional designer to check the bus timings/waveforms with a scope but of course this may not be possible for many hobby engineers. The answer there is to be careful to work well within specs, try to conform with common good practice (short spans and error correction) and be perapred to be innovative in your debugging.

     

    MK

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • gdstew
    0 gdstew over 12 years ago in reply to michaelkellett

    Michael Kellett wrote:

     

    @Andrew,

     

    I agree with you that a very long test may not be that informative but there are also (reasonably common) cases when error detection does little to help. If, for example, the system timing is marginal it may got from an error rate of less than 1 bit in 1E9 to 1 bit in 1E2 as the temeperature changes from 20C to 30C. Error detection folowed by re-transmission probably won't save you. It's still a very good idea to have it because it's a big step on the way to measuring and ultimately dealing with the source of the problem.

     

    I would expect a professional designer to check the bus timings/waveforms with a scope but of course this may not be possible for many hobby engineers. The answer there is to be careful to work well within specs, try to conform with common good practice (short spans and error correction) and be perapred to be innovative in your debugging.

     

    MK

    If the error occurs frequently, error checking and retransmission may not help and will certainly slow down communications which could cause other problems. If it is only occasional, then it will help

    and in both cases it will alert you to the fact that there is a problem.

     

    A scope is really the only way to know what is really going on and is 2nd on my list of must have tools for serious hobbiest, the multimeter being first. 20 MHz scopes (works with I2C and probably

    most Arduino debugging) are fairly inexpensive but knowing how to use them does require at least some knowledge of AC and digital waveforms.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mcb1
    0 mcb1 over 12 years ago in reply to gdstew

    Andrew

    Good job on defusing what was starting to become a war or words that didn't really help the OP.

     

     

    No-one has posed the question to Chris

     

    What is the data you are trying to exchange between these 4 UNO's?

    Is it bidirectional (ie are all 4 expected to talk to each other, or is one the master and the other 3 only receiving the data )

    Is there a particular reason you have selected I2C.?

     

    In my experience sometimes someone has a problem and one solution, but there may be many other simplier solutions.

    Hence the questions.

     

     

    Mark

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube