
E gjitha filloi me blerjen nga autori nĂ« tregun e dytĂ« tĂ« njĂ« pajisjeje interesante â Smart Response XE (). Ajo Ă«shtĂ« e destinuar pĂ«r shkolla: çdo nxĂ«nĂ«s nĂ« klasĂ« merr njĂ« pajisje, tĂ« ngjashme me njĂ« shĂ«nues elektronik ose pĂ«rkthyes tĂ« viteve '90, mĂ«suesi bĂ«n njĂ« pyetje dhe nxĂ«nĂ«sit shkruajnĂ« pĂ«rgjigjet nĂ« tastierat e pajisjeve, tĂ« cilat dĂ«rgojnĂ« pĂ«rgjigjet pĂ«rmes njĂ« kanali radio (802.15.4) nĂ« njĂ« marrĂ«s tĂ« lidhur me PC-nĂ« e mĂ«suesit.
MbĂ«shtetjes pĂ«r kĂ«to pajisje u dha fund disa vite mĂ« parĂ«, dhe ajo qĂ« shkollat blenin me 100-200 dollarĂ« pĂ«r copĂ«, tani del nĂ« eBay pĂ«r 10 dollarĂ« e mĂ« pak. âHardueriâ atje Ă«shtĂ« shumĂ« i pĂ«rshtatshĂ«m pĂ«r eksperimente geek:
- tastiera me 60 çelësa
- ekrani me njĂ« rezolutĂ« prej 384Ă136, 2 bita pĂ«r pixel â ngjashĂ«m me BK, CGA, por 4 jo ngjyra, por grada ndriçimi
- mikrokontrolleri ATmega128RFA1 (128 kB memorie flash, 4 kB ROM, 16 kB RAM, marrësi-dërgues standard 802.15.4)
- memoria flash e jashtme (në lidhje me mikrokontrollerin, jo me tërë pajisjen) me 1 megabit (128 kilobajt) me ndërfaqe SPI
- kapsulë për 4 elemente AAA.
Nga emri i mikrokontrollerit kuptohet se ai i pĂ«rket familjes AVR, dhe kĂ«shtu, bĂ«rĂ« pajisjen tĂ« pĂ«rputhshme me Arduino â Ă«shtĂ« njĂ« detyrĂ« mĂ« shumĂ« se trivialeâŠ
Nga një lajm në autori mësoi se kjo (në këtë lidhje përshkruhet se ku të lidhet), duke marrë mundësinë për të luajtur lojëra për Arduboy:

Por autori është më shumë i interesuar për mundësinë jo për të luajtur në pajisje, por për të studiuar:
- memoria flash me ndërfaqe sekondare SPI
- bootloaders për AVR
- standarti 802.15.4
Autori filloi me shkruajtjen e (GPL v3), qĂ« lejon inicializimin e ekranit, shfaqjen e teksteve dhe drejtkĂ«ndĂ«shave, si dhe aksesin nĂ« memorien flash me ndĂ«rfaqe SPI. MĂ« pas, ai filloi tĂ« mendonte ide pĂ«r pĂ«rdorimin praktik tĂ« pajisjes: njĂ« terminal i ngjashĂ«m me VT-100 portativ, lojĂ«ra multi-pĂ«rdoruesish. Pas modifikimit tĂ« tre pajisjeve, ai vendosi tĂ« "mĂ«sojĂ«" ato tĂ« marrin skica "nĂ« ajĂ«r". ĂfarĂ« do tĂ« ishte jo vetĂ«m interesante, por edhe shumĂ« e pĂ«rshtatshme: hapja e çdo herĂ« e trupit tĂ« pajisjes Ă«shtĂ« e vĂ«shtirĂ«, dhe nĂ«n kapakun e hapĂ«sirĂ«s pĂ«r bateri ka vetĂ«m vrima qĂ« i lejojnĂ« tĂ« lidhin njĂ« programues JTAG me bordin.

Kjo Ă«shtĂ« e mjaftueshme pĂ«r tĂ« ngarkuar bootloader-in Arduino, por jo skicĂ«n â porta seriale nuk Ă«shtĂ« e nxjerrĂ« aty, pa hapur kabinetin nuk e ndalon dot. Gjithashtu, linjat TX0 dhe RX0 tĂ« portit serial tĂ« parĂ« pĂ«rputhen me linjat e pyetjes sĂ« tastierĂ«s, qĂ« nĂ«nkupton ato me tĂ« cilat bĂ«het pyetja e çelĂ«save funksionalĂ« nga anĂ«t e ekranit. Por çfarĂ« tĂ« bĂ«jmĂ« â autori ka krijuar kĂ«tĂ«:

