Dena hasi zen egileak bigarren mailako merkatuan gailu interesgarri bat erosi zuela - Smart Response XE (
Gailu hauek duela urte batzuk utzi zituzten, eta eskolak $ 100- $ 200-ren truke erositakoa orain eBay-n agertzen da 10 $ edo gutxiagoren truke. Hango hardwarea oso egokia da geek esperimentuetarako:
- 60 teklatuko teklatua
- 384 Γ 136ko bereizmena duen pantaila, 2 bit pixel bakoitzeko - BC, CGA-ren antzekoa, baina 4 kolore ez, distira mailak baizik
- ATmega128RFA1 mikrokontroladorea (128 kB flash memoria, 4 kB ROM, 16 kB RAM, 802.15.4 transceptor)
- kanpoko (mikrokontroladoreari dagokionez, ez gailu osoari dagokionez) 1 megabit (128 kilobyte) flash memoria SPI interfazearekin
- 4 AAA elementuentzako konpartimendua.
Mikrokontrolagailuaren izenetik argi dago AVR familiakoa dela, hau da, gailua Arduinorekin bateragarria egitea zeregin hutsala baino gehiago da...
Berritik aurrera
Baina egileari gehiago interesatzen zaio gailuan ez jolasteko aukera, aztertzea baizik:
- flash memoria serie SPI interfazearekin
- AVRrako abiarazleak
- 802.15.4 estandarra
Egilea idazten hasi zen
Hau nahikoa da Arduino abiarazlea kargatzeko, baina ez zirriborroa - serieko ataka ez dago bertan konektatuta, beraz, oraindik ezin duzu kasua ireki gabe egin. Era berean, lehen serieko atakaren TX0 eta RX0 lerroak teklatuaren matrizeko galdeketa-lerroekin konbinatzen dira, hots, pantailaren alboetako funtzio-teklak galdetzen dituztenekin. Baina zer egin dezakezu - egileak hau eraiki zuen:
JTAG lineak ekarri zituen bertara, eta orain ez dago bateriaren konpartimendua ireki beharrik. Eta zirriborroak igo ahal izateko, serieko bi atakak konektore berean konektatu nituen, etengailu bat ere gehituz, bateriak instalatuta, fisikoki ezinezkoa baita gailua beste modu batean itzaltzea.
Denbora dezente behar izan zen soldadura batekin, labana erabilgarri batekin eta kola-pistolarekin lan egiteko. Oro har, zirriborroak "airean" igotzea askoz erosoagoa da; premiazkoa dugu horretarako zerbait asmatu.
Arduino IDEk programa erabiltzen du zirriborroak igotzeko
Arazo hau gainditzeko modu desberdinak probatu ondoren, egileak honako hau bururatu zuen. Gailuak 128 KB-ko flash-memoria du SPI interfazearekin - datuak hableen bidez jasotzen ditugu (gogoratu egileak dagoeneko gailu bat duela alboan konektorea duena), memoria hau buffer gisa erabili eta datuak irratitik bidaltzen ditugu. kanala beste gailu batera. Kaixo Cybikoren partetik.
Irrati-kanalarekin lan egiteko kodea idatzi ondoren, baita letra-tipoarekin ere, kargatzailea 4 kilobyte baino luzeagoa izan zen. Hori dela eta, HFUSE balioa 0xDAtik 0xD8ra aldatu behar izan zen. Orain abiarazleak 8 kilobyteko luzera izan dezake eta hasierako helbidea 0x1E000 da orain. Hau Makefile-n islatzen da, baina betetzerakoan ere kontuan hartu behar da
ATmega802.15.4RFA128-eko 1 transceptor-a protokoloa erabiliz funtzionatzeko diseinatuta dago.
15. eta 26. kanalak WiFi-ren interferentziarik gutxien jasan ditzaketela ikusi zen. Egileak horietako bigarrena aukeratu zuen. Oharra: itzultzaileak ez daki ZigBee modu honetan sinplifikatzea baimenduta dagoen ala ez. Agian programazio apur bat gehiago egin eta erabat inplementatu beharko genuke?
Lehenengo gailuan, STK500 protokoloaren bidez datuak transmititzen dituen egoera finituko makina inplementatzea beharrezkoa da. Gehienetan, igorritako eta jasotako mezuak autosufizienteak dira, baina batzuk lehenago kanaletik igarotakoei lotuta daude. Elkarrizketaren deskribapena ematen da
Elkarrizketa honen osagai garrantzitsu bat helmugako gailuaren flash memoriara idatzi nahi diren paketeen transmisioa da. AVR familiako mikrokontrolagailu soilentzat, orrialdearen tamaina 128 bytekoa da, baina ATmega128RFA1entzat 256koa da. Eta SPI protokoloaren bidez konektatzen den flash memoriarako, berdina da. Lehenengo gailuko programak, krokis bat kargatzean, ez du berehala bigarrenera transferitzen, baizik eta memoria honetan idazten du. Arduino IDEak sarreraren zuzentasuna egiaztatzen duenean, bertan idatzitakoa bidaltzen da. Orain jasotako datuak irrati-kanalaren bidez transmititu behar ditugu bigarren gailura. Aldi berean, sarritan gertatzen da jasotzetik transmititzera eta itzultzea. STK500 protokoloa atzerapenekiko axolagabea da, baina ez du datu-galera onartzen (arraroa, baina gorago esan zen atzerapenek datuen transferentzian ere eragina dutela). Eta hari gabeko transmisioan galerak saihestezinak dira. ATmega128RFA1-k behin eta berriz eskaeren hardware inplementazioa du transferentziaren zuzentasunari buruzko zalantzak daudenean, baina egileak bera softwarean ezartzea erabaki zuen. Protokolo bat garatu zuen, non modu batean bestean baino askoz datu gehiago isurtzen diren.
Ez da perfektua, baina funtzionatzen du. 256 byte-ko orria lau segmentutan banatuta dago, eta horietako bakoitza airez igortzen da pakete gisa. Pakete batek 125 byte datu gehi ditzake luzera byte bat eta CRC bi byte. Beraz, 64 byteko luzera duten zatiak orrialde eta segmentu zenbakiekin batera (0tik 3ra) jartzen dira bertan. Gailu hartzaileak zenbat segmentu jaso diren jarraitzeko aukera ematen duen aldagai bat du, eta laurak iristen direnean, bidaltzen duen gailuak orri osoa jaso duela berrespena jasotzen du. Berrespenik ez (CRC ez dator bat) - berriro bidali orri osoa. Abiadura kable bidez transmititzean baino are handiagoa da. Ikus:
Baina, oro har, beharrezkoa izango litzateke kablea krokisak igotzeko eta haren bidez konektatzeko gailuetara konektatzeko modu erosoa ematea. Adibidez, jarri horrelako interfaze-bihurgailu baten barruan CP2102-n, argazkian bezala, eta itsatsi plaka Micro USB kablea konektatzean eta deskonektatzean indarra jasan dezan.
3,3 voltioko egonkortzaile bat ere badu (eta nola erabili 6 voltioko elikadura-iturria duen gailu batean - egonkortzaile bera badu bakarrik, eta bi diodo gehi ditzakezu automatikoki hautatzeko zeinek gailua elikatuko duen) . Hiru LEDak interfaze bihurgailuaren plakatik dessoldatu behar dira, bestela bateriak ere kargatuko dituzte haiek funtzionatzerakoan, eta teklatuaren galdeketa oztopatzen dute eta SPI interfazearekin flash memoriarekin lan egingo dute.
Helburu bat erdiestea lortzea baino are interesgarriagoa izan da (eta ez da autobusari buruzko txantxa hori behar). Egileak asko ikasi zuen AVR abiarazleei, SPI flash memoriari, STK500 protokoloari eta 802.15.4 estandarrari buruz.
Goian deskribatutako liburutegiaz gain beste kode guztiak - dira
Iturria: www.habr.com