I2C czy slave mo?e zg?osi? masterowi

Tak jak w temacie - czy protokół I2C dopuszcza możliwość zasygnalizowania masterowi, że slave ma dla niego informację do odebrania? A jeśli tak, czy Atmega załatwo to sprzętowo? Teraz robię to przez cykliczny polling, ale w przypadku np przycisku czy innego urządzenia typu "trigger" trochę to nieefektywne, bo nie dość że zabiera cenny czas procka, to odebrana informacja jest mało precyzyjna w czasie (co ma spore znaczenie w przypadku np stopera).

Dariusz Żołna

Reply to
Dariusz Zolna
Loading thread data ...

Niech zgłosi to przez osobną linię. Można przez tą samą wyłączyć I2C, jeśli nic tam nie jest nadawane w danym czasie. Wtedy SLAVE sobie ustawi "0" jeśli chciałby coś nadać. MASTER wysłucha prośby i włączy I2C.

Reply to
invalid unparseable

Sylwester Łazar pisze:

Mogę zrobić tylko upgrade firmware, dodatkowa linia nie wchodzi w grę.

Dariusz Żołna

Reply to
Dariusz Zolna

Pisałem, że można po tej samej np. SDA. Problem w tym czy z obu stron są ukontrolery, czy SLAVE jest sprzętowy. Np. jeśli sprzętowy, to należy dodać jeden przewód od wyłącznika do SDA. Przycisk - zwiera sygnał do masy -> Master włącza port I2C. Jest jeszcze problem, bo MASTER musi poczekać na zwolnienie przycisku. Trudno tak dyskutować, jak nie widać układu.

Reply to
invalid unparseable

Sylwester Łazar pisze:

Po obu stronach są uC, przycisk także przechodzi przez uC. Master - Atmega128, slave - w większości Atmega8.

Dariusz Żołna

Reply to
Dariusz Zolna

To w takim razie:

1) Normalna praca i2c wyłaczony. MASTER czeka na SDA na sygnał -impuls "0". Zakładam, że linia podwieszona jest do VCC przez rezystor. 2) Jeśli "0" - MASTER włącza I2C.

Nie miałem tego ATMEGA nigdy w ręce, ale widzę, że na pinie 26 (SDA) jest też przerwanie INT1. W takim razie nie trzeba pollingu, a przerwanie zostanie obsłużone sprzętowo.

Reply to
invalid unparseable

Dariusz Zolna pisze:

No to sprawe masz prosta. Jak master nic nie nadaje to przelacza sie w slave i masterem staje sie to twoje urzadzenie. Jesli oba beda chcialy nadawac to tez nic wielkiego bo I2C obsluguje kolizje.

Reply to
T.M.F.

T.M.F. pisze:

Tyle że ja tych urządzeń mam kilkanaście, z którymi w większości jest transmisja ciągła, a tylko 2 dostarczają danych sporadycznie. Chyba zostanę przy pollingu, bo widzę że tylko skomplikuję sprawę i zmniejszę niezawodność.

Dariusz Żołna

Reply to
Dariusz Zolna

Sylwester Łazar pisze:

Można też przy interfejsie 2-liniowym zrezygnować z protokołu I2C i zrobić zwykły RS232 z wykrywaniem kolizji. Na jednej linii Master gada do pozostałych procesorów, na drugiej (z pull-up'em do zasilania) gadają inne procki sterując linią w trybie open drain (wystawiając tylko masę lub Hi-Z). Jeżeli dwa Slave'y jednocześnie będą chciały coś nadać, wystarczy najpierw posłuchać czy coś już nie leci na linii a do tego wykryć kolizję np. sprawdzając CRC ramki. Maksymalna prędkość takiego współdzielonego RS232 zależy od długości linii i liczby Slave'ów.

Reply to
Adam Dybkowski

Użytkownik "Dariusz Zolna" snipped-for-privacy@usenet.com napisał w wiadomości news:gm17ds$km9$ snipped-for-privacy@inews.gazeta.pl...

Nie wiem czy Atmega w ogóle to obsługuje i czy robi to poprawnie, ale możesz zrobić taki eksperyment: niech slave przetrzyma chwilę SCL w stanie niskim w momencie, gdy master wystawił SCL=0. Jeśli master to wykryje (jako dostęp innego mastera lub nawet jako błąd) i nie wywali się na tym (tzn, nie będzie chciał na siłę wystawiać danych tylko poczeka na SCL=1), będziesz mógł bez przeszkód dokończyć bieżącą transmisję do aktualnie adresowanego urządzenia i zaraz potem wywołać odczyty z interesujących Cię slav'ów (oczywiście nie rozróżnisz, który chciał dostępu, ale masz ich mało zdaje się).

e.

Reply to
entroper

Dobry pomysł. I w tym kierunku trzeba by pójść. Może spróbować się podczepić (dokleić) i przesłać dodatkowy bajt danych do aktualnie odczytywanego SLAVEA - jeśli naciśnięto przycisk.

Reply to
invalid unparseable

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.