|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
pirpy Član
Pridružen-a: Ned 30 Maj 2004 21:57 Prispevkov: 772 Aktiv.: 3.46 Kraj: Topolšica
|
Objavljeno: Ned Dec 25, 2011 3:54 am Naslov sporočila: Kako gledati rx pin |
|
|
Lp
Imam en problemček.
Imam nekaj modulov za pametno hišo .ki so skupaj povezani na eno rs485 parico.
Moduli so v master -master načinu in lahko začnejo oddajati kadarkoli.
Ker ne znam gledat rx pina se zgodi da 2 modula začneta istočasno oddajati in pride do "karambola"podatkov.
V datasheetu procesorja atmega168 nisem našel nobene zastavice ,ki bi kazala da je rx sprejemnik v fazi sprejemanja podatka ,zastavica oz prekinitec se zgodi potem ko je byte že sprejet,kar pa je včasih prepozno.
Ima mogoče kdo kakšno rešitev(razen uporabe paralelnega vhoda samo za preverjanje rx linije)
Hvala
B
|
|
Nazaj na vrh |
|
|
igor_k Član
Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 992 Aktiv.: 4.44 Kraj: Rače
|
Objavljeno: Ned Dec 25, 2011 1:23 pm Naslov sporočila: |
|
|
Preden začneš oddajati počakaš (najmanj) čas, ki je potreben, da se sprejme cel karakter - pri 19200 je to cca 500uS.
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.01 Kraj: Dragomer
|
Objavljeno: Ned Dec 25, 2011 5:16 pm Naslov sporočila: Re: Kako gledati rx pin |
|
|
pirpy je napisal/a: |
Lp
Imam en problemček.
Imam nekaj modulov za pametno hišo .ki so skupaj povezani na eno rs485 parico.
Moduli so v master -master načinu in lahko začnejo oddajati kadarkoli.
Ker ne znam gledat rx pina se zgodi da 2 modula začneta istočasno oddajati in pride do "karambola"podatkov.
V datasheetu procesorja atmega168 nisem našel nobene zastavice ,ki bi kazala da je rx sprejemnik v fazi sprejemanja podatka ,zastavica oz prekinitec se zgodi potem ko je byte že sprejet,kar pa je včasih prepozno.
Ima mogoče kdo kakšno rešitev(razen uporabe paralelnega vhoda samo za preverjanje rx linije)
Hvala
B |
Morda ti bo pripeta vsebina kaj pomagala.
Opis: |
|
Download |
Ime datoteke: |
aha.ZIP |
Velikost datoteke: |
9.79 MB |
Downloadano: |
8 krat |
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.63
|
Objavljeno: Ned Dec 25, 2011 5:58 pm Naslov sporočila: |
|
|
igor_k je napisal/a: |
Preden začneš oddajati počakaš (najmanj) čas, ki je potreben, da se sprejme cel karakter - pri 19200 je to cca 500uS. |
Tole ne bo pomagalo. Trk se lahko zgodi pri naslednjem znaku, torej ti fiksna zakasnitev nič ne pomaga.
Problem lahko rešiš na vsaj dva načina:
1- Samo ena enota bo master, ki bo periodično klicala ostale. Ti potem pošljejo svoj paket, ki ga sprejemajo vsi ostali (in pač izluščijo podatke, ki jih potrebujejo). Na tak način naj ne bi prihajalo do trkov.
2- Implementiraš poln CSMA (torej vpelješ precej naključnih čakanj in verjetnosti, da gre neka enota sploh oddajat). Na ta način zbiješ verjetnost trkov na minimum. CSMA/CD dvomim, da lahko rešiš samo preko UART-a. Je pa CSMA čisto dovolj.
V vsakem primeru dodaj CRC k paketu, da boš vedel, če si paket sprejel brez napak.
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
red_mamba Član
Pridružen-a: Ned 20 Feb 2005 17:56 Prispevkov: 1486 Aktiv.: 6.66 Kraj: Yogyakarta
|
Objavljeno: Ned Dec 25, 2011 6:01 pm Naslov sporočila: |
|
|
vsako krat ko master poslje mora sprejemnik poslati nazaj confirm.
ce ga ne dobis pocakas en random delay in posljes se enkrat.
Tako se prej ali slej poslje sporocilo iz masterja.
Na podoben nacin deluje CAN/LIN
_________________ Bad things happen to good people all the time for no reason!
Blog |
|
Nazaj na vrh |
|
|
igor_k Član
Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 992 Aktiv.: 4.44 Kraj: Rače
|
Objavljeno: Ned Dec 25, 2011 6:45 pm Naslov sporočila: |
|
|
gumby je napisal/a: |
Tole ne bo pomagalo. Trk se lahko zgodi pri naslednjem znaku, torej ti fiksna zakasnitev nič ne pomaga. |
Tole pomaga v toliko, da ne začneš oddajati na že zasedeno linijo, kar je seveda veliko večja verjetnost, kot da dva začneta oddajati hkrati. Če je vsak blok podatkov velik 10 bytov si rešil 90% trkov. Mislim da je jasno, da moraš, če naletiš na zasedeno linijo, počakati nek naključen čas.
Hkratno oddajanje pa lahko rešiš samo s potrditvijo sprejema s strani sprejemnika, kot je napisal že red_mamba.
Nazadnje urejal/a igor_k Ned Dec 25, 2011 10:48 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.01 Kraj: Dragomer
|
Objavljeno: Ned Dec 25, 2011 9:54 pm Naslov sporočila: |
|
|
Popolno odsotnost kolizije sporočil na liniji lahko dosežeš tako, da je eden gospodar (master), ki ciklično sužnjem (slave.om) ukaze in zahteve po odgovorih, in potem služnji samo odgovarjajo takrat, ko so poklicani.
Če pa imaš koncept, ko se vsak oglaša, kadar čuti potrebo, potem se da pogostnost kolizije zmanjšati tako, da poslušaš linijo, vsak bajt posebej, le ta proži serijsko prekinitev (serial interrupt), ki resetira nek števec na nič, sicer pa se števec s časom povečuje (če je bajt do 255, in potem tam stoji). Rast tega števca zagotoviš z rutino časovne prekinitve (timer interrupt subroutine), ki je v rednih presledkih proži.
Ko se program odloči, da bo nekaj oddal, najprej generira slučajnostno število, in če je prej omenjeni števec večji od tega slučajnostnega števila, tedaj program preide na oddajanje, sicer čaka v zanki na ta pogoj.
Kot rečeno, na ta način se na smiselno majhno vrednost zmanjša možnost kolizije telegramov, kolizija s tem ni izključena. Če je važno, da se noben telegram 'ne izgubi', potem je boljša prva varianta.
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
igor_k Član
Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 992 Aktiv.: 4.44 Kraj: Rače
|
Objavljeno: Ned Dec 25, 2011 11:06 pm Naslov sporočila: |
|
|
Ne vem zakaj bi čakal na oddajanje nek naključen čas, ker s tem ne rešiš problema trkov. Preden preideš v oddajanje poslušaš rx pin tisti minimalni čas za sprejem enega bajta in če nisi sprejel ničesar začneš z oddajanjem, če pa si sprejel kakšen karakter (takrat je linija zasedena) šele takrat čakaš nek naključen čas in po tem času spet poslušaš na rx.
Pogoj je seveda, da oddajnik oddaja paket naenkrat, torej brez prekinitev.
Problem trkov pa lahko popolnoma odpraviš s potrditvijo sprejema s strani sprejemnika. Toliko časa pač pošiljaš, dokler ne dobiš odgovora.
Sistem master-slave je sicer uporaben, problem je pa v tem, da če master odpove celoten sistem ne deluje več.
|
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.63
|
Objavljeno: Ned Dec 25, 2011 11:27 pm Naslov sporočila: |
|
|
Naključen čas je potreben. Če bodo vse enote imele vedno enake in fiksne timinge, se bodo nonstop zaletavale med seboj.
_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
igor_k Član
Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 992 Aktiv.: 4.44 Kraj: Rače
|
Objavljeno: Pon Dec 26, 2011 12:02 am Naslov sporočila: |
|
|
igor_k je napisal/a: |
...če pa si sprejel kakšen karakter (takrat je linija zasedena) šele takrat čakaš nek naključen čas in po tem času spet poslušaš na rx. |
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.01 Kraj: Dragomer
|
Objavljeno: Pon Dec 26, 2011 12:06 am Naslov sporočila: |
|
|
naključen čas je potreben, kajti lahko se zgodi, da želi več udeležencev pošiljati informacijo. Če bi vsi čakal isti čas, bi po preteku tega časa vsi, ki čakajo, začeli oddajati in je trk zagotovljen.
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
|
|
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: 82 dni
Powered by phpBB © 2001, 2005 phpBB Group
|