www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

I2C in prekinitve?
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Tor Avg 21, 2007 11:51 pm    Naslov sporočila:   Odgovori s citatom

Jah, pricakovano, ce ni nicesar, kr bi povzrocalo "mikrofonijo" na vodilu Sad

Ja, drzi da mora drugi MCU sprejemati, ko prvi podatke posilja, sicer bo odlicni plan padel v vodo. Ce prav razumem tvoj opis, trenutno noben MCU ne uporablja interruptov. Ce je temu tako, potem je stvar zelo preprosta (vsak MCU poganja svoj clock, ki pride vezan na eksterni interrupt drugega MCUja, ta pa ob vsakem interruptu prebere nov bit in ga porine v spremenljivko, ko pa jih prebere 8 in ima torej cel bajt, pa o tem obvesti glavni program s postavitvijo zastavice). Na tak nacin je povsem nemogoce, da bi prislo do race conditiona, dokler je frekvenca clocka v razumnih mejah (ce recimo traja interrupt skupaj maksimalno 10 ms, potem clock ne more imeti periode krajse od 100 KHz).

Ce interrupti niso na voljo, se stvar malce zakomplicira (vsaj pri predlaganem stevilu linij, ce naj bo prenos se vedno full duplex). Tezko je svetovati najboljso resitev, ker ne poznam dovolj dobro tvoje aplikacije. Morda bi bila dovolj ze ena dodatna linija, s katero bi manj pomembni MCU dobil od bolj pomembnega potrditev, da sme smetiti po I2C vodilu, brez takega dovoljnega pa bi lahko po njem komuniciral samo prvi MCU.

V praksi bi to izgledalo tako, da drugi MCU spravi linijo i2cfree? iz enega stanja v drugo (0 v 1) in s tem zahteva prosto linijo, ko prvi MCU koncno blagovoli linijo sprostiti, mu po drugi liniji i2cfree! javi, da je vse prosto (iz 0 v 1) in se vzdrzi I2c komunikacij dokler drugi MCU spet ne sprosti i2cfree? (iz 1 v 0). Drugi MCU i2cfree? ne sme postaviti v stanje 1, ce ni i2cfree! 0, saj bi sicer lahko napacno interpretiral dovoljenje od prejsnjega prenosa, ce bi si dva sledila prehitro. V takem primeru ne more priti do nobenih tezav, saj bo vedno vodilo zasegel samo en MCU (tisti, ki je po tvoji oceni pomembnejsi, torej mora imeti vec casa vodilo na voljo). Se zaporedje stanj:

Koda:
MCU2 pocaka, dokler ni i2cfree! v stanju 0
MCU2 spravi i2cfree? v stanje 1
MCU2 pocaka ali je i2cfree! ze v stanju 1
MCU2 opravi svoje na I2C vodilu
MCU2 spravi i2cfree? v stanje 0

MCU1 sari po vodilu, dokler ga je volja, vmes pa vsake toliko casa preverja ali je i2cfree? v stanju 1 (recimo v glavni zanki)
MCU1 spravi i2cfree! v stanje 1
MCU1 pocaka, da je i2cfree? v stanju 0
MCU1 spravi i2cfree! v stanje 0


Aha, pa se to: I2C je tudi sinhrona komunikacija, le da je med vmesnim clenom (RAMom) in MCUjem, ne neposredno med MCUjema - sinhrona je s taktom prenosa (SCL), od tukaj ime.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3359
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Čet Avg 23, 2007 1:26 am    Naslov sporočila:  Oprosti Odgovori s citatom

Oprosti Sokrat, dolgo je trajalo, da odgovarjam.
Pred vsem me je sram priznati, da se ne čutim sposobnega narediti tega, kar predlagaš, in kar bi vsekakor delovalo, potem, ko bi veliko testiranja in dela bilo vloženo. Saj to je nekako sinhroni softwareski uart, kar je uspeh celo za profesionalce.
Bom moral le ostati pri tem, kar imam, in izboljšati verjetnost kolizije tja na 1 : milijon, ali malo manj, se pravi, da če imam časovno okno 1 usek, kot je nedoločeno, ali bo tudi drugi procesor zasedel bus, mora biti zahtevana frekvenca posega na bus 1 sekunda ali manj.
Mislim, da bo to zadostovalo za kolikor toliko zanesljivo delo. če pa potem še dosežem toleranco napake, da mora vsak podatek prebrati dvakrat enako, in vsak vpisani podatek verificirati po vpisu, potem mislim, da bo delovalo dovolj zanesljivo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group