Tema: Re: PC valdymas per IrDa
Autorius: Valdas
Data: 2010-10-28 09:35:14
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