Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mreza od vise mikrokontrolera i njihovo adresiranje

[es] :: Elektronika :: Mikrokontroleri :: Mreza od vise mikrokontrolera i njihovo adresiranje

[ Pregleda: 7207 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

predragi

Član broj: 7422
Poruke: 345
*.vdial.verat.net.



Profil

icon Mreza od vise mikrokontrolera i njihovo adresiranje20.12.2005. u 17:41 - pre 222 meseci
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 ?
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje21.12.2005. u 01:33 - pre 222 meseci
pozdrav,
pitanje je malo neprecizno pa je odgovor malo opstiji.
moguce je povezati konacno mnogo mikroprocesora u zavisnosti kako ih povezujes. najjednostavnije je da ih povezes koristeci RS485 standard (to ti je serijski hald-duplex komunikacija). u zavisnosti od drajvera koji upotrebis mozes povezati od tridesetak do oko 250 mikrokontrolera. mikrokontroler treba da ima serijski port (mada moze i bez njega ako su brzine prenosa nize - koriscenjem "bit bang" tehnike sto je ustvari implementacija uart-a u softveru). nacin adresovanja zavisi od primenjenog protokola (u industriji koriste se razni, ja sam koristio modbus i opto 22) ali ti mozes da izmislis svoj.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje21.12.2005. u 14:47 - pre 222 meseci
Evo ja bijah napisao neki odgovor, sve fino isformatirah, no kad kliknuh na "Pogledaj kako poruka izgleda" ono se sve nesto ispreturalo. Ja potom kliknuh na "Back", a ono mi vrati prazan obrazac za odgovor?!

Srecom sam sacuvao odgovor u .txt formatu, pa mogu da ga upload-ujem, no gledam okolo gde je dugme za to i ne vidim ga. Moze li mi neko pomoci?



Evo teksta za prvu pomoc, pa ako se neko moze snaci nek cita dok ne nadjem dugme za upload:

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.
Ti si 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. 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 prihvata tu komandu ili podatak od A i postupa po tome.
Ako uredjaj A nije primio natrag istu poruku koju je i poslao, on nanovo salje poruku, jer je negdje

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.
- 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.
- 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, jako 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.






 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje21.12.2005. u 15:19 - pre 222 meseci
Evo u attachementu ove poruke, malo sredjeniji tekst.

Preporucujem da prozor prilikom gledanja prozor prosirite preko citavog ekrana.

Prikačeni fajlovi
 
Odgovor na temu

indicator1
BGD

Član broj: 4248
Poruke: 533
*.dialup.sezampro.yu.



+1 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje22.12.2005. u 13:03 - pre 222 meseci
Svakako da moze, sve zavisi sta hoces da postignes.


Ako imas distrubuirani sistem 1 master na N slave kontrolera, najjednostavniji pristup je svakako serijska veza (485 half- dupleks) bas kao sto ti je i obranko preporucio. Protokol - uzmi Modbus, nemoj izmisljati neki svoj jer je Modbus ipak standard a nije preterano komplikovan.

Ako ti treba vise kontrolera u bliskom okruzenju, tj ako hoces da simuliras multitasking, ja ti preporucujem opet serijsku vezu ali I2C. Npr, Philips to forsira na svojim uredjajima ( DVD plejerima islicnim uredjajima) gde imas zasebne kontrolere-procesore za obradu slike, menije, pogon drajva i svi komuniciraju kroz I2C. Ja sam radio neke skromnije probe, a zelja mi je da uradim uredjaj koji ce imati 4-5 mikrokontrolera, svaki sa specificnim zadatkom. I2C podrazumeva komunikaciju samo na malim daljinama a mana je i sto je i ovo sistem 1 master - N slave.
Uopste problem je kod serijske veze implementirati vise mastera, stalne kolizije dovode ogromnog ponavljanja u saobracaju. Jedno resenje je uvodjenje jos jedne data linije koja ce upravljati vremenskim multipleksiranje, tj definisanje kad koji master moze da preuzme magistralu.
Ako povezujes samo dva kontrolera, efektno resenje je dual-port ram.

Znaci resenja je veliki broj a koje ces ti uzeti, zavisi od tvog umeca i konkretnog problema.

[Ovu poruku je menjao indicator1 dana 22.12.2005. u 14:16 GMT+1]
 
Odgovor na temu

Billy_boy

Član broj: 13944
Poruke: 354
*.cmu.carnet.hr.



Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje21.02.2006. u 18:29 - pre 220 meseci
Krivo. I2C je multimaster bus.
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
195.252.126.*



Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje22.08.2006. u 13:16 - pre 214 meseci
Ja sam na mom uredjaju imao na i2c bus-u DS1307 real time clock + i2c eeprom + PIC16F872. Kao master sam koristio PIC16F877A. Evo dela koda u CCS C compajleru:

MASTER:

#use i2c (master, sda=pin_c4, scl=pin_c3, force_hw, slow, smbus)
..
// Citanje 1 bajta podatka sa slejva (adresa F0)

i2c_start();
i2c_write(0xf1);
input_reg=i2c_read(0);
i2c_stop();
..

SLAVE: (16F872)

#use i2c(Slave,Fast,sda=PIN_C4,scl=PIN_C3,restart_wdt,force_hw,address=0xf0)

#int_SSP
void SSP_isr() {

BYTE state;

switch (i2c_isr_state()) {

case 0: output_B(i2c_read());
break;
case 0x80: i2c_write(input_reg);
break;
}
}

nisam probao vise od jednog slave kontrolera ali mislim da ne bi trebalo biti problema jedino sto treba voditi racuna oko kapacitivnosti na bus-u kod veceg broja slave-ova odnosno vrednosti pull-up otpornika. Kod mene je bilo 4,7K.
 
Odgovor na temu

stojakovicv
Vladimir Stojakovic
Gajdobra

Član broj: 12835
Poruke: 389
*.nectar.co.yu.



+2 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje22.02.2007. u 09:15 - pre 208 meseci
POtrebno mi je sledece:

Jedan PIC je preko rs232 ili USB-a povezan na PC. Taj PIC je master u mrezi.

Slave PIC-ovi su rasporedjeni na razlicitim mestima (u razlicitim masinama) i kupe stanja ulaza i izlaza sa PLC kontrolera ili sa sklopki i kontaktora (na mestima gde nema PLC-ova).

Master proziva slejvove i kupi podatke od njih i te podatke salje PC-u. Na PC je softwer koji sve te podatke obradjuje i vizualizuje.

Ukratko: Rec je SCADA-i.

Interesuje me koliko SLAVE kontrolera moze da se poveze u CAN mrezu, a koliko u RS485 ? Odnosno koliko NODOVA moze da ima koja mreza?

 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin.sezampro.yu.



Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje22.02.2007. u 14:43 - pre 208 meseci
To je izvodljivo i sa CAN-om i sa RS485. Sto se broja slejvova tice mislim da je maksimalno nekih 300 u rs485. Za CAN ne znam tacno ali je vrlo verovatno ta je slicno kao i kod rs485.
E sad, pic mikrokontroleri koji imaju hardverski USART imaju mogucnost da rade u 9-bitnom modu sa detekcijom adrese, sto ce reci da slejv ne odgovora dok se ne posalje adresa i ako adresa odgovara adresi slejva slejv moze slati/primati podatke. Pogledaj na www.mikroelektronika.co.yu mislim da imaju primere za takvu vrstu komunikacije za njihove kompajlere (basic, pascal i c). Sto se tice komunikacije master-PC tu mozes koristiti i USB i rs232 s tim sto kontroleri koji imaju USB obicno nemaju USART pa ti je moja preporuka da za master koristis neki od kontrolera koji imaju 2 USART-a, 1 jedan za RS485 a drugi za komunikaciju sa PC. Ako bas treba preko USB mozes koristiti FT232 kolo kao adapter RS232-USB.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Mreza od vise mikrokontrolera i njihovo adresiranje24.02.2007. u 15:07 - pre 208 meseci
Ako mogu da pomognem mojim iskustvom.

Koristim MC9S08GB32 (iste mogucnosti imaju i drugi mikrokontroleri ove motoroline familije). Vezu sam ostvario izmedju 20 mikrokontrolera RS485 komunikacijom. Jedan je bio master. Iskoristio sam osobinu da prijemnik SCI (serijske komunikacije) moze da se probudi na idle stanje na liniji ili kada primi adresni mark bit (9-ti bit)

Budjenje na idle izaziva interrupt, i to koristi onam MCU koji zeli da salje poruku, a budjenje na adresni marker (interrupt-om) budi sve MCVU-ove koji treba da prime adresu, a samo onaj koji ima istu adresu ostaje aktivan na liniji , dok se svi drugi povlace.

Detekcija idle stanja linije je prakticna samo za potpuni dupleks, sto nije slucaj sa RS485. Ovo zato sto je jednostavnije resavati problem konflikta na liniji koja je potpuni dupleks. Konflikt se moze resiti, na primer kod RS232 tako sto posle detekcije idle stanja MCU poveze svoj RxD da ide na TxD (to je moguce kod MC9S08GB32 a verovatno i kod nekih PIC-ova), salje neki bajt, i ako primi isti onda se moze zakljuciti da nema konflikta, razveze RxD i TxD i nastavi sa slanjem poruke. Ako ima konflikta (nije primio ono sto je poslao) onda posle nekog vremena koje se generise pomocu slucajnog broja pokusa isto. Ovo lici na resavanje konflikta kod eterneta.

Kako RS485 nije potpuni dupleks, koristio sam maset-slave strukturu mreze. U gotovo svim tekstovima o mreznom povezivanju, na pocetku stoji konstatacija da je master-slave najpouzdanija, ali povecava saobracaj na mrezi. Dakle, masterom sam prozivao ostalih 19 MCU-a po adresi. U odgovoru MCU-a moze da bude zahtev da slave MCU komunicira sa drugim slave MCU-om. Tada se master povlaci, ali osluskuje njihovu komunikaciju, i kada se ona zavrsi ponovo preuzima master ulogu.

Ovo zahteva da master stalno proziva slave MCU-ove, i onda kada ne treba sa njima da komunicira. To povecanje saobracaja je cena master-slave povezivanja. Ako nema potrebe da slave-MCU-ovi medjusobno komuniciraju, onda je stvar krajnje jednostavna.

Nadam se da sam pomogao.

Pozdrav.

 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Mreza od vise mikrokontrolera i njihovo adresiranje

[ Pregleda: 7207 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.