Sziasztok,
Van egy terepasztal, ahol 4-5 IC egymással TWI-n kommunikál.
Egy mester irányít, a többiek a buszon csücsülnek és ellátják adatokkal a mestert. Mindegyik IC-nek van egy vonala a mester felé, amit ha alacsonyra rak, azt jelenti, hogy mondani akar valamit. A mester ilyenkor kérdez (3 kábeles a kommunikáció, több kábel nem lehetséges csak gányolással).
A probléma az, hogy van két IC, ami igazából egymásnak is szolgáltat adatot, nemcsak a mesternek.
Szóval:
- IC1 jelzi, hogy mondandója van
- Mester kérdez, hogy micsoda
- IC1 elmondja, hogy ez történt
- Mester szól az IC2-nek, elmondja hogy az IC1 ezt mondta
Ennek így semmi értelme, mert az adat ott van a buszon, csak IC2-nek figyelnie kellene azt, hogy IC1 mit mondott a mesternek.
A kérdés, hogy lehetséges-e egy slave-nek egy másik slave beszédébe belehallgatni I2C-n?
(több címre figyelni lehetséges egyszerre a TWAMR regiszter használatával, de a lehallgatásról nincs információm)
TWI kommunikáció egymás válaszának figyelése
Re: TWI kommunikáció egymás válaszának figyelése
Slave-Slave kommunikáció mikrokontrolleres környezetben (sem) létezik. Amit keresel az a multimaster mód (vagy annak elfajzottja).
Az nem jó, hogy
1, az INT vonalon jeleznek az eszközök, hogy hasfájásuk van (bejelzés)
2, master végigkérdezi őket, hogy kinek mi a problémája
3, ha a slave olyan választ ad, hogy "pisilni kell", akkor vele beszélget
4, ha a slave azt mondja, hogy "pistikének üzenem, hogy...", akkora master átmegy postásba. Csak előtte megkérdezi Pistikét, hoyg van e mindanivalója és hogy kíváncsi e Zolika üzenetére.
5, ha körbeért és mindenkitől már csak azt kapta, hogy nincs mondanivalóm, akkor értél a kommunikáció végére.
A minta a "tantónéni és az osztály" logikát követi.
U.i.: miért kellett minden slave-nak 1-1 vonal a master felé?
Openkollektoros módon meghajtani az INT vonalat? Vagy akár egy soros kondin át?
INT lehet INT0/INT1 vagy akár a minden lábon ott levő PCINT is...
Az nem jó, hogy
1, az INT vonalon jeleznek az eszközök, hogy hasfájásuk van (bejelzés)
2, master végigkérdezi őket, hogy kinek mi a problémája
3, ha a slave olyan választ ad, hogy "pisilni kell", akkor vele beszélget
4, ha a slave azt mondja, hogy "pistikének üzenem, hogy...", akkora master átmegy postásba. Csak előtte megkérdezi Pistikét, hoyg van e mindanivalója és hogy kíváncsi e Zolika üzenetére.
5, ha körbeért és mindenkitől már csak azt kapta, hogy nincs mondanivalóm, akkor értél a kommunikáció végére.
A minta a "tantónéni és az osztály" logikát követi.
U.i.: miért kellett minden slave-nak 1-1 vonal a master felé?
Openkollektoros módon meghajtani az INT vonalat? Vagy akár egy soros kondin át?
INT lehet INT0/INT1 vagy akár a minden lábon ott levő PCINT is...
Re: TWI kommunikáció egymás válaszának figyelése
Röviden a hardver:
Gondolom ismered a 14 pólusú szkáb apát, az egyszerűség kedvéért az egymásmellettieket összekötöttem: 7 vezeték. Ebből 4 tápfesz: 0V, 5V, 12V, stabilizálatlan, 3 kommunikáció: TWI + jelzés. Ebből a szkábcsatlakozóból 4 darab van egymás mellett, slot-oknak hívom. Ide lehet tetszőleges akármit bedugni. A jelzővezeték mindegyik slotnál más, a többi össze van kötve egymással.
Amikor indul a rendszer, egy 0x00 küldeményt ad (mindenkinek szól). Ekkor mindenki beállítja, hogy üzenete van. A mester egyesével végigmegy a lehetséges szolgákon, lekéri az üzenetet, amire a szolga visszaállítja a vonalát. Innen tudja meg a mester, hogy az adott szolga éppen melyik slot-ba van bedugva. Amikor a mesternek jelez, akkor a mester azonnal tudnifogja, hogy kivel dumál, akkor is, ha szerelés után össze-vissza dugsz mindent.
A mesternek van egy sora is (TWI queue), ahova a kéréseket tudja bepakolni. Elég bonyolult a dolga és a bejövő események kimenő események láncát indíthatják el, ezért volt szükség sorkezelésre. A buszon addig mennek a kérések, amíg a sor ki nem ürül. A berakott elemek azonosítóval rendelkeznek, innen tudja a mester, hogy a válasz melyik kérésre jött. A sorba be tudsz rakni mindenkinek szóló kérést, üzenet-küldést, adat-olvasást,...
Miért kellett külön vonal? Csak nem akarom az összes szolgát egyesével végigkérdezni, hogy meséld már el, hogy mi van. Lehet belőlük egy csomó. Egyébként a vezetékek nincsenek interruptra kötve, a mester időnként olvasgatja őket. A terepasztalon nem történnek olyan események, amik indokolnák a hogy us közeli válaszidőket produkáljak. Nem fénysebességgel mennek a vonatok
Gondolom ismered a 14 pólusú szkáb apát, az egyszerűség kedvéért az egymásmellettieket összekötöttem: 7 vezeték. Ebből 4 tápfesz: 0V, 5V, 12V, stabilizálatlan, 3 kommunikáció: TWI + jelzés. Ebből a szkábcsatlakozóból 4 darab van egymás mellett, slot-oknak hívom. Ide lehet tetszőleges akármit bedugni. A jelzővezeték mindegyik slotnál más, a többi össze van kötve egymással.
Amikor indul a rendszer, egy 0x00 küldeményt ad (mindenkinek szól). Ekkor mindenki beállítja, hogy üzenete van. A mester egyesével végigmegy a lehetséges szolgákon, lekéri az üzenetet, amire a szolga visszaállítja a vonalát. Innen tudja meg a mester, hogy az adott szolga éppen melyik slot-ba van bedugva. Amikor a mesternek jelez, akkor a mester azonnal tudnifogja, hogy kivel dumál, akkor is, ha szerelés után össze-vissza dugsz mindent.
A mesternek van egy sora is (TWI queue), ahova a kéréseket tudja bepakolni. Elég bonyolult a dolga és a bejövő események kimenő események láncát indíthatják el, ezért volt szükség sorkezelésre. A buszon addig mennek a kérések, amíg a sor ki nem ürül. A berakott elemek azonosítóval rendelkeznek, innen tudja a mester, hogy a válasz melyik kérésre jött. A sorba be tudsz rakni mindenkinek szóló kérést, üzenet-küldést, adat-olvasást,...
Miért kellett külön vonal? Csak nem akarom az összes szolgát egyesével végigkérdezni, hogy meséld már el, hogy mi van. Lehet belőlük egy csomó. Egyébként a vezetékek nincsenek interruptra kötve, a mester időnként olvasgatja őket. A terepasztalon nem történnek olyan események, amik indokolnák a hogy us közeli válaszidőket produkáljak. Nem fénysebességgel mennek a vonatok
Re: TWI kommunikáció egymás válaszának figyelése
Egyébként valószínűleg megfogadom a tanácsod és a mester fogja postázni az IC-k egymásnak küldött adatait.
(és loggolja RS-232-n a PC felé, ahonnan látom, hogy nagyjából mi zajlik)
(és loggolja RS-232-n a PC felé, ahonnan látom, hogy nagyjából mi zajlik)