E gjitha filloi me blerjen e autorit të një pajisje interesante në tregun sekondar - Smart Response XE (
Këto pajisje u ndërprenë disa vite më parë, dhe ato që shkollat blenë për 100-200 dollarë secila tani po shfaqen në eBay për 10 dollarë ose më pak. Pajisja atje është shumë e përshtatshme për eksperimente geeky:
- Tastierë me 60 tastierë
- ekran me rezolucion 384×136, 2 bit për pixel - i ngjashëm me BC, CGA, por 4 jo ngjyra, por gradime të shkëlqimit
- mikrokontrolluesi ATmega128RFA1 (memorie flash 128 kB, ROM 4 kB, RAM 16 kB, marrës 802.15.4)
- memorie flash e jashtme (në lidhje me mikrokontrolluesin, jo të gjithë pajisjen) 1 megabit (128 kilobyte) me ndërfaqe SPI
- ndarje për 4 elementë AAA.
Nga emri i mikrokontrolluesit është e qartë se ai i përket familjes AVR, që do të thotë se bërja e pajisjes të përputhshme me Arduino është një detyrë më shumë se e parëndësishme...
Nga lajmet e tutje
Por autori është më i interesuar për mundësinë për të mos luajtur në pajisje, por për të studiuar:
- memorie flash me ndërfaqe SPI serike
- ngarkues për AVR
- standardi 802.15.4
Autori filloi duke shkruar
Kjo është e mjaftueshme për të ngarkuar ngarkuesin Arduino, por jo skicën - porta serike nuk është e lidhur atje, kështu që ju ende nuk mund të bëni pa hapur rastin. Gjithashtu, linjat TX0 dhe RX0 të portës së parë serike kombinohen me linjat e votimit të matricës së tastierës, përkatësisht ato që shkruajnë tastet e funksionit në anët e ekranit. Por çfarë mund të bëni - autori e ndërtoi këtë:
Ai solli linjat JTAG atje, dhe tani nuk ka nevojë të hapni ndarjen e baterisë. Dhe që të mund të ngarkoheshin skicat, i lidha të dyja portat serike në të njëjtin konektor, duke shtuar edhe një ndërprerës, sepse me bateritë e vendosura, është fizikisht e pamundur të fikësh pajisjen në ndonjë mënyrë tjetër.
U desh mjaft kohë për të punuar me një hekur saldimi, një thikë të dobishme dhe një armë ngjitëse. Në përgjithësi, ngarkimi i skicave "në ajër" është shumë më i përshtatshëm; ne duhet urgjentisht të shpikim diçka për këtë.
Arduino IDE përdor programin për të ngarkuar skica
Pasi provoi mënyra të ndryshme për të kapërcyer këtë problem, autori doli me sa vijon. Pajisja ka një memorie flash 128 KB me një ndërfaqe SPI - ne marrim të dhëna përmes telave (mos harroni se autori tashmë ka një pajisje me një lidhës në anën), e përdorim këtë memorie si një tampon dhe i dërgojmë të dhënat përmes radios kanali në një pajisje tjetër. Përshëndetje nga Cybiko.
Pasi shkroi kodin për të punuar me kanalin e radios, si dhe fontin, ngarkuesi u bë më i gjatë se 4 kilobajt. Prandaj, vlera HFUSE duhej të ndryshohej nga 0xDA në 0xD8. Tani ngarkuesi mund të jetë deri në 8 kilobajt dhe adresa fillestare është tani 0x1E000. Kjo pasqyrohet në Makefile, por gjithashtu duhet të merret parasysh gjatë plotësimit
Transmetuesi 802.15.4 në ATmega128RFA1 është krijuar fillimisht për të funksionuar duke përdorur protokollin
Doli se kanalet 15 dhe 26 janë më pak të ndjeshëm ndaj ndërhyrjeve nga WiFi. Autori zgjodhi të dytin prej tyre. Mohim përgjegjësie: përkthyesi nuk e di nëse lejohet të thjeshtojë ZigBee në këtë mënyrë. Ndoshta duhet të bëjmë pak më shumë programim dhe ta zbatojmë plotësisht?
Në pajisjen e parë, është e nevojshme të zbatohet një makinë me gjendje të fundme që transmeton të dhëna përmes protokollit STK500. Në pjesën më të madhe, mesazhet e transmetuara dhe të marra janë të vetë-mjaftueshme, por disa janë të lidhura me ato që kanë kaluar nëpër kanal më herët. Jepet përshkrimi i dialogut
Një komponent i rëndësishëm i këtij dialogu është transmetimi i paketave që synohen të shkruhen në memorien flash të pajisjes destinuese. Për mikrokontrolluesit e thjeshtë të familjes AVR, madhësia e faqes është 128 byte, por për ATmega128RFA1 është 256. Dhe për memorien flash që lidhet me protokollin SPI, është e njëjta gjë. Programi në pajisjen e parë, kur ngarkon një skicë, nuk e transferon menjëherë në të dytin, por e shkruan në këtë memorie. Kur Arduino IDE kontrollon korrektësinë e hyrjes, dërgohet ajo që është shkruar atje. Tani duhet të transmetojmë të dhënat e marra përmes kanalit të radios në pajisjen e dytë. Në të njëjtën kohë, kalimi nga marrja në transmetim dhe mbrapa ndodh mjaft shpesh. Protokolli STK500 është indiferent ndaj vonesave, por nuk toleron humbjen e të dhënave (e çuditshme, por u tha më lart se vonesat gjithashtu ndikojnë në transferimin e të dhënave). Dhe humbjet gjatë transmetimit me valë janë të pashmangshme. ATmega128RFA1 ka një implementim të integruar të harduerit të kërkesave të përsëritura kur ka dyshime për korrektësinë e transferimit, por autori vendosi të zbatojë të njëjtën gjë në softuer vetë. Ai zhvilloi një protokoll në të cilin shumë më tepër të dhëna rrjedhin në një mënyrë se në tjetrën.
Nuk është perfekte, por funksionon. Faqja 256-byte është e ndarë në katër segmente, secila prej të cilave transmetohet në ajër si një paketë. Një paketë mund të mbajë deri në 125 bajt të dhëna plus një bajt për gjatësi dhe dy bajt për CRC. Pra, fragmente 64 bajt të gjata së bashku me numrat e faqeve dhe segmenteve (nga 0 në 3) vendosen aty. Pajisja marrëse ka një variabël që e lejon atë të gjurmojë se sa segmente janë marrë dhe kur të mbërrijnë të katër, pajisja dërguese merr konfirmimin se e gjithë faqja është marrë. Asnjë konfirmim (CRC nuk përputhet) - ridërgo të gjithë faqen. Shpejtësia është edhe më e madhe se kur transmetohet me kabllo. Shiko:
Por në përgjithësi, do të ishte e nevojshme të sigurohet një mënyrë e përshtatshme për të lidhur kabllon me pajisjet për ngarkimin e skicave dhe përmes tij. Për shembull, vendoseni brenda një konverteri të tillë ndërfaqeje në CP2102, si në foto, dhe ngjiteni në tabelë në mënyrë që të përballojë forcën kur lidhni dhe shkëputni kabllon Micro USB.
Ai gjithashtu ka një stabilizues 3,3 volt (dhe si ta përdorni në një pajisje me një furnizim me energji 6 volt - vetëm nëse ka të njëjtin stabilizues dhe mund të shtoni dy dioda për të zgjedhur automatikisht se cila prej tyre do të fuqizojë pajisjen) . Të tre LED-et duhet të mos bashkohen nga bordi i konvertuesit të ndërfaqes, përndryshe ato do të ngarkojnë shtesë bateritë kur funksionojnë me to, dhe gjithashtu do të ndërhyjnë në sondazhin e tastierës dhe do të punojnë me memorien flash me një ndërfaqe SPI.
Ndjekja e një qëllimi doli të ishte edhe më interesante sesa arritja e tij (dhe nuk keni nevojë për atë shaka për autobusin). Autori mësoi shumë për ngarkuesit AVR, memorien flash SPI, protokollin STK500 dhe standardin 802.15.4.
I gjithë kodi tjetër përveç bibliotekës së përshkruar më sipër është -
Burimi: www.habr.com