Moze li se dva i vise mikrokontrolera povezati u mrezu i moze li im se zadati adresa u toj mrezi ili ako je komplikovano da shvatite sta pitam zelim da pristupam odvojenim mikrokontrolerima kroz zicanu mrezu i da im zadajem komande za svakog posebno.Koji mikrokontroler ima tu mogucnost ? Evo imam nesto vise slobodnog vremena danas, pa cu ti malo detaljnije odgovoriti. To sto ti pitas je cesta stvar u praksi i radi se bez obzira na konkretan tip mikrokontrolera. Kao sto vec i sam verovatno znas, postoje mikrokontroleri za razne namene, pa se u skladu sa tim u njih ugradjuju razne periferije, npr. za serijsku ili paralelnu komunikaciji, ili postoje dodatne komponente za to koje se lako prikljucuju na mikrokontroler i sl. To nisu tako retke stvari i lako se mogu pronaci u katalozima proizvodjaca. Medjutim, te komponente ti samo obezbedjuju da "fizicki" umrezis neke razne delove sistema, medjutim da bi to proradilo potrebno je i da se one "idejno" umreze, a o tome cu ja pisati u svom odgovoru, posto ti je to, cini mi se, potrebnije nego da ti navedem neki konkretan mikrokontroler. Dakle, veza izmedju dva ili vise mikrokontrolera se ostvaruje preko nekog fizickog kanala, a to je najcesce zica kao elektricni provodnik, opticki kabal, radio-veza itd. U okviru tih vrsta veza postoje razne podkategorije koje se razlikuju po brzini protoka, otpornosti na smetnje, nacinu slanja informacija (serijski, paralelni, sinhroni, kvazisinhroni,...) itd. Neke mogu da se protezu kilometrima, a neke nekoliko desetina cm. U zavisnosti od tvojih potreba i finansijskih mogucnosti izabraces neki nacin umrezavanja.Za sve sto je standardnog tipa postoje i gotove komponente za realizaciju, pocevsi od tih samih adaptera, napajanja za njih, kablova i konektora itd. Kada sve to fizicki spojis uradio si samo manji deo posla.(prvo to uradi na papiru, pa kad se uveris da je u redu, tek onda lemi). Znaci, imas nekoliko mikrokontrolera koji uz sebe imaju npr. PIA (Parallel Interface Adapter), bilo ugradjen u sebe ili pridodat kao zaseban chip, i neke kablove kojima je to sve medjusobno povezano. Sada postoji fizicki kanal kojim informacije mogu da putuju, ali to nije samo po sebi dovoljno. Da bi saobracaj informacija po toj magistrali mogao da se odvija moraju da postoje neka PRAVILA po kojima ce to da funkcionise. Ta pravila nisu univerzalna, i svako ih u datoj situaciji izmislja prema potrebama sistema za koje ih pravi. Ipak, neka pravila i neke realizacije su prilicno ceste i uobicajene i dovoljno univerzalna da se mogu skoro svuda primenjivati, ali to sad ne treba da te brine. Da citava prica ne bi bila suvise apstraktna, ja cu to pokusati da ti pojasnim na jednom jednostavnom primeru. Primer ce biti kvalitativno jednostavan, ali posto u citavoj toj prici ima dosta razlicitih aspekata to moze da bude malo glomaznije, pogotovo sto cu se truditi da idem postepeno, da bi prica mogla da posluzi i onima koji tek zalaze u ove vode. Ovo sto sledi procitaj polako i pazljivo. Nastoj da se uzivis u primer. Evo tog primera: - Pretpostavimo da nasa narodna skupstina ima 10 poslanika. U tu svrhu ti treba da u glavnoj sali za sednice napravis sistem od 10 terminala koji se nalaze u skupstinskim klupama. Preko tih terminala poslanici se identifikuju ubacivanjem odredjenih elektronskih kartica, a takodje i glasaju ZA ili PROTIV nekog predloga pritiskanjem odredjenih dugmadi na terminalu. Terminal takodje ima i neki displej na kome poslanik moze da procita neke poruke (npr. "UBACITE KARTICU","POGRESNO STE OKRENULI KARTICU", "KARTICA NEVAZECA", "IDENTIFIKACIJA USPESNA" i sl.). - Sem tih poslanickih terminala kod predsednika skupstine postoji jedan glavni terminal sa koga predsednik skupstine salje komande i obavestenja poslanicima na poslanicke terminale. Npr. predsednik skupstine moze poslati istovremeno svim skupstinskim terminalima komandu da im se na ekranu ispise poruka "PAUZA", ili "GLASAJTE SAD!" i sl. - Ako predsednik skupstine uoci nekog poslanika da spava, on moze samo na njegov terminal da posalje komandu da mu se na displeju ispise poruka "NE SPAVAJ, VIDIM TE!", ili neka druga. - Komande da se nesto desi moze slati samo glavni terminal koji je kod predsednika skupstine. - Poslanicki terminali mogu samo primati komande od glavnog terminala i na njegov zahtev slati njemu neke podatke (npr. o identifikaciji poslanika ili o rezultatu njegovog glasanja). - Poslanicki terminali ne mogu nista samoinicijativno slati na mrezu ili razmenjivati podatke sa drugim poslanickim terminalima. - Srce svakog poslanickog terminala cini jedan mikrokontroler opste namene. E sad, neki rodjak predsednika skupstine se negde jeftino domogao nekih mikrokontrolera opste namene, paralelnih 8-bitnih adaptera, te nekih 300 metara 8-zilnog kabla, pa je bas on pobedio na tenderu za nabavku opreme za realizaciju tog sistema, iako je tu opremu ponudio po 30 puta vecoj ceni nego sto se prodaje u susednoj prodavnici iza skupstine. Sticajem neobicnih okolnosti rodjak potpredsednika skupstine je nastavnik elektronike u tvojoj skoli, pa je on odabran za projektanta tog sistema, takodje za velike pare. On je dao tebi da odradis taj sistem za maturski rad, kako bi on dobio velike pare, a da nista ne mora da radi. Ti si zasukao rukave, uzeo te mikrokontrolere, spojio ih na odredjeni nacin sa citacem kartica, dugmetom za ZA, dugmetom za PROTIV i displejem. Zatim si ih povezao sa paralelnim 8-bitnim adapterima (PIA), a njih (PIA-ove) onim kablom. Kabla si imao taman toliko da sve poslanicke terminale i glavni terminal spojis na jednu zajednicku magistralu, ovako: ======================================================== glavna magistrala | | | | | | | | | | | .... | | | | | Glavni ter. Term.1 Ter.2 .... Ter.10 Gledajuci semu, ti vidis da kad glavni terminal posalje neki podatak da isti stize do svih terminala. - Pitas se kako da posaljes neku komandu samo terminalu 2, a da on zna da je ta komanda samo za njega, pri cemu ostali istovremeno znaju da nije za njih? - Kada terminal 2 posalje neki podatak glavnom terminalu, kako ostali terminali znaju da li je taj podatak koji su primili stigao od nekog drugog terminala ili je to poslao glavni terminal? Ova i slicna pitanja se resavaju onim PRAVILIMA koja sam ranije pominjao. Ta pravila se realizuju pomocu: - PROTOKOLA i - FORMATA PODATAKA Ovdje ce biti reci o tome. Ti sad mozes da razmisljas npr. ovako: Ja imam ovde 8-bitnu paralelnu magistralu. Znaci da poruke koje putuju po tim zicama idu u paketu od po 8 bitova, npr. ovako: 01101100 - prva porukuka 10101000 - druga 01110011 - treca 00000110 - itd. 11011000 ... ... Te poruke putuju u dva smera - jedan smer je od glavnog terminala ka poslanickim terminalima (npr. kada glavni terminal naredjuje nekom poslanickom terminalu da mu posalje podatak da li je poslanik glasao ZA ili PROTIV), a drugi smer je obrnut, od poslanickog terminala ka glavnom terminalu (npr. kada poslanicki terminal salje glavnom terminalu podatak kako je poslanik glasao). (Rekli smo ranije da izmedju poslanickih terminala ne postoji nikakva komunikacija). U tom slucaju ti odlucujes sledece: Neka mi prvi bit moje 8-bitne poruke signalizira o kom se smeru radi i to na sledeci nacin: - Kada glavni terminal upucuje neku poruku na magistralu, neka u toj poruci vodeci bit uvek bude "1". Na taj nacin ce sve poruke koje salje glavni terminal pocinjati sa "1" i svi poslanicki terminali kada prime takvu poruku ce znati da je to od glavnog terminala te ce obratiti paznju na takve poruke. Npr. 10010101 11110000 10001101 11000010 (sve poruke pocinju sa "1") ... ... - Kada neki poslanicki terminal salje poruku glavnom terminalu, neka u toj poruci vodeci bit uvek bude "0". Na taj nacin ce sve poruke koje salju poslanicki terminali pocinjati sa "0" i svi terminali ce kada prime takvu poruku znati da je to od nekog drugog terminala i da ih se to ne tice, jer je poruka upucena glavnom terminalu. Npr. 01010010 01110111 01010111 00000110 (sve poruke pocinju sa "0") ... ... Znaci ovako: 1.bit 2.bit 3.bit 4.bit 5.bit 6.bit 7.bit 8.bit |______|______|______|______|_______|_______|_______|_______| | | |______ kad je ovaj bit = "1" -poruku je poslao glavni terminal = "0" -poruku je poslao neki od poslanickih terminala Preostalo nam je jos 7 bitova da posaljemo neku korisnu informaciju (komandu ili podatak). Recimo da je predsednik skupstine uhvatio poslanika za terminalom br.7 kako drema i hoce da sa svog glavnog terminala posalje komandu poslanickom terminalu br.7 komandu da na svom displeju ispise tekst "NE SPAVAJ" (bolje bi bilo da ukljuci neku trubu, ali ajde sad). Znaci, ta poruka koju posalje glavni terminal treba u sebi da sadrzi i neku informaciju koja ce reci da se komanda odnosi bas na terminal br.7. Posto ima 10 terminala, potrebno nam je najmanje 4 bita da bismo mogli adresirati sve terminale ( 2^3=8 to nam je malo, 2^4=16 dovoljno za 10 terminala, a ima i nesto viska). Neka adresa terminala bude zapisana u bitovima 2, 3, 4 i 5, i to na sledeci nacin: Ako su bitovi 2, 3, 4 i 5 ovakvi: onda je adresiran: 0000 1. Terminal 0001 2. Terminal 0010 3. Terminal 0011 4. Terminal . ... . ... 0110 7. Terminal . ... . ... 1001 10. Terminal 1010 SVI Terminali 1011 ----NE KORISTI SE------- . ----NE KORISTI SE------- . ----NE KORISTI SE------- ----NE KORISTI SE------- 1111 ----NE KORISTI SE------- Znaci, da bi glavni terminal poslao komandu terminalu br.7 ona mora da izgleda ovako: 1 0 1 1 0 b b b |___|____________|_________| | | | | | |_____adresa terminala br.7 | |_____znak da je poruka od glavnog terminala Preostala tri bita (6, 7 i 8) mozemo da iskoristimo za kodiranje komande, npr.: Ako su bitovi 6, 7 i 8 ovakvi: onda je komanda sledeca: 000 -ukljuci terminal 001 -zahtevaj ubacivanje kartice 010 -ispisi na displeju poruku "GLASAJ SAD!" 011 -posalji rezultat glasanja 100 -resetuj rezultat glasanja 101 -ispisi na displeju poruku "PAUZA" 110 -ispisi na displeju poruku "NE SPAVAJ!" 111 -iskljuci terminal Znaci, da bi glavni terminal poslao terminalu br.7 komandu da na svom displeju ispise poruku "NE SPAVAJ!", ta poruka treba da izgleda ovako: 1 0 1 1 0 1 1 0 |___|____________|_________| | | | | | |____Komanda: ispisi na displeju poruku "NE SPAVAJ!" | | | |_____adresa terminala br.7 | |_____znak da je poruka od glavnog terminala Da bi glavni terminal naredio terminalu br.3 da posalje rezultat glasanja morao bi da posalje sledecu poruku: 1 0 0 1 0 0 1 1 I tako dalje za ostale poruke. Kada neki terminal salje podatak glavnom terminalu o tome kako je poslanik koji za njim sedi glasao, on bi to mogao da uradi na sledeci nacin: 0 a a a a r r r |___|____________|_________| | | | | | |____ = 000 znaci: poslanik je glasao "PROTIV" | | = 111 znaci: poslanik je glasao "ZA" | | | |_____adresa terminala koji salje rezultat | |_____znak da je poruka od poslanickog, a ne od glavnog terminala Da bi terminal br.3 poslao glavnom terminalu poruku da je poslanik koji za njim sedi glasao "ZA" on treba da posalje sledecu poruku: 0 0 0 1 0 1 1 1 |___|____________|_________| | | | | | |____ = 111 znaci: poslanik je glasao "ZA" | | | | | |_____adresa terminala br.3 | |_____znak da je poruka od poslanickog, a ne od glavnog terminala Ja sam npr. stavio da poslednja tri bita u ovom slucaju znace "ZA" (111) ili "PROTIV" (000). To npr. ne valja jer je za to dovoljan i samo jedan bit, pa sam uludo potrosio dva bita, kojima sam mozda mogao poslati jos neku dodatnu informaciju. Sa druge strane, to ima i nekih pozitivnih strana. Na linijama veze cesto moze doci do smetnji, pa npr. jedan uredjaj posalje poruku 000, a drugi primi 001. Ako mi znamo da u poslednja tri bita moze stici samo 000 ili 111, onda mozemo da detektujemo greske koje se jave kao bilo sta sto nije 000 ili 111 (npr. 001,100,110,101,010,itd.). U tom slucaju mozemo traziti od terminala da opet posalje rezultat glasanja jer znamo da je bila greska u prijemu. U slucaju da smo ostavili samo jedan bit za tu informaciju, on bi uvek bio ili 1 ili 0 i to bi uvek znacilo "ZA" ili "PROTIV" i nikad ne bismo detektovali gresku koja je nastala u prenosu. Posto je ishod glasanja od presudnog znacaja za drzavu, ne bi bilo lose da postoji neki mehanizam provere ispravnosti primopredaje te informacije. No, o tom malo kasnije. Ovo sam ti samo naveo kao primer, da jedna odluka moze imati i pozitivnih i negativnih strana. E sad, ovo sto smo utvrdili sta koji bitovi znace to je FORMAT PODATKA koji putuje po linijama veze. A to sto smo utvrdili sta ko kome i kada i pod kojim uslovima salje/prima to je PROTOKOL. Za sada format i protokol postoje u nasim glavama, a da bi se realizovali potrebno ih je na neki nacin ugraditi u sistem. Sve je to samo neka logika koju je na neki nacin potrebno inkorporirati u sistem. Mozemo to da uradimo hardverski (pomocu kombinacionih i sekvencialnih digitalnih kola i mreza), softverski (u programu mikrokontrolera) ili kombinovano. Danas se to sve uglavnom odradjuje softverski jer je tako najlakse i najjeftinije. Cene chipova su toliko pale da su oni ustvari najjeftiniju u citavom sistemu i ne treba izbegavati koriscenje mikrokontrolera. I o tom malo kasnije. Dakle, sve ove stvari cemo odraditi u softveru mikrokontrolera. Evo kako to da uradis. Zamisli sledecu situaciju. Glavni terminal je poslao komandu terminalu br.7 da na displeju ispise komandu "GLASAJ SAD!" On je to uradio tako sto je svom PREDAJNOM paralelnom adapteru predao tu komandu u odgovarajucem foramtu (10110010) i naredio mu da ga posalje. Ovaj je to ucinio i komanda je otputovala na magistralu. Posto svi terminali imaju PRIJEMNI paralelni adapter ti adapteri su tu poruku svi redom primili i o tome preko posebnog signala obavestili svoj mikrokontroler. Kada prime taj signal, mikrokontroleri preuzimaju tu primljenu poruku od svojih prijemnih paralelnih adaptera i pocinju da je analiziraju. Taj softver koji si ti u njih ubacio treba da "razmislja" ovako: 1. Da li je vodeci bit ove poruke = "1" ? - Ako nije, onda to nije poruka od glavnog terminala, pa me ne zanima. Vracam se da radim sta sam i do sada radio. Ova poruka nije za mene. - Ako je vodeci bit ove poruke = "1" onda je to neka komanda od glavnog terminala. Moze biti da je za mene. Treba da proverim da li se moja adresa nalazi u bitovima 2, 3, 4 i 5. 2. Da li se u bitovima 2,3,4 i 5 nalazi moja adresa? (Terminal br.7 ce proveravati da li se u tim bitovima nalazi 0110, terminal br.4 da li se tu nalazi 0011, terminal br.1 da li se nalazi 0000 i sl.) - Ako ne, onda je to komanda za neki drugi terminal. Nije za mene i ja se vracam da radim ono sto sam i do sada radio. - Ako da, onda je to komanda upucena meni. Treba da proverim sta se nalazi u bitovima 6,7, i 8, jer to predstavlja kod komande koju treba da izvrsim. 3. Citam bitove 6,7, i 8 i vidim da tu pise 010. To je komanda za ispisivanje teksta "GLASAJ SAD!" na displeju. 4. Ispisujem "GLASAJ SAD!" na displej. 5. Zavrsio sam sto se od mene trazilo. Vracam se starom poslu koji sam radio u momentu kad me je ova poruka prekinula. Kad prodje dovoljno vremena koliko je potrebno za glasanje, glavni terminal moze redom da upucuje komande poslanickim terminalima da mu posalju rezultate glasanja. Npr. naredi to terminalu br.10 komandom: 1 1 0 0 1 0 1 1 SVI terminali prime ovu poruku, medjutim SAMO terminal br.10 prepozna svoju adresu, zakljuci da se komanda odnosi na njega i SAMO ON posalje svoj rezultat sledecom porukom: 0 1 0 0 1 r r r (rrr = "111" za "ZA", rrr = "000" za "PROTIV"). Ostali terminali zanemaruju ovu komandu jer nisu prepoznali svoju adresu u njoj. Ostali terminali ce takodje primiti i ovu poruku koju je terminal br.10 poslao glavnom terminalu, ali ce i nju zanemariti jer je vodeci bit "0", a oni znaju da to znaci da to nije poruka od glavnog terminala sto njih jedino interesuje. Cak ce i terminal br.10 primiti sam svoju poruku preko prijemnog adaptera koju je malocas poslao preko predajnog adaptera, ali ce je zanemariti iz istog razloga kao i ostali terminali - jer nije od glavnog terminala! Glavni terminal moze da uputi komandu SVIM terminalima, npr. da se iskljuce ili resetuju rezultat glasanja. U tom slucaju u programu mikrokontrolera, kada dobiju komandu oni treba da se pitaju sledece: Da li se u bitovima 2,3,4, i 5 nalazi moja adresa ili smo mozda svi adresirani (2345 = "1010"). Ako je bilo sta od ovoga onda se komanda odnosi (i) na mene. Treba da procitam kod komande (bitovi 6,7 i 8) i da je izvrsim. Sad se postavlja pitanje, kako odredjeni mikrokontroler koji se nalazi u npr. terminalu br.5 da zna da je on broj 5 ? Prvo, i najgluplje resenje je da za svaki mikrokontroler napises poseban program koji ce u sebi da sadrzi bas taj podatak i da onda pazis koji mikrokontroler ugradjujes u koji terminal. Tada ces morati svaki od njih posebno da programiras na programatoru sto je znatno sporije nego kad imas jedan isti progam koji sisas redom u sve mikrokontrolere. Drugo, pametnije resenje je da mikrokontroler sam otkrije u kom se terminalu nalazi. To se radi tako sto u svakom terminalu postavis neke prekidace (jumper-e) ili nesto slicno sto mikrokontroler moze da ocita, a koje si razlicito setovao za razlicite terminale. Kada se sistem ukljucuje, mikrokontroleri u pocetku procitaju taj podatak i smeste ga u svoju memoriju u promenjivu koju npr. nazoves MyAddress i tako znaju kom terminalu pripadaju. Tada je program u svakom mikrokontroleru isti i ne moras da vodis racuna gde koji ugradjujes jer ce on sam da otkrije gde se nalazi. Znaci, ne moras da imas ni 10 razlicitih programa. Tako npr. mozes i da terminal br. 9 premestis na mesto terminala br.2, a bez da moras da vadis mikrokontroler, nanovo ga programiras i ponovo lemis na plocu. Samo prebacis prekidace. Protokoli i formati koje smo usvojili nekako odradjuju posao, ali sta se desava kada nesto treba da se doda ili oduzme? Pretpostavimo da npr. broj terminala treba da se uveca na 20. Mi imamo samo 4 bita za adresiranje terminala (2,3,4 i 5), sto nam daje maksimalno 16 razlicitih adresa. Znaci, necemo moci sa postojecim formatom to da izguramo. Mozda treba da dodamo jos neke komande, ali sve kombinacije koje daju poslednja tri bita zaduzena za kodovanje komandi su vec iskoristene. U tom slucaju mozemo da promenimo ili format ili protokol ili i jedno i drugo. Resenja ima bezbroj i ogranicena su samo mastom projektanta. Evo npr. jednog moguceg resenja: Neka se komande koje glavni terminal upucuje ostalim terminalima sastoje ne od jedne nego od DVE poruke: - PRVA poruka pocinje sa "10", a ostalih 6 bitova predstavljaju adresu terminala (posto sad imamo 6 bitova za adresu mozemo adresirati 2^6 = 64 terminala) - DRUGA poruka pocinje sa "11", a ostalih 6 bitova predstavljaju kod operacije koju treba izvrsiti (znaci mozemo narediti 64 razlicite operacije) Znaci, kad neki terminal u prvoj poruci prepozna svoju adresu, on zna da je sledeca poruka koja ce primiti namenjena njemu i da je u njoj kod operacije koju treba da izvrsi. Svi drugi terminali koji se nisu prepoznali u provoj poruci, ignorisu ovu sledecu poruku. Na ovaj nacin mozemo da adresiramo 64 terminala i naredimo 64 razlicite operacije. Da smo ovako u startu napisali program, nista ne bismo trebali nanovo da reprogramiramo ili menjamo, samo bismo nove identicne terminale nakacili na kabl magistrale bez ikakvog podesavanja. Istom logikom mozemo da prosirimo sistem jos vise, recimo da se komande sastoje od tri poruke. Prve dve sa po 6 slobodnih bitova predstavljaju adresu objekta, te sad mozemo imati 2^12 = 5096 terminala! Itd. Kod sistema kod kojih je pouzdanost informacija vrlo bitna uvodi se i EHO-protokol ili neki drugi nacin provere ispravnosti slanja. EHO protokol radi na sledeci nacin: Uredjaj A posalje uredjaju B neku poruku. B vrati tu istu poruku uredjaju A. Ako A dobije natrag istu tu poruku i utvrdi da je identicna onoj koju je i poslao, on smatra da je prenos bio ispravan i to javlja uredjaju B. Uredjaj B tek tada pocinje da postupa po komandi koju je dobio. Ako uredjaj A nije primio natrag istu poruku koju je i poslao, on nanovo salje poruku, jer je negde doslo do greske u prenosu. U nasem primeru glavni terminal komanduje nesto ostalim terminalima, ali ne zna da li ovi to odradjuju (izuzev kad trazi da mu se salju rezultati). U realnom sistemu, trebalo bi obezbediti i te povratne informacije. Dakle, da rezimiramo. 1 - Treba da nabavis hardver pomocu koga ces moci da umrezis razne delove sistema. Postoje mikrokontroleri koji u sebi imaju ugradjene primo/predajne adaptere i to raznih tipova, npr. paralelni, serijski, I2C magistrala, itd. Takodje, te adaptere mozes da kupis i posebno pa da ih povezes na mikrokontroler ako ih ovaj nema u sebi. (To ti je nesto kao mrezne kartice koje kupujes da bi povezao dva racunara: mrezne kartice utaknes u racunar, a kabal utaknes jednim krajem u jednu mreznu karticu, a drugim u drugu, ili koristis switcher ili nesto slicno.) Obicno se u jednom chipu nalaze i prijemni i predajni adapter. Serijska veza je brza od paralelne, a i jeftinija jer kabal kojim se povezuju delovi sistema ima manje zica. Serijska veza ima veci domet od paralelne (mislim u metrima). Linije veze je potrebno i dodatno baferisati. Postoje adapteri koji u sebi imaju ugradjene bafere, a baferi se mogu kupiti i kao zasebni chipovi. Vidi sam sta ti vise odgovara. 2 - Kada sve to uvezes hardverski, potrebno je da osmislis neka pravila kako ce sve te poruke da se razmenjuju i sta znace (kao npr. sto postoje saobracajna pravila koja omogucavaju odvijanje automobilskog saobracaja). Kada si sve to isplanirao, onda, ako postoji sansa da ce u buducnostitaj tvoj sistem da se menja ili nadogradjuje, pogledaj da li to moze da se odradi bez menjanja postojecih formata i protokola. Bilo bi dobro da moze. Ako ne moze, onda modifikuj format i protokole tako da je moguce bez ikakvog dodatnog projektovanja dodati npr. jos nekoliko delova sistema u postojeci sistem, a da se oni delovi od ranije ne moraju prepravljati ili ceo sistem projektovati ispocetka. Ako ti se sistem nalazi u nekoj sredini punoj elektromagnetnog suma (blizina industrijskih postrojenja, jaki strujni ili naponski vodovi, komsija varioc u blizini i sl.) treba da znas da se svaki komad zice ponasa kao antena, pa tako i tvoja magistrala. Sve te smetnje mogu da generisu glitcheve, promene nivoa signala u zici i sl., sto moze usloviti da npr. prijemni terminal primi razlicitu poruku od one koju je poslao glavni terminal. Npr. glavni terminal salje komandu terminalu br.7 da posalje rezultat glasanja sledecom porukom: 1 0 1 1 0 0 1 1 Zbog smetnji u vezi, treci bit, koji je u orginalnoj poruci "1", biva primljen kao "0", odnosno: 1 0 0 1 0 0 1 1 Onda ustvari terminal br.3 shvati da je to komanda za njega i on posalje svoj rezultat umesto terminala br.7. Tako se glas poslanika za terminalom br.3 ubroji dva puta, a onog za terminalom br.7 nijednom! U takvim situacijama moras da razmisljas kako da povecas verovatnocu prijema ispravne poruke. Nijedan metod nije savrsen, pa ni EHO protokol. Naprimer zamisli sledecu situaciju: Glavni terminal salje sledecu poruku: 1 0 1 1 0 0 1 1 Na liniji treceg bita dodje do greske i primljena poruka je: 1 0 0 1 0 0 1 1 Sad terminal br.3 vraca ovu primljenu poruku glavnom terminalu, ali zamisli da u povratku opet na istoj liniji dodje do greske i glavni terminal primi poruku: 1 0 1 1 0 0 1 1 koja je identicna onoj koju je poslao i on misli da u prenosu nije bilo greske, a bile su dve greske i to u oba smera i to na istoj liniji! Ti mozes kod izuzetno vaznih komandi ili podataka da napravis protokol da se one salju 3,5, 15 ili vise puta uzastopno, i da tako povecavas verovatnocu ispravnog prenosa. Mozes da smislis i neki drugi nacin ako ti padne na pamet. Ako neki mikrokontroler ima u sebi ugradjen npr. serijski adapter, onda se njemu spolja pristupa preko pinova koji su obicno oznaceni sa Rx (prijemin pin, od Receive) i Tx (predajni pin, od Transmit). Ima obicno i jos jedan pin koji daje signal o smeru u kojem se vrsi komunikacija (da li mikrokontroler prima podatak u nekom trenutku preko linije Rx ili ga salje preko linije Tx). U zavisnosti od potreba sistema, mozes da napravis pun-duplex (saobracaj se moze istovremeno vrsiti u oba smera, jer postoji kabal za jedan i kabal za drugi smer), polu-duplex (saobracaj se preko istog kabla moze vrsiti u oba smera, ali ne istovremeno), i simplex veza (saobracaj se moze vrsiti samo u jednom smeru). Najbolje je imati pun-duplex, ali to je i najskuplje jer imas duplo vise kabla. Ako ti je brzina kriticna, onda stavis pun duplex. Ako ti nije brzina kriticna (npr. u nasem primeru nije od velikog znacaja da li ce glavni terminal da skupi rezultate glasanja za 1 ili 2 sekunde, jer poslanici ionako prilicno dangube) onda nema potrebe da bacas pare na kablove. Prilikom projektovanja, uzmi u obzir cinjenicu da ce u toj realizaciji najvise da te kostaju stampane plocice, kablovi, konektori, prekidaci i slicne elektromehanicke stvarcice. Cena samih cipova (mikrokontroleri, mrezni adapteri i sl.) je najmanja u svemu, tako da ne prezas od toga da upotrebis u jednom terminalu tri mikrokontrolera umesto jednog, ako ce to na neki nacin da smanji velicinu stampane plocice, vreme lemljenja, vreme projektovanja, broj nekih diskretnih komponenti i sl. Kad sam ja umrezavao svoje racunare kod kuce, 90% tih troskova je otislo na kablove. O nacinima kako da povezes mrezne adaptere na mikrokontroler, ili kako da im pristupis ako ih on vec ima ugradjene u sebi, imas u dokumentaciji proizvodjaca. Da bi sve to mogao da realizujes u programu mikrokontrolera treba da znas nesto i o mehanizmu prekida, poliranju i programiranom ulazu/izlazu. Eto, to ti je to, za pocetak. Znam da sam hteo jos o necemu da pisem, ali se sad ne mogu setiti o cemu. Ako se setim, dodacu kasnije. Ako ti imas nesto da pitas, ili ako ti nesto nije jasno, pitaj, pa cu videti da ti odgovorim, ako budem znao. Pozdrav.