Sujungiau RXD su DSR, na dabar kazka grazina, bet ir spaudant ta pati mygtuka grazinamos reiksmes skiresi :(, matyt teks gryzti prie Girder... "saimhe" <oh.no@oh.my> wrote in message news:ia95d4$79l$2@trimpas.omnitel.net... >> o jei RXD sujungsiu su DSR, tai kazka paimines ? > > Kokie baitai gali matytis, jau rašiau. Toks iškreiptas būdas leis > grubiai matuoti impulso trukmę, su sąlyga, kad intervalas tarp jų yra > pakankamai didelis, impulsas yra nuo 1 iki 10 bitų trukmės (atitinkamai > parinkus porto baud rate). Jei intervalas irgi koduoja informaciją, ją > prarasi. > > Pavyzdžiui, http://www.sbprojects.com/knowledge/ir/rc5.htm būtina > matuoti abi trukmes. Šitas kodavimas primena UART duomenų formatą > tik iš dalies. > Ekvivalentinis baud rate yra 1 / 889e-6, gana toli nuo artimiausių > standartinių 600 ir 1200. Kai kurie UART išspaudžia įvairesnius greičius, > bet reikia žiūrėti dokumentaciją. Pavyzdžiui, FT232 > http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-05_BaudRates.pdf > draiveriui tiesiog padavus suapvalintą reikšmę 1125 bps, paklaida bus > pakankamai maža. > Atskiras klausimas, ar visada gausis start/stop bitai, be kurių > UART nieko nepriims. Imkim paveiksliuke duotą paketą (adresas 05h, > komanda 35h). Pirmas baitas gautųsi 0A9h. Bet, esant parity "none", > priims tik kol bit6=0, nes jo pirmoji pusė atitinka stop bitą (su > bit6=1 jau reikia parity "space"). Kol kas sekasi. bit6=0 antroji > pusė yra visai neblogas start bitas, todėl antras baitas gautųsi 56h. > Jo stop bitu gali būti tik bit11 pirmoji pusė, vadinasi, reikia bit11=1. > Deja, greitai kaitalioti parity neleidžia nei UART, nei draiveris. > Tegul pasisekė ir bit11=1, jame tuo pačiu randame start bitą, > tolimesni bitai užkoduoja 0D9h (du paskutiniai bitai ir stop imami > iš pauzės tarp paketų). > Vienžo, užsiknisi ir universaliai tikrai nesigaus. Kai kurių > distancinių (dėl siunčiamo nepalankaus adreso) nematys apskritai, > o kituose nematys dalies mygtukų. > > girder irgi neturi kitos išeities. Turėtų neblogai gautis, imant > DSR atsiradimo ir dingimo timestamp'us su GetSystemTimeAsFileTime(): > raiška 0.1 mikrosekundės, ir naudojant vien FILETIME.dwLowDateTime, > maksimali trukmė daugiau nei pakankama (429 sekundės), tačiau reikšmė > retkarčiais "apsiverčia" (timestamp skirtumas gausis neigiamas -- > reikia koreguoti). Rezultatas bus keliolikos skaičių masyvas ir, šias > trukmes analizuojant, galima dekoduoti. > > -- > saimhe