Dit het alles begin met die skrywer wat 'n interessante toestel op die sekondêre mark gekoop het - Smart Response XE (
Hierdie toestelle is etlike jare gelede gestaak, en wat skole vir $100-$200 elk gekoop het, verskyn nou op eBay vir $10 of minder. Die hardeware daar is baie geskik vir geeky eksperimente:
- 60 sleutel sleutelbord
- vertoon met 'n resolusie van 384×136, 2 bisse per pixel - soortgelyk aan BC, CGA, maar 4 nie kleure nie, maar gradasies van helderheid
- mikrobeheerder ATmega128RFA1 (128 kB flitsgeheue, 4 kB ROM, 16 kB RAM, 802.15.4 transceiver)
- eksterne (in verhouding tot die mikrobeheerder, nie die hele toestel nie) 1 megabit (128 kilogreep) flitsgeheue met SPI-koppelvlak
- kompartement vir 4 AAA-elemente.
Uit die naam van die mikrobeheerder is dit duidelik dat dit aan die AVR-familie behoort, wat beteken om die toestel Arduino-versoenbaar te maak is 'n meer as onbenullige taak ...
Van die nuus af
Maar die skrywer is meer geïnteresseerd in die geleentheid om nie op die toestel te speel nie, maar om te studeer:
- flitsgeheue met seriële SPI-koppelvlak
- selflaailaaiers vir AVR
- standaard 802.15.4
Die skrywer het begin deur te skryf
Dit is genoeg om die Arduino selflaaiprogram op te laai, maar nie die skets nie - die reekspoort is nie daar gekoppel nie, so jy kan steeds nie klaarkom sonder om die kas oop te maak nie. Die TX0- en RX0-lyne van die eerste seriële poort word ook gekombineer met die stemlyne van die sleutelbordmatriks, naamlik dié wat die funksiesleutels aan die kante van die skerm ondersoek. Maar wat kan jy doen - die skrywer het dit gebou:
Hy het die JTAG-lyne soontoe gebring, en nou is dit nie nodig om die batterykompartement oop te maak nie. En sodat sketse opgelaai kon word, het ek albei seriële poorte aan dieselfde aansluiting gekoppel, en ook 'n skakelaar bygevoeg, want met die batterye geïnstalleer is dit fisies onmoontlik om die toestel op enige ander manier af te skakel.
Dit het nogal lank geneem om met 'n soldeerbout, 'n nutsmes en 'n gompistool te werk. Oor die algemeen is die oplaai van sketse "oor die lug" baie geriefliker; ons moet dringend iets hiervoor uitvind.
Arduino IDE gebruik die program om sketse op te laai
Nadat die skrywer verskillende maniere probeer het om hierdie probleem te oorkom, het die skrywer die volgende uitgekom. Die toestel het 'n 128 KB-flitsgeheue met 'n SPI-koppelvlak - ons ontvang data oor die drade (onthou dat die skrywer reeds een toestel met 'n aansluiting aan die kant het), gebruik hierdie geheue as 'n buffer, en stuur die data oor die radio kanaal na 'n ander toestel. Hallo van Cybiko.
Nadat die kode geskryf is om met die radiokanaal te werk, sowel as die lettertipe, het die laaier langer as 4 kilogrepe geword. Daarom moes die HFUSE-waarde van 0xDA na 0xD8 verander word. Nou kan die selflaaiprogram tot 8 kilogrepe lank wees, en die beginadres is nou 0x1E000. Dit word in die Makefile weerspieël, maar moet ook in ag geneem word wanneer dit gevul word
Die 802.15.4-senderontvanger in die ATmega128RFA1 is oorspronklik ontwerp om met die protokol te werk
Dit het geblyk dat kanale 15 en 26 die minste vatbaar is vir inmenging van WiFi.Die skrywer het die tweede daarvan gekies. Vrywaring: die vertaler weet nie of dit toegelaat word om ZigBee op hierdie manier te vereenvoudig nie. Miskien moet ons 'n bietjie meer programmering doen en dit heeltemal implementeer?
Op die eerste toestel is dit nodig om 'n eindige toestand masjien te implementeer wat data via die STK500 protokol oordra. Die boodskappe wat versend en ontvang is, is meestal selfversorgend, maar sommige is gekoppel aan dié wat vroeër deur die kanaal gegaan het. Beskrywing van die dialoog word gegee
'n Belangrike komponent van hierdie dialoog is die oordrag van pakkies wat bedoel is om na die flitsgeheue van die bestemmingstoestel geskryf te word. Vir eenvoudige mikrobeheerders van die AVR-familie is die bladsygrootte 128 grepe, maar vir die ATmega128RFA1 is dit 256. En vir die flitsgeheue wat via die SPI-protokol gekoppel is, is dit dieselfde. Die program in die eerste toestel, wanneer 'n skets oplaai, dra dit nie onmiddellik na die tweede oor nie, maar skryf dit na hierdie geheue. Wanneer die Arduino IDE die korrektheid van die inskrywing kontroleer, word dit gestuur wat daar geskryf is. Nou moet ons die ontvangde data via radiokanaal na die tweede toestel oordra. Terselfdertyd vind oorskakeling van ontvang na versend en terug baie gereeld plaas. Die STK500-protokol is onverskillig teenoor vertragings, maar duld nie dataverlies nie (vreemd, maar daar is hierbo gesê dat vertragings ook data-oordrag beïnvloed). En verliese tydens draadlose transmissie is onvermydelik. Die ATmega128RFA1 het 'n ingeboude hardeware-implementering van herhaalde versoeke wanneer daar twyfel is oor die korrektheid van die oordrag, maar die skrywer het besluit om dieselfde in sagteware self te implementeer. Hy het 'n protokol ontwikkel waarin baie meer data op die een manier vloei as die ander.
Dit is nie perfek nie, maar dit werk. Die bladsy van 256 grepe word in vier segmente verdeel, wat elk as 'n pakkie oor die lug versend word. 'n Pakkie kan tot 125 grepe data plus een grepe vir lengte en twee grepe vir CRC hou. Dus word fragmente van 64 grepe lank saam met bladsy- en segmentnommers (van 0 tot 3) daar geplaas. Die ontvangstoestel het 'n veranderlike wat dit toelaat om op te spoor hoeveel segmente ontvang is, en wanneer al vier arriveer, ontvang die stuurtoestel bevestiging dat die hele bladsy ontvang is. Geen bevestiging (CRC stem nie ooreen nie) - stuur die hele bladsy weer. Die spoed is selfs groter as wanneer dit via kabel uitgesaai word. Sien:
Maar in die algemeen sou dit nodig wees om 'n gerieflike manier te bied om die kabel aan die toestelle te koppel vir die oplaai van sketse en daardeur. Plaas byvoorbeeld binne so 'n koppelvlakomskakelaar op die CP2102, soos op die foto, en plak dit op die bord vas sodat dit die krag kan weerstaan wanneer die Mikro USB-kabel aan- en ontkoppel word.
Dit het ook 'n 3,3-volt-stabilisator (en hoe om dit te gebruik in 'n toestel met 'n 6-volt-kragbron - as dit net dieselfde stabiliseerder het, en jy kan twee diodes byvoeg om outomaties te kies watter van hulle die toestel sal aandryf) . Al drie LED's moet losgesoldeer word van die koppelvlakomskakelaarbord, anders sal hulle die batterye bykomend laai wanneer hulle daarop werk, en ook inmeng met sleutelbordpeiling en werk met flitsgeheue met 'n SPI-koppelvlak.
Om 'n doel na te streef, was selfs interessanter as om dit te bereik (en het nie daardie grap oor die bus nodig nie). Die skrywer het baie geleer oor AVR-selflaaiers, SPI-flitsgeheue, die STK500-protokol en die 802.15.4-standaard.
Alle ander kode bykomend tot die biblioteek hierbo beskryf is −
Bron: will.com