"... a software viszont bonyolultabb"
A többi igaz. ;)
Az I2C egy roppant bonyolult szinkron protokoll. Egy példa: Két pic beszélget. Az egyik átküldi a parancsot: írd be a flash-be, a megadott címre a következő 32 bájtot. Amint az utolsó bájt beérkezett, még ott az IT szinten elkezdődik az írás, amikor a client az órajel (SCL) megfogásával megállítja a mastert. A flash-elés eredményét pedig az órajel utáni ACK/NACK tartalma jelzi.
Szóval ilyet az RS485 nem tud, maximum egy kis ütközés, amit le kell kezelni - lévén aszinkron protokoll. És akkor még szó sincs az I2C multi-master üzemmódról, vagy az egyes I2C-nek mondott SMBUS perifériák kezeléséről! Címzést meg az RS485 is át tud vinni, azaz semmi akadálya egy hálózati protokoll készítésének.
És itt kovetkezik egy kis "off thread" anyag, hogy ne kelljen mindenhova írnom.
Megértem gaby barátunk "vallását", ami inkább "rossz irányú tájékozódás". Elég bonyolult rendszer akar összehozni utólagos foltozgatással. Pedig a legolcsóbb az újragondolás lenne.
Tudom, kezdek unalmas lenni, de Jaakko Ala-Paavola (Status: Not implemented) megoldása helyett az I2C feltalálója (Philips) is közöl néhány kipróbált megoldást, illetve gyárt is olyan áramköröket, ami az I2C asszimetrikus (pulldown) megoldást szimmetrizálja. Egy bonyolultabb hálózatnál sajnos nem lehet a 3 logikai szinttel működő meghajtókat tetszőlegesen kaszkádolni és sok esetben a jónak hitt megoldást is újraszámolni és tesztelni kell - esetleg nem működik. Ehhez képest az RS485 pofonegyszerű, szimmetrikus - zavarvédett megoldást nyújt.
Az I2C perifériák tényleg sokan vannak, én is szép számmal használom őket. Mégis megfontolandó, hogy pl. egy I2C AD átalakító, GPIO stb. helyett olcsóbb berakni egy olcsó pic, vagy egyéb milrokontrollert, ami eleve tartalmazza ugyanezeket, illetve amit nem, annak az I2C kommunikációját le tudja kezelni. Ezt már könnyen ki lehet egészíteni egy olcsó RS485 meghajtással. Manapság nem a mikrokontroller az áramkör legdrágább eleme!
Ez itt egy drága, bonyolult I2C interfész. Galvanikusan leválasztott, 100/400kHz sebességgel mehet 120 Ohm impedanciájú RS485 kábelen - csavart érpáron - 5m távolságig.
gpio - gpio
PIC - PIC
F - FRAM
di - digital isolator
d - DI2C meghajtó
R - RS232 szintillesztő