Ai i ka nxjerrë linjat JTAG, dhe tani nuk është e nevojshme të hapet ndarja e baterisë. Dhe për të ngarkuar edhe skicat, ka nxjerrë në këtë konektor dhe të dy portet seriale, duke shtuar gjithashtu një ndërprerës, sepse me bateri të instaluara, pajisja fizikisht nuk mund të fiket ndryshe.
Duhej punuar mjaft për të përdorur një stilolaps, një thikë kancelarie dhe një armë ngjitëse. Në përgjithësi, ngarkimi "në ajër" i skicave është shumë më i përshtatshëm, urgjentisht duhet të shpikim diçka për këtë.
Arduino IDE pĂ«rdor programin pĂ«r ngarkimin e skicave . Ai komunikon me mikroprocesorin nĂ«pĂ«rmjet protokollit , qĂ« lejon transferimin e skedarĂ«ve nĂ« tĂ« dy drejtimet. Ai Ă«shtĂ« keq i pajtueshĂ«m me kanalet ku ndodhin vonesa tĂ« ndryshme, deformim dhe humbje tĂ« tĂ« dhĂ«nave. NĂ«se nĂ« kanalin serial ndodh diçka ose ka zhurma, mund tĂ« jesh duke u çmendur pĂ«r tĂ« kĂ«rkuar shkakun. NjĂ«herĂ«, autori u mundua pĂ«r gjysmĂ« dite derisa kuptoi se problemi ishte nĂ« njĂ« kabllo tĂ« keqe, si dhe njĂ« konvertues tĂ« ndĂ«rlikuar interface CP2102. Edhe mikroprocesori me konvertuesin e integruar tĂ« interface, pĂ«r shembull ATmega32u4, mund tĂ« bĂ«jĂ« kĂ«shtu ndonjĂ«herĂ«. Ădo pĂ«rdorues i Arduino ka vĂ«rejtur se gabimet gjatĂ« ngarkimit tĂ« skicave nuk janĂ« aq tĂ« rralla. NdonjĂ«herĂ« regjistrimi kalon normalisht, por gjatĂ« leximit verifikues zbulohet njĂ« gabim. Kjo nuk do tĂ« thotĂ« se gabimi ndodhi gjatĂ« regjistrimit â dĂ«shtimi ishte gjatĂ« leximit. Tani imagjinoni se gjatĂ« punĂ«s "nĂ« ajĂ«r" ndodhi e njĂ«jta gjĂ«, por shumĂ« mĂ« shpesh.
Pas provave tĂ« ndryshme pĂ«r tĂ« tejkaluar kĂ«tĂ« problem, autori shpiku diçka tĂ« tillĂ«. Pajisja ka njĂ« memorie flash prej 128 KB me interface SPI â pranojmĂ« tĂ« dhĂ«nat pĂ«rmes kabllove (kujtojmĂ« se njĂ« pajisje me konektor anash autori tashmĂ« e ka), pĂ«rdorim kĂ«tĂ« memorie si tampon dhe dĂ«rgojmĂ« tĂ« dhĂ«nat nĂ« njĂ« pajisje tjetĂ«r pĂ«rmes kanali radio. NjĂ« pĂ«rshĂ«ndetje nga Cybiko.
Pas skriptimi i kodit për të punuar me kanalin radio, si dhe fontin, bootloader-i u zgjat më shumë se 4 kilobajt. Prandaj, vlera e HFUSE duhej të ndryshohej nga 0xDA në 0xD8. Tani bootloader-i mund të jetë deri në 8 kilobajt, dhe adresa fillestare u bë 0x1E000. Kjo reflektohet në Makefile, por duhet marrë parasysh edhe gjatë ngarkimit. nëpërmjet avrdude.
Transceiver standardi 802.15.4 në ATmega128RFA1 fillimisht është menduar për të punuar me protokollin , i cili është mjaft kompleks, prandaj autori vendosi të transmetojë thjesht paketat. Kjo realizohet harduerikisht në ATmega128RFA1, kështu që do të nevojitet pak kod. Po ashtu për lehtësi, autori vendosi të përdorë një kanal të fiksuar, pa lejuar zgjedhjen e tij as në mënyrë manuale. Standardi 802.15.4 mbështet 16 kanale me numra nga 11 deri në 26. Ata janë mjaft të ngjeshur, disa gjithashtu mbulojnë kanale WiFi (kanalet ZigBee janë të shënuara me të kuqe, ndërsa ato WiFi me ngjyrë blu, jeshile dhe të verdhë).

Doli se kanalet 15 dhe 26 janë më pak të ndjeshme ndaj ndërhyrjeve nga WiFi. Autori zgjodhi të dytin. Disklemer: përkthyesi nuk di nëse është e lejuar të thjeshtohet kaq shumë ZigBee. Ndoshta duhet edhe pak programim për ta realizuar plotësisht?
Në pajisjen e parë, duhen realizuar automatikët përfundimtarë që transmetojnë të dhëna sipas protokollit STK500. Kryesisht, mesazhet e transmetuara dhe të pranuara janë të mjaftueshme për vete, por disa janë të lidhura me ato që kanë kaluar më parë në kanal. Përshkrimi i dialogut është i dhënë. .
Një komponent i rëndësishëm i këtij dialogu është transferimi i paketave të destinuara për shkrimin në memorien flash të pajisjes së destinacionit. Te mikrocontrolerët e thjeshtë të familjes AVR, madhësia e faqes është 128 byte, por te ATmega128RFA1 është 256. Po ashtu, te ajo memorie flash që lidhet përmes protokollit SPI, është e njëjtë. Programi në pajisjen e parë, kur ngarkon skicën, nuk e dërgon atë menjëherë në të dytën, por e shkruan atë në këtë memorie. Kur Arduino IDE verifikon saktësinë e shkrimit, i dërgohet ajo që është shkruar atje. Tani duhet të transferohet e dhëna e marrë përmes kanaleve radio në pajisjen e dytë. Këtu ndodh një ndërrim mjaft i shpeshtë midis marrjes dhe dërgimit. Protokolli STK500 është i papërfillshëm ndaj vonesave, por nuk toleron humbjen e të dhënave (e çuditshme, pasi më lart është thënë se vonesat në transferimin e të dhënave ndikon gjithashtu). Dhe humbjet në transferimin wireless janë të pashmangshme. Te ATmega128RFA1 ekziston një implementim harduerik i ripërsëritjeve në rast dyshimi për saktësinë e transferimit, por autori vendosi ta implementojë të njëjtën gjë programatikisht vetë. Ai zhvilloi një protokoll, sipas të cilit kalon shumë më të dhëna në një drejtim sesa në anën tjetër.
Ai nuk Ă«shtĂ« i pĂ«rsosur, por gjithçka funksionon. NjĂ« faqe 256-byte ndahet nĂ« katĂ«r segmente, secili prej tĂ« cilĂ«ve dĂ«rgohet pĂ«rmes kanaleve radio si njĂ« paketĂ«. Paketa mund tĂ« pĂ«rmbajĂ« deri nĂ« 125 byte tĂ« dhĂ«nash plus njĂ« byteâgjatĂ«sia dhe dyâCRC. Pra, fragmentet me gjatĂ«si 64 byte vendosen aty me numrat e faqeve dhe segmenteve (nga 0 deri nĂ« 3). NĂ« pajisjen qĂ« merr, Ă«shtĂ« parashikuar njĂ« variabĂ«l qĂ« lejon tĂ« gjurmohet se sa segmente janĂ« pranuar, dhe kur arrijnĂ« tĂ« katĂ«rta, i dĂ«rgohet pajisjes transmetuese njĂ« konfirmim se Ă«shtĂ« pranuar e gjithĂ« faqja. NĂ«se nuk ka konfirmim (CRC nuk pĂ«rputhet)âdĂ«rgojmĂ« tĂ« gjithĂ« faqen pĂ«rsĂ«ri. ShpejtĂ«sia e kĂ«saj Ă«shtĂ« madje mĂ« e lartĂ« se ajo e transferimit pĂ«rmes kabllit. Shihni:

Por në të vërtetë, duhet të parashikohet një mënyrë e përshtatshme për të lidhur kabullin me pajisjet për ngarkimin e skicave dhe përmes saj. Për shembull, të vendosni brenda një konvertuesi interfaces si CP2102, si në foto, dhe ta ngjitni atë në bord në mënyrë që të përballojë forcën gjatë lidhjes dhe shkëputjes së kabullit Micro USB.

NĂ« tĂ« ka gjithashtu njĂ« stabilizues 3.3-voltes (dhe si ta pĂ«rdorim nĂ« njĂ« pajisje me furnizim 6-voltes â nĂ«se ka njĂ« stabilizues tĂ« tillĂ«, dhe mund tĂ« shtojmĂ« dy dioda pĂ«r tĂ« zgjedhur automatikisht nga cila prej tyre do tĂ« furnizohet pajisja). Duhet tĂ« hiqen tĂ« tre LED-Ă«t nga bordi i konvertuesit tĂ« ndĂ«rfaqes, pĂ«rndryshe ata do tĂ« ngarkojnĂ« shtesĂ« bateritĂ« kur punojnĂ« nga ato, dhe gjithashtu do tĂ« pengojnĂ« anketimin e tastierĂ«s dhe funksionimin e memories flash me ndĂ«rfaqen SPI.
Ndjekja e qëllimit ishte madje më interesante se arritja e tij (dhe nuk nevojitet ajo anekdota për autobusin). Autori zbuloi shumë gjëra të reja për ngarkuesit për AVR, memories flash me ndërfaqen SPI, protokollin STK500 dhe standardin 802.15.4.
Kodi tjetĂ«r i mbetur pĂ«rveç bibliotekĂ«s sĂ« pĂ«rshkruar mĂ« sipĂ«r â , dhe ai Ă«shtĂ« gjithashtu nĂ«n GPL v3. Twitter-i i autorit â .
Burimi: habr.com
