Ĉio komenciĝis kun la aŭtoro aĉetanta interesan aparaton sur la malĉefa merkato - Smart Response XE (
Ĉi tiuj aparatoj estis ĉesigitaj antaŭ pluraj jaroj, kaj kiaj lernejoj aĉetis po $100-$200 ĉiu nun aperas sur eBay por $10 aŭ malpli. La aparataro tie estas tre taŭga por geekaj eksperimentoj:
- 60 klava klavaro
- ekrano kun rezolucio de 384×136, 2 bitoj per pikselo - simila al BC, CGA, sed 4 ne koloroj, sed gradoj de brilo
- mikroregilo ATmega128RFA1 (128 kB fulmmemoro, 4 kB ROM, 16 kB RAM, 802.15.4 radioricevilo)
- ekstera (rilate al la mikroregilo, ne la tuta aparato) 1 megabit (128 kilobajto) fulmmemoro kun SPI-interfaco
- kupeo por 4 AAA-elementoj.
El la nomo de la mikroregilo estas klare, ke ĝi apartenas al la familio AVR, kio signifas, ke fari la aparaton kongrua kun Arduino estas pli ol bagatela tasko...
De la novaĵoj plu
Sed la aŭtoro pli interesiĝas pri la ŝanco ne ludi sur la aparato, sed studi:
- fulmmemoro kun seria SPI-interfaco
- ekŝargiloj por AVR
- normo 802.15.4
La aŭtoro komencis skribante
Ĉi tio sufiĉas por alŝuti la Arduino-ŝargilon, sed ne la skizon - la seria haveno ne estas konektita tie, do vi ankoraŭ ne povas fari sen malfermi la kazon. Ankaŭ, la TX0 kaj RX0-linioj de la unua seria haveno estas kombinitaj kun la balotlinioj de la klavara matrico, nome tiuj kiuj sondas la funkcioklavojn sur la flankoj de la ekrano. Sed kion vi povas fari - la aŭtoro konstruis ĉi tion:
Li alportis la JTAG-liniojn tien, kaj nun ne necesas malfermi la kuirilaron. Kaj por ke skizoj estu alŝutitaj, mi konektis ambaŭ seriajn havenojn al la sama konektilo, aldonante ankaŭ ŝaltilon, ĉar kun la kuirilaroj instalitaj, estas fizike neeble malŝalti la aparaton alimaniere.
Necesis sufiĉe da tempo por labori kun lutfero, utila tranĉilo kaj glupafilo. Ĝenerale, alŝuti skizojn "super la aero" estas multe pli oportuna; ni urĝe bezonas elpensi ion por tio.
Arduino IDE uzas la programon por alŝuti skizojn
Post provi malsamajn manierojn venki ĉi tiun problemon, la aŭtoro elpensis la jenon. La aparato havas 128 KB-memoron kun SPI-interfaco - ni ricevas datumojn per la dratoj (memoru, ke la aŭtoro jam havas unu aparaton kun konektilo flanke), uzu ĉi tiun memoron kiel bufron kaj sendu la datumojn per la radio. kanalo al alia aparato. Saluton de Cybiko.
Post skribado de la kodo por labori kun la radiokanalo, same kiel la tiparo, la ŝargilo fariĝis pli longa ol 4 kilobajtoj. Tial, la HFUSE-valoro devis esti ŝanĝita de 0xDA al 0xD8. Nun la ekŝargilo povas esti ĝis 8 kilobajtoj longa, kaj la komenca adreso nun estas 0x1E000. Ĉi tio estas reflektita en la Makefile, sed ankaŭ devus esti konsiderata dum plenigado
La 802.15.4 radioricevilo en la ATmega128RFA1 estas origine dizajnita por funkcii uzante la protokolon
Montriĝis, ke kanaloj 15 kaj 26 estas malplej susceptibles al interfero de WiFi.La aŭtoro elektis la duan el ili. Malgarantio: la tradukisto ne scias ĉu estas permesite simpligi ZigBee tiel. Eble ni devus fari iom pli da programado kaj efektivigi ĝin tute?
Sur la unua aparato, necesas efektivigi finhavan ŝtatmaŝinon, kiu transdonas datumojn per la protokolo STK500. Plejparte, la mesaĝoj elsenditaj kaj ricevitaj estas memsufiĉaj, sed kelkaj estas ligitaj al tiuj, kiuj trapasis la kanalon pli frue. Priskribo de la dialogo estas donita
Grava komponento de ĉi tiu dialogo estas la dissendo de pakaĵetoj intencitaj por esti skribitaj al la fulmmemoro de la cela aparato. Por simplaj mikroregiloj de la familio AVR, la paĝa grandeco estas 128 bajtoj, sed por la ATmega128RFA1 ĝi estas 256. Kaj por la fulmmemoro, kiu estas konektita per la SPI-protokolo, estas la sama. La programo en la unua aparato, kiam oni alŝutas skizon, ne tuj transdonas ĝin al la dua, sed skribas ĝin al ĉi tiu memoro. Kiam la Arduino IDE kontrolas la ĝustecon de la eniro, ĝi estas sendita tion, kio estis skribita tie. Nun ni devas transdoni la ricevitajn datumojn per radiokanalo al la dua aparato. Samtempe, ŝanĝi de ricevado al elsendo kaj reen okazas sufiĉe ofte. La protokolo STK500 estas indiferenta pri prokrastoj, sed ne toleras perdon de datumoj (strange, sed oni diris supre, ke prokrastoj ankaŭ influas transdonon de datumoj). Kaj perdoj dum sendrata dissendo estas neeviteblaj. La ATmega128RFA1 havas enkonstruitan aparataron efektivigon de ripetaj petoj kiam estas duboj pri la ĝusteco de la translokigo, sed la aŭtoro decidis efektivigi la samon en programaro mem. Li evoluigis protokolon en kiu multe pli da datumoj fluas unudirekte ol la alian.
Ĝi ne estas perfekta, sed ĝi funkcias. La 256-bajta paĝo estas dividita en kvar segmentojn, ĉiu el kiuj estas elsendita super la aero kiel pako. Pakaĵeto povas teni ĝis 125 bajtojn da datenoj plus unu bajton por longo kaj du bajtojn por CRC. Do fragmentoj 64 bajtojn longaj kune kun paĝaj kaj segmentaj nombroj (de 0 ĝis 3) estas metitaj tie. La ricevanta aparato havas variablon, kiu permesas al ĝi spuri kiom da segmentoj estis ricevitaj, kaj kiam ĉiuj kvar alvenas, la senda aparato ricevas konfirmon, ke la tuta paĝo estis ricevita. Neniu konfirmo (CRC ne kongruis) - resendu la tutan paĝon. La rapido estas eĉ pli granda ol kiam oni transdonas per kablo. Vidu:
Sed ĝenerale, necesus provizi oportunan manieron konekti la kablon al la aparatoj por alŝuti skizojn kaj per ĝi. Ekzemple, metu ene de tia interfaca konvertilo sur la CP2102, kiel en la foto, kaj gluu ĝin al la tabulo por ke ĝi povu elteni la forton kiam li konektas kaj malkonektas la Mikro-USB-kablon.
Ĝi ankaŭ havas 3,3-voltan stabiligilon (kaj kiel uzi ĝin en aparato kun 6-volta nutrado - se ĝi nur havas la saman stabiligilon, kaj vi povas aldoni du diodojn por aŭtomate elekti kiu el ili ŝaltos la aparaton) . Ĉiuj tri LED-oj devas esti malluditaj de la interfaca konvertilo-tabulo, alie ili aldone ŝarĝos la bateriojn kiam ili funkcias, kaj ankaŭ malhelpos klavaran balotadon kaj funkcios kun fulmmemoro kun SPI-interfaco.
Persekuti celon montriĝis eĉ pli interesa ol atingi ĝin (kaj ne bezonas tiun ŝercon pri la buso). La aŭtoro lernis multon pri AVR-ŝargiloj, SPI-flash-memoro, la protokolo STK500 kaj la normo 802.15.4.
Ĉiu alia kodo krom la biblioteko supre priskribita estas −
fonto: www.habr.com