Ahoj autore, dekuji za clanek. Jenom prosim o vysvetleni (tohle jsem nikdy nemohl pochopit), jak pozna receiver, kdy ma cist ten start bit. Jako ze predstavuji si, ze se napichnu na linku, kde nekdo vysila, tak jak mam poznat, KTERY prechod z vysoke urovne na nizkou je ten zacatek a kdy je to jenom jedna z nul uprostred normalnich jednicek.
Furt to jeste nechapu. Co je to ticho? Vzdyt je to jenom dvoustavove, vysoka a nizka uroven. Jak se pozna "ticho" od treba dvou az trech jednicek po sobe? Kdyz se podivam na obrazek z clanku
(http://i.iinfo.cz/urs/pc_39_09-122765291441251.png)
a predstavcim si tu sekvenci na nem zobrazenou opakovane za sebou, bez toho, ze by k tomu byla popiska :-), tak netusim, jak bych poznal, ze zrovna TED je start bit a ne jenom jedna z nul.
z toho obrazku to nepoznate. "ticho" je na UART-u logicka 1.
kdyz mate nepretrzitej tok dat, tak jednou za 10 bitu (nejjednodussi pripad), je prechod 1->0 (stopbit->startbit), jakmile takovou vec po dobu 10 bitu neuvidite, tak vite, ze se nevysila a je jasny, ze dalsi hrana bude patrit startbitu.
Takže chápu to správně tak, že když se nepřetržitě vysílá - stále se nepravidelně střídají nuly a jedničky - tak čerstvě se připojený přijímač nemá šanci zachytit začátek bytu, tedy že v nepřerušeném vysílná nelze rozpoznat start bit? Jinými slovy, synchronizovat se dá jedině poté, co byl chvíli (po čas potřebný při dané rychlosti k odeslání deseti bitů) úplný klid? A potom, když už jsem se jednou chytil, se nesmím "splést", tedy musím si odpočítávat další začátky, aby se mi nepopletly s nějakýma normálníma nulama?
Chapete to spravne. V praxi se totiz nestava, ze by vysilac vysilal neustale. Obvykle se komunikuje stylem dotaz-odpoved, takze tam nejaka mezera vznikne. Navic nekde o uroven vys obvykle dochazi k tomu, ze kdyz do urcite doby nedojde srozumitelna odpoved, tak se posle novy dotaz.
Děkuji ID a bnmmb za odpovědi. Tuto věc jsem nechápal asi tak dvacet let :-) Vždycky jsem si představoval, že vysílání je nepřetržité a že přijímač nějak je schopný najít začátek, což mi ale z popisu protokolu nebylo jasné, jak to udělá. Takže moc díky za vysvětlení!
na mezeru se opravdu spoleha. schema synchronizace, ktere jste popsal v jinem svem prispevku je sice duvtipne, ale nedokaze *zarucit*, ze se prijimac zasynchronizuje na libovolnych datech - k tomu by bylo nutne vkladat do dat spec. znaky jako napr. 0 nebo 255 apod.
Pokud je pocet stop bitu rovny nebo vetsi 1, tak se lze "pomerne" rychle nasynchronizovat i do neustale probihaji komunikace, ono proto tam ten stop bit je.
Proste prijimac ma OKNO (posuvny registr) o delce 10 bitu ktery se posouva komunikacni rychlosti od doby nez se zachytil prvni start (muze byt i falesny - pripojeno uprostred bajtu). Pokud sedi podminka pro start a stop bit, tak se znak prijme. Pak se okno zacina plnit od pocatku, do te doby nez se nenaplni uplne a bud sedi start/stop (=prijmout+restart), nebo nesedi (=shift).
Pokud by to bylo s tim 10bitovym registrem a s vyhodnocovanim stopbitu tak, jak rikate, tak by to asi fungovat mohlo. Nicmene i tak me napada teoreticka moznost, ze se prijimac chytne v takovem miste, ze na miste stopbitu bude bit s hodnotou, ktera vypada jako stopbit a za nim bude zase bit, co vypada jako startbit.
Ale stejne si myslim (nejsem to schopen dokazat), ze se stopbit nevyhodnocuje. Ze v okamziku, kdy prijimac chytne startbit, tak se zasynchronizuje, pak se chytnou datove bity (a parita) a jakmile je pochytano, tak se cely bajt strka nekam do fronty, zatimco vysilac vysila prave ten stopbit. Mam za to, ze ten stopbit tam je prave proto, aby se stihla zpracovat prijata data, ne kvuli vyhodnoceni jejich spravnosti. Kvuli kontrole spravnosti prece je (nebo spise muze byt) parita.
Mimochodem, anketni otazka, zazil jste nekdo v poslednich peti letech aplikaci na RS232, ktera by pouzivala paritu?