-1

So I want to connect multiple LED Panels with dynamic addressing to a Master Controller. Seems like SMBus should be able to do that, however I don't find any Library for the Arduino framework. Does SMBus require Hardware implementation and if if works in Software is there a library for that and does it even work on the ATTiny?

9
  • SMBus and I2C are almost the same. Just a few specs between them. So... why SMBus and not I2C which is by far more ubiquitous?
    – Majenko
    Jul 26, 2021 at 14:12
  • @Majenko Because I really want the ARP feature of SMBus that enables me to use dynamic adressing. If there's a simpler solution to have dynamic adressing I'd love to hear that too Jul 26, 2021 at 14:49
  • The ATMega TWI Arbitration module only (afaict) works in master mode. So you would have to write a bit-banged slave emulation with arbitration built in. Doable, but not nice.
    – Majenko
    Jul 26, 2021 at 15:15
  • @Majenko so is there a better solution? Jul 26, 2021 at 15:24
  • ARP's your big sticking point. However since you need to allocate a UUID to each device anyway you could just allocate a unique I2C address to each device instead? Then you can scan the I2C bus looking for what I2C addresses exist.
    – Majenko
    Jul 26, 2021 at 15:30

1 Answer 1

1

The AVR chips lack hardware support for bus arbitration when operating as a slave device in I2C, which would be required for it to work as SMBus with ARP.

You would have to write your own bit-banged driver to act as a slave whilst monitoring the SDA pin whenever it transmits to look for bus collisions.

A better solution would be to allocate each device a unique address using an address space of your choosing (to give you enough addresses for uniqueness) at build / programming time. A bus of some design (maybe RS485 would be a good choice for this) can then be scanned looking for, and cataloguing, what addresses are in use.

Not the answer you're looking for? Browse other questions tagged or ask your own question.