Eksperimentai su radijo ryšio moduliais 2

Praeitą kartą bandžiau perdavinėti duomenis iš kompiuterio o priiminėjau mikrokontroleriu. Šį kartą bandžiau ryšį tarp dviejų mikrokontrolerių. Kaip jau minėjau praeitą kartą, pagrindinė blogo ryšio priežastis yra tame, kad perduodame signale neišlaikomas vienodas nulių ir vienetų skaičius. Tai labai stipriai veikia perdavimo kokybę. Jei signalas formuojamas kompiuteryje programiškai, to garantuoti negalima. Kompiuterio operacinė sistema nėra realaus laiko, ji duoda užduotį procesoriui, kurią jis įvykdys vėliau, kai turės laiko. Tas „vėliau“ dažniausiai yra pakankamai greitai, bet ne visada, tai priklauso nuo sistemos apkrovimo. Todėl signale gali atsirasti tarpai, kurie pablogins ryšį. Kai signalą formuoja mikrokontroleris, tokių nenumatytų užlaikymų nebus.

wireless7.jpg

Bandžiau beveik taip pat kaip ir pirmą kartą, signalas formuojamas per USART, koduojant manchester kodavimu. Pradžioje perduodama keletas F0 baitų sinchronizacijai. Būtent F0 pasirinkau todėl, kad tai yra dvejetainis 11110000. USART prideda start ir stop bitus. Gaunam (1)11110000(0). Kartodamas tokią seką keletą kartų, gaunu vienodą nulių ir vienetų skaičių signale. Tokią seką kartoju 5 kartus. Priimdamas tikrinu F0 baito gavimą, ir, jei gavau 3 tokius baitus iš eilės, skaitau, kad tai yra duomenų perdavimo pradžia. Toks baitas dar geras ir tuo, kad palengvina pradžios atpažinimą, nes manchester kodavime tokia bitų kombinacija negalima. Toks baitas reikš tik perdavimo pradžią ir nieko daugiau. Be to, sinchronizacija reikalinga tam, kad USART reikia bent poros perduotų baitų, kad atsistatytų nuo pastovaus triukšmo, kuris yra imtuvo išėjime.

Toliau eina duomenys. Manchester kodavimas labai paprastas. Jei reikia perduoti 0, perduodam 01, jei reikia perduoti 1, perduodam 10. Taip padvigubėja bitų skaičius, tačiau koks bebūtų baitas, jame pastoviai keičiasi 0 ir 1. Pvz. paimkim tą patį F0 baitą. 11110000 bus pakeista į 1010101001010101. Kitas pvz. Sakykim turim 11001011. Perkoduojam ir gaunam 1010010110011010. Kaip matosi, signale toks pat bitas niekada nesikartoja daugiau kaip du kartus iš eilės. USART šiek tik pažeidžia šią seką, tačiau nežymiai. Atsiranda 1 pradžioje ir 0 gale. Tai užtikrina pastovios dedamosios nebuvimą signale. Toliau jau reikalas paprastas, imtuve gauti baitai perkoduojami atvirkštine tvarka. Iš dviejų baitų gaunam vieną. Galima perduoti kontrolinę sumą, kad užtikrinti perduotų duomenų teisingumą. Tai nedidina perdavimo patikimumo, tačiau garantuoja, kad neteisingi duomenys nebus priimti.

Normaliai veikia maždaug 50 metrų atstumu. Toliau jau neveikia. Tačiau siųstuvas buvo maitinamas 5V. Jei būtų 12V, atstumas tikrai padidėtų. Perdavimo greitis 2400. Visai nekreipiau dėmesio į antenos kokybę, kaip matosi nuotraukoje, buvo panaudota paprasčiausias vielos gabalas.

wireless2.jpg

Tokie moduliai gali būti naudojami ten, kur nebūtinas visiškai garantuotas duomenų perdavimas. Pvz. koks nors temperatūros daviklis, kuris duomenis perdavinėja radijo ryšiu. Jų gali būti keletas, kiekvienas gali perdavinėti su savo kodu, sakykim kas 1 min. Jei kuris nors perdavimas bus pamestas, nieko blogo nenutiks, nes duomenų atnaujinimas nėra taip jau labai būtinas. Sutrukdyti gali bet kas, kad ir šalia paspaustas mašinos signalizacijos pultas. Tačiau nėra skirtumo, ar tie duomenys atsinaujins kiekvieną minutę, ar vienas kitas paketas bus pamestas. Taip pat galima naudoti kokios nors telemetrijos perdavimui iš modelio. Pvz. matuoti kokia naudojama srovė.

This entry was posted in Elektronika, Programavimas. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *