Þetta byrjaði allt með því að höfundur keypti áhugavert tæki á eftirmarkaði - Smart Response XE (
Þessum tækjum var hætt fyrir nokkrum árum og það sem skólar keyptu fyrir $100-$200 hver er nú að skjóta upp kollinum á eBay fyrir $10 eða minna. Vélbúnaðurinn þar er mjög hentugur fyrir nördatilraunir:
- 60 lykla lyklaborð
- skjár með upplausn 384×136, 2 bitar á pixla - svipað og BC, CGA, en 4 ekki litir, heldur birtustig
- örstýring ATmega128RFA1 (128 kB flassminni, 4 kB ROM, 16 kB vinnsluminni, 802.15.4 senditæki)
- ytra (í tengslum við örstýringuna, ekki allt tækið) 1 megabit (128 kílóbæti) flassminni með SPI tengi
- hólf fyrir 4 AAA þætti.
Af nafni örstýringarinnar er ljóst að hann tilheyrir AVR fjölskyldunni, sem þýðir að gera tækið Arduino-samhæft er meira en léttvægt verkefni...
Frá fréttum
En höfundur hefur meiri áhuga á tækifærinu til að spila ekki á tækinu heldur læra:
- flassminni með serial SPI tengi
- ræsihleðslutæki fyrir AVR
- staðall 802.15.4
Höfundur byrjaði á því að skrifa
Þetta er nóg til að hlaða upp Arduino ræsiforritinu, en ekki skissuna - raðtengi er ekki tengt þar, svo þú getur samt ekki gert án þess að opna hulstrið. Einnig eru TX0 og RX0 línur fyrsta raðtengisins sameinaðar skoðanalínur lyklaborðsfylkisins, þ.e. þær sem skoða aðgerðartakkana á hliðum skjásins. En hvað geturðu gert - höfundurinn byggði þetta:
Hann kom með JTAG línurnar þangað og nú er óþarfi að opna rafhlöðuhólfið. Og til þess að hægt væri að hlaða upp skissum tengdi ég bæði raðtengin við sama tengið og bætti líka við rofa því með rafhlöðurnar uppsettar er líkamlega ómögulegt að slökkva á tækinu á annan hátt.
Það tók töluverðan tíma að vinna með lóðajárn, nytjahníf og límbyssu. Almennt séð er miklu þægilegra að hlaða upp skissum „í loftinu“; við þurfum brýn að finna upp eitthvað fyrir þetta.
Arduino IDE notar forritið til að hlaða upp skissum
Eftir að hafa reynt mismunandi leiðir til að vinna bug á þessu vandamáli, komst höfundur að eftirfarandi. Tækið er með 128 KB flassminni með SPI viðmóti - við tökum á móti gögnum um vír (munið að höfundur er nú þegar með eitt tæki með tengi á hliðinni), notum þetta minni sem biðminni og sendum gögnin í gegnum útvarpið rás í annað tæki. Halló frá Cybiko.
Eftir að hafa skrifað kóðann til að vinna með útvarpsrásinni, sem og leturgerðina, varð hleðslutækið lengri en 4 kílóbæti. Þess vegna þurfti að breyta HFUSE gildinu úr 0xDA í 0xD8. Nú getur ræsiforritið verið allt að 8 kílóbæti að lengd og upphafsslóðin er nú 0x1E000. Þetta endurspeglast í Makefile, en ætti einnig að taka tillit til þess þegar fyllt er út
802.15.4 senditækið í ATmega128RFA1 er upphaflega hannað til að starfa með samskiptareglum
Í ljós kom að rásir 15 og 26 eru minnst viðkvæmar fyrir truflunum frá WiFi. Höfundur valdi aðra þeirra. Fyrirvari: þýðandinn veit ekki hvort leyfilegt sé að einfalda ZigBee með þessum hætti. Kannski ættum við að gera aðeins meiri forritun og innleiða hana alveg?
Á fyrsta tækinu er nauðsynlegt að útfæra endanlegt ástand vél sem sendir gögn í gegnum STK500 samskiptareglur. Að mestu leyti eru skilaboðin sem send eru og móttekin sjálfbær, en sum eru bundin þeim sem fóru um rásina fyrr. Lýsing á samræðunni er gefin
Mikilvægur þáttur í þessari umræðu er sending pakka sem ætlað er að skrifa í leifturminni áfangatækisins. Fyrir einfalda örstýringar af AVR fjölskyldunni er blaðsíðustærðin 128 bæti, en fyrir ATmega128RFA1 er hún 256. Og fyrir flassminnið sem er tengt í gegnum SPI samskiptareglur er það það sama. Forritið í fyrra tækinu, þegar skissu er hlaðið upp, flytur það ekki strax yfir í það síðara, heldur skrifar það í þetta minni. Þegar Arduino IDE athugar réttmæti færslunnar er sent það sem þar var skrifað. Nú þurfum við að senda móttekin gögn í gegnum útvarpsrás í annað tækið. Á sama tíma er skipt frá móttöku yfir í sendingu og til baka nokkuð oft. STK500 samskiptareglan er sama um tafir, en þolir ekki gagnatap (skrýtið, en það var sagt hér að ofan að tafir hafi líka áhrif á gagnaflutning). Og tap við þráðlausa sendingu er óhjákvæmilegt. ATmega128RFA1 er með innbyggða vélbúnaðarútfærslu á endurteknum beiðnum þegar efasemdir eru um réttmæti flutningsins, en höfundur ákvað að innleiða það sama í hugbúnaði sjálfur. Hann þróaði siðareglur þar sem mun meiri gögn flæða á einn veg en hina.
Það er ekki fullkomið, en það virkar. 256-bæta síðunni er skipt í fjóra hluta sem hver um sig er sendur í loftinu sem pakki. Pakki getur geymt allt að 125 bæti af gögnum auk eitt bæti fyrir lengd og tvö bæti fyrir CRC. Þannig að brot sem eru 64 bæti löng ásamt blaðsíðu- og hlutanúmerum (frá 0 til 3) eru sett þar. Móttökutækið er með breytu sem gerir því kleift að fylgjast með hversu margir hlutir hafa borist og þegar allir fjórir koma fær sendandi tækið staðfestingu á því að öll síðan hafi verið móttekin. Engin staðfesting (CRC passaði ekki) - sendu alla síðuna aftur. Hraðinn er jafnvel meiri en þegar sent er í gegnum kapal. Sjá:
En almennt væri nauðsynlegt að bjóða upp á þægilega leið til að tengja snúruna við tækin til að hlaða upp skissum og í gegnum hana. Til dæmis, settu inn í slíkan tengibreyti á CP2102, eins og á myndinni, og límdu hann á borðið þannig að hann þoli kraftinn þegar þú tengir og aftengir Micro USB snúruna.
Hann er líka með 3,3 volta sveiflujöfnun (og hvernig á að nota hann í tæki með 6 volta aflgjafa - ef hann er bara með sama sveiflujöfnun og þú getur bætt við tveimur díóðum til að velja sjálfkrafa hver þeirra mun knýja tækið) . Allar þrjár ljósdídurnar verða að vera ólóðaðar frá viðmótsbreytiborðinu, annars hlaða þær rafhlöðurnar til viðbótar þegar þær eru notaðar, og trufla einnig lyklaborðsmælingu og vinna með flassminni með SPI tengi.
Að sækjast eftir markmiði reyndist jafnvel áhugaverðara en að ná því (og þarf ekki grínið um strætó). Höfundur lærði mikið um AVR ræsibúnað, SPI flassminni, STK500 samskiptareglur og 802.15.4 staðalinn.
Allur annar kóði til viðbótar við bókasafnið sem lýst er hér að ofan er -
Heimild: www.habr.com