Implementacja I2C
Masz problem? Zapytaj na forum elektroda.pl
From: Mariusz Koskiewicz <mpk_at_nospam_actyn.phys.uni.torun.pl>
Subject: Implementacja I2C
Date: 20 Feb 2000 13:36:09 GMT
Jak zaimplementowac szyne I2C w systemie z wieloma masterami w postaci
mikrokontrolerow (AT89CXX)?
Jak mozna komunikowac sie pomiedzy poszczegolnymi masterami?
--
From: "Wojtek Sujkowski" <wpsujkowski_at_nospam_qdnet.pl>
Subject: Re: Implementacja I2C
Date: Sun, 20 Feb 2000 19:53:38 +0100
U=BFytkownik Mariusz Koskiewicz <mpk_at_nospam_actyn.phys.uni.torun.pl> w =
wiadomo=B6ci do grup dyskusyjnych =
napisa=B3:88oqk9$2v8$1_at_nospam_flis.man.torun.pl...
Jak zaimplementowac szyne I2C w systemie z wieloma masterami w postaci
mikrokontrolerow (AT89CXX)?
=20
Jak mozna komunikowac sie pomiedzy poszczegolnymi masterami?
=20
Musisz kazdemu zrobic soft obslugujacy tryb master i slave oraz mogacy =
dokonywac arbitrazu (koniecznie). Obu masterom nadajesz tez rozne =
"device address" na ktory beda reagowac jako slave.=20
Komunikacja miedzy masterami polega na tym, ze jeden z nich w danej =
chwili jest masterem (ten wywolujacy/inicjujacy transfer) a drugi =
slave'm.
I to wlasciwie wszystko.
Wojtek
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: Implementacja I2C
Date: Sun, 20 Feb 2000 23:45:01 GMT
On Sun, 20 Feb 2000 19:53:38 +0100, Wojtek Sujkowski wrote:
Użytkownik Mariusz Koskiewicz <mpk_at_nospam_actyn.phys.uni.torun.pl> w wiadomości do grup dyskusyjnych napisał:88oqk9$2v8$1_at_nospam_flis.man.torun.pl...
Jak zaimplementowac szyne I2C w systemie z wieloma masterami w postaci
mikrokontrolerow (AT89CXX)?
Jak mozna komunikowac sie pomiedzy poszczegolnymi masterami?
Musisz kazdemu zrobic soft obslugujacy tryb master i slave oraz mogacy dokonywac arbitrazu (koniecznie). Obu masterom nadajesz tez rozne "device address" na ktory beda reagowac jako slave.
Komunikacja miedzy masterami polega na tym, ze jeden z nich w danej chwili jest masterem (ten wywolujacy/inicjujacy transfer) a drugi slave'm.
I to wlasciwie wszystko.
Z jednym malym zastrzezeniem - czy masterami beda wylacznie uC ?
Bo niestety - arbitraz jest szybki, za szybki jak na program.
Program na uC mozesz zwolnic zeby inne uC zdazyly zareagowac,
ale jak sie wsadzi jeszcze jakiego "hardwareowego" mastera..
J.
P.S. wlaczylbys lamanie linii na 70 znaku ..
From: "Wojtek Sujkowski" <wpsujkowski_at_nospam_qdnet.pl>
Subject: Re: Implementacja I2C
Date: Mon, 21 Feb 2000 18:48:26 +0100
U=BFytkownik J.F. <jfox_at_nospam_friko6.onet.pl> w wiadomo=B6ci do grup =
dyskusyjnych napisa=B3:38bf6b52.15390192_at_nospam_news.ict.pwr.wroc.pl...
=20
Z jednym malym zastrzezeniem - czy masterami beda wylacznie uC ?=20
Bo niestety - arbitraz jest szybki, za szybki jak na program.=20
Program na uC mozesz zwolnic zeby inne uC zdazyly zareagowac,
ale jak sie wsadzi jeszcze jakiego "hardwareowego" mastera..
=20
J.
=20
P.S. wlaczylbys lamanie linii na 70 znaku ..
=20
Dlaczego? Zgodnie ze specyfikacja i zasadami synchronizacji
szyny kazdy uklad (slave i master) ma prawo rozciagac zegar
w stanie L. A w tym czasie soft moze wykonac wszystkie=20
pomocnicze operacje aby w stanie H zegara tylko sprawdzac stan
linii danych i dokonywac arbitrazu. Sa na to (testowanie)
min 4 us (przy trybie 100kHz) i wiekszosci prockom to wystarczy.
A hardwareowe mastery maja obowiazek (!) dostosowac sie do tego
rozciagania zegara - nie jest to trudne przeciez.
Pozdrawiam,
Wojtek
PS. Bede staral sie lamac ;))
Ale za hindusa nie moge znalezc w moim OE5 opcjii
ustawiania dlugosci wiersza - sam mi lamie "miekko" tak jak
ustawiona mam szerokosc okna edycyjnego - przy zmianie
tej szerokosci automatycznie reorganizuje szyk.
From: "MaraBut" <martys_at_nospam_priv.onet.pl>
Subject: Re: Implementacja I2C
Date: Tue, 22 Feb 2000 08:52:32 +0100
Wojtek Sujkowski <wpsujkowski_at_nospam_qdnet.pl> napisał:
[...]
Ale za hindusa nie moge znalezc w moim OE5 opcjii
ustawiania dlugosci wiersza [...]
Menu : Narzędzia -> Opcje -> Wysyłanie -> Ustawienia zwykłego tekstu
Lepiej też używać UUencode niz domyslnego MIME - to ułatwia życie nie
lubišcym Windy ;o)
Sprawdz też kodowanie nagłówka w " Ustawieniach międzynarodowych".
Pzdr.
MaraBut
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: Implementacja I2C
Date: 22 Feb 2000 12:42:35 GMT
On Mon, 21 Feb 2000 18:48:26 +0100, Wojtek Sujkowski <wpsujkowski_at_nospam_qdnet.pl> wrote:
Z jednym malym zastrzezeniem - czy masterami beda wylacznie uC ?
Bo niestety - arbitraz jest szybki, za szybki jak na program.
Dlaczego? Zgodnie ze specyfikacja i zasadami synchronizacji
szyny kazdy uklad (slave i master) ma prawo rozciagac zegar
w stanie L. A w tym czasie soft moze wykonac wszystkie
pomocnicze operacje aby w stanie H zegara tylko sprawdzac stan
linii danych i dokonywac arbitrazu. Sa na to (testowanie)
min 4 us (przy trybie 100kHz) i wiekszosci prockom to wystarczy.
4us to jest bardzo malo. To sa 4 rozkazy '51, troche wiecej
w AVR lub PIC. W tym czasie musisz np przyjac przerwanie, bo
przeciez nie bedziesz ciagle sprawdzal warunku START I2C.
A potem tez nie wesolo - jak trzeba sprawdzic czy linie sa w odpowiednim
stanie i zdazyc je zmienic.
A np tak: zalozmy ze master A skonczyl transmisje
bitu i zaczyna nastepny.
Spuscil zegar, master B czym predzej ja uziemil zeby spowolnic A.
Wystawiamy dane i niech np A zwalnia linie zegara. Czeka teraz na stan
H na zegarze. B podobnie zwalnia i zaczyna probkowac linie zegarowa.
Jak sie trafi zly moment to A zdazy ujrzec stan H, odczekac 4us,
spuscic w dol, a B nic nie zauwazy. I dalej bedzie czekal az sie
linia zegara podniesie..
J.
PS. Bede staral sie lamac ;))
Ale za hindusa nie moge znalezc w moim OE5 opcjii
narzedzia/opcje/wysylanie/na dole "ustawienia zwyklego tekstu".
Ale glowy nie dam czy to to..
From: "Wojtek Sujkowski" <wpsujkowski_at_nospam_qdnet.pl>
Subject: Re: Implementacja I2C
Date: Tue, 22 Feb 2000 19:11:28 +0100
U=BFytkownik J.F. <jfox_at_nospam_friko6.onet.pl> w wiadomo=B6ci do grup =
dyskusyjnych napisa=B3:slrn8b5193.47u.jfox_at_nospam_mars.planconsult.com.pl...
=20
4us to jest bardzo malo. To sa 4 rozkazy '51, troche wiecej
w AVR lub PIC.
W PICu taktowanym 4MHz to tez sa 4 rozkazy
... W tym czasie musisz np przyjac przerwanie, bo
przeciez nie bedziesz ciagle sprawdzal warunku START I2C.
A potem tez nie wesolo - jak trzeba sprawdzic czy linie sa w =
odpowiednim=20
stanie i zdazyc je zmienic.
Na reakcje przy bicie STARTu (przyjecie i rozpoznanie przerwania) masz
co najmniej 2 razy wiecej czasu tj. 4us + 4us + dlugosc zbocza SCL.
Zakladam, ze przerwania ustawione sa na wykrycie opadajacego zbocza SDA,
a szyna jest w stanie idle.
A np tak: zalozmy ze master A skonczyl transmisje
bitu i zaczyna nastepny.
Spuscil zegar, master B czym predzej ja uziemil zeby spowolnic A.
Wystawiamy dane i niech np A zwalnia linie zegara. Czeka teraz na stan
H na zegarze. B podobnie zwalnia i zaczyna probkowac linie zegarowa.
Jak sie trafi zly moment to A zdazy ujrzec stan H, odczekac 4us,=20
spuscic w dol, a B nic nie zauwazy. I dalej bedzie czekal az sie=20
linia zegara podniesie..
Tu masz racje, ale procek B musialby rzeczywiscie byc wolny.
Bardziej bym sie obawial (w tym przykladzie) tego, ze procek B=20
tez zdazy wykryc stan H linii zegara (w ostatnim momencie)
i w nastepnym kroku bedzie testowal linie danych gdy zegar
bedzie L (sciagniety przez A) i linia danych tez juz bedzie
zmieniona (sciagnieta na L) przez procek A.
Gdybym mial w aplikacji teoretyczna mozliwosc wystapienia takich
"niedoczasow" to bez wahania wybralbym albo szybszy procek albo
wspomaganie sprzetowe.
Pozdrawiam
Wojtek
PS. Dzieki (takze MaraButowi) za rady, gapa bylem bo nie dojrzalem
tego szczegolu.:)
From: jfox_at_nospam_friko6.onet.pl (J.F.)
Subject: Re: Implementacja I2C
Date: 23 Feb 2000 11:03:16 GMT
On Tue, 22 Feb 2000 19:11:28 +0100, Wojtek Sujkowski <wpsujkowski_at_nospam_qdnet.pl> wrote:
Użytkownik J.F. <jfox_at_nospam_friko6.onet.pl> w wiadomości do grup
4us to jest bardzo malo. To sa 4 rozkazy '51, troche wiecej
w AVR lub PIC.
W PICu taktowanym 4MHz to tez sa 4 rozkazy
Ale PIC ma wersje 20MHz od dawna.
A np tak: zalozmy ze master A skonczyl transmisje
bitu i zaczyna nastepny.
Spuscil zegar, master B czym predzej ja uziemil zeby spowolnic A.
Wystawiamy dane i niech np A zwalnia linie zegara. Czeka teraz na stan
H na zegarze. B podobnie zwalnia i zaczyna probkowac linie zegarowa.
Jak sie trafi zly moment to A zdazy ujrzec stan H, odczekac 4us,
spuscic w dol, a B nic nie zauwazy. I dalej bedzie czekal az sie
linia zegara podniesie..
Tu masz racje, ale procek B musialby rzeczywiscie byc wolny.
No i zwykle jest. Duzo zalezy tez od samego programu - niby stan mozna
monitorowac na '51 co dwa cykle, ale trzeba bedzie np wykryc STOP
na szynie jeszcze ?
Gdybym mial w aplikacji teoretyczna mozliwosc wystapienia takich
"niedoczasow" to bez wahania wybralbym albo szybszy procek albo
wspomaganie sprzetowe.
Problem w tym ze procek IMHO musi byc duzo szybszy. A to juz nie bedzie
prosty tani uC. Zostaje wspomaganie - niekoniecznie od razu caly sterownik
I2C, byc moze wystarczy jakis prosty zatrzask na danych i zegarze ..
J.
From: "Wojtek Sujkowski" <wpsujkowski_at_nospam_qdnet.pl>
Subject: Re: Implementacja I2C
Date: Wed, 23 Feb 2000 19:39:30 +0100
Użytkownik J.F. <jfox_at_nospam_friko6.onet.pl> w wiadomooci do grup
dyskusyjnych
napisał:slrn8b7fr6.l6p.jfox_at_nospam_mars.planconsult.com.pl...
W PICu taktowanym 4MHz to tez sa 4 rozkazy
Ale PIC ma wersje 20MHz od dawna.
Chodzilo mi o przytoczenie nawolniejszej wersji (poza
zegarkowymi :))
A np tak: zalozmy ze master A skonczyl transmisje
bitu i zaczyna nastepny.
Spuscil zegar, master B czym predzej ja uziemil zeby
spowolnic A.
Wystawiamy dane i niech np A zwalnia linie zegara.
Czeka teraz na stan
H na zegarze. B podobnie zwalnia i zaczyna probkowac
linie zegarowa.
Jak sie trafi zly moment to A zdazy ujrzec stan H,
odczekac 4us,
spuscic w dol, a B nic nie zauwazy. I dalej bedzie
czekal az sie
linia zegara podniesie..
Tu masz racje, ale procek B musialby rzeczywiscie byc
wolny.
No i zwykle jest. Duzo zalezy tez od samego programu -
niby stan mozna
monitorowac na '51 co dwa cykle, ale trzeba bedzie np
wykryc STOP
na szynie jeszcze ?
Gdybym mial w aplikacji teoretyczna mozliwosc wystapienia
takich
"niedoczasow" to bez wahania wybralbym albo szybszy
procek albo
wspomaganie sprzetowe.
Problem w tym ze procek IMHO musi byc duzo szybszy. A to
juz nie bedzie
prosty tani uC.
Nie przesadzaj, 10..12 MHz juz wystarcza, a to przeciez nie
jest high-end
Zostaje wspomaganie - niekoniecznie od razu caly sterownik
I2C, byc moze wystarczy jakis prosty zatrzask na danych i
zegarze ..
I dokladnie cos takiego prostego mialem na mysli :))
Pozdrawiam
Wojtek
From: "Jerzy Szczesiul" <Jerzy.Szczesiul_at_nospam_ep.com.pl>
Subject: Re: Implementacja I2C
Date: Mon, 21 Feb 2000 17:58:28 GMT
Hej
Mariusz Koskiewicz napisał(a) w wiadomości:
<88oqk9$2v8$1_at_nospam_flis.man.torun.pl>...
Jak zaimplementowac szyne I2C w systemie z wieloma masterami w postaci
mikrokontrolerow (AT89CXX)?
Jak mozna komunikowac sie pomiedzy poszczegolnymi masterami?
Pomysl o zastosowaniu uP ze sprzetowym interfejsem i2c
( 80c652,552 i jeszcze inne ). Programowo sprowadza sie wtedy
do obslugi przerwan ( bajt statusu pozwala w przerwaniu stwierdzic
co zaszlo na linii - takze arbitraze sa uwzglednione ). Wszystko jest
wdziecznie i dokladnie oraz z przykladami opisane np. w katalogach
Philipsa ( '51 ). Natomiast zeby sie wciaz nie pakowac w arbitraze
mozna jeszcze dolozyc jakies uproszczone zapozyczenie z sieci ( podzial
czasu, przekazywanie tokena itp ).
--
Pozdrowienia
Jurek Szczesiul
Jerzy.Szczesiul_at_nospam_ep.com.pl