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 

Kako gledati rx pin

 
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
pirpy
Član
Član



Pridružen-a: Ned 30 Maj 2004 21:57
Prispevkov: 772
Aktiv.: 3.46
Kraj: Topolšica

PrispevekObjavljeno: Ned Dec 25, 2011 3:54 am    Naslov sporočila:  Kako gledati rx pin Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 992
Aktiv.: 4.44
Kraj: Rače

PrispevekObjavljeno: Ned Dec 25, 2011 1:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



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

PrispevekObjavljeno: Ned Dec 25, 2011 5:16 pm    Naslov sporočila:  Re: Kako gledati rx pin Odgovori s citatom

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.



aha.ZIP
 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.63

PrispevekObjavljeno: Ned Dec 25, 2011 5:58 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.66
Kraj: Yogyakarta

PrispevekObjavljeno: Ned Dec 25, 2011 6:01 pm    Naslov sporočila:   Odgovori s citatom

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 Wink

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 992
Aktiv.: 4.44
Kraj: Rače

PrispevekObjavljeno: Ned Dec 25, 2011 6:45 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



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

PrispevekObjavljeno: Ned Dec 25, 2011 9:54 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 992
Aktiv.: 4.44
Kraj: Rače

PrispevekObjavljeno: Ned Dec 25, 2011 11:06 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.63

PrispevekObjavljeno: Ned Dec 25, 2011 11:27 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igor_k
Član
Član



Pridružen-a: Pon 19 Jul 2004 11:44
Prispevkov: 992
Aktiv.: 4.44
Kraj: Rače

PrispevekObjavljeno: Pon Dec 26, 2011 12:02 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



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

PrispevekObjavljeno: Pon Dec 26, 2011 12:06 am    Naslov sporočila:   Odgovori s citatom

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
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
Stran 1 od 1

 
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: 82 dni


Powered by phpBB © 2001, 2005 phpBB Group