Iku kabeh diwiwiti kanthi penulis tuku piranti sing menarik ing pasar sekunder - Smart Response XE (
Piranti kasebut mandheg sawetara taun kepungkur, lan apa sing dituku sekolah kanthi rega $100-$200 saben saiki muncul ing eBay kanthi rega $10 utawa kurang. Piranti keras ing kana cocok banget kanggo eksperimen geeky:
- 60 tombol keyboard
- tampilan kanthi resolusi 384 Γ 136, 2 bit saben piksel - padha karo SM, CGA, nanging 4 ora werna, nanging gradations saka padhange
- mikrokontroler ATmega128RFA1 (memori lampu kilat 128 kB, ROM 4 kB, RAM 16 kB, transceiver 802.15.4)
- external (ing hubungan kanggo mikrokontroler, ora kabeh piranti) 1 megabit (128 kilobyte) memori lampu kilat karo antarmuka SPI
- kompartemen kanggo 4 unsur AAA.
Saka jeneng mikrokontroler kasebut jelas yen kalebu kulawarga AVR, tegese nggawe piranti sing kompatibel karo Arduino minangka tugas sing luwih sepele ...
Saka warta ing
Nanging penulis luwih kasengsem ing kesempatan ora kanggo muter ing piranti, nanging kanggo sinau:
- memori flash karo antarmuka SPI serial
- bootloaders kanggo AVR
- standar 802.15.4
Penulis miwiti kanthi nulis
Iki cukup kanggo ngunggah bootloader Arduino, nanging ora sketsa - port serial ora disambungake ing kana, supaya sampeyan ora bisa nindakake tanpa mbukak kasus kasebut. Uga, garis TX0 lan RX0 saka port serial pisanan digabungake karo garis polling matriks keyboard, yaiku sing polling tombol fungsi ing sisih layar. Nanging apa sing bisa ditindakake - penulis nggawe iki:
Dheweke nggawa garis JTAG ing kana, lan saiki ora perlu mbukak kompartemen baterei. Lan supaya sketsa bisa diunggah, aku nyambungake loro port serial menyang konektor sing padha, uga nambah switch, amarga kanthi baterei sing diinstal, ora bisa mateni piranti kanthi cara liya.
Butuh sawetara wektu kanggo nggarap wesi solder, piso sarana lan pistol lem. UmumΓ©, ngunggah sketsa "liwat udhara" luwih trep, kita kudu cepet-cepet nggawe apa-apa kanggo iki.
Arduino IDE nggunakake program kanggo ngunggah sketsa
Sawise nyoba macem-macem cara kanggo ngatasi masalah iki, penulis teka karo ing ngisor iki. Piranti kasebut nduweni memori flash 128 KB kanthi antarmuka SPI - kita nampa data liwat kabel (elinga yen penulis wis duwe piranti siji karo konektor ing sisih), nggunakake memori iki minangka buffer, lan ngirim data liwat radio. saluran menyang piranti liyane. Salam saka Cybiko.
Sawise nulis kode kanggo nggarap saluran radio, uga font, loader dadi luwih saka 4 kilobyte. Mulane, nilai HFUSE kudu diganti saka 0xDA dadi 0xD8. Saiki bootloader bisa nganti 8 kilobyte dawa, lan alamat wiwitan saiki 0x1E000. Iki dibayangke ing Makefile, nanging uga kudu digatekake nalika ngisi
Transceiver 802.15.4 ing ATmega128RFA1 asline dirancang kanggo operate nggunakake protokol
Ternyata saluran 15 lan 26 paling ora rentan kanggo gangguan saka WiFi. Penulis milih sing nomer loro. Penafian: penerjemah ora ngerti apa diijini nyederhanakake ZigBee kanthi cara iki. Mungkin kita kudu nindakake pemrograman sing luwih cilik lan ngetrapake kanthi lengkap?
Ing piranti pisanan, perlu kanggo ngleksanakake mesin negara winates sing ngirim data liwat protokol STK500. Umume, pesen sing dikirim lan ditampa cukup mandhiri, nanging sawetara ana gandhengane karo sing liwat saluran kasebut sadurunge. Katrangan saka dialog diwenehi
Komponen penting saka dialog iki yaiku transmisi paket sing arep ditulis ing memori lampu kilat piranti sing dituju. Kanggo mikrokontroler prasaja saka kulawarga AVR, ukuran kaca 128 bait, nanging kanggo ATmega128RFA1 256. Lan kanggo memori lampu kilat sing disambungake liwat protokol SPI, iku padha. Program ing piranti pisanan, nalika ngunggah sketsa, ora langsung nransfer menyang kaloro, nanging nulis ing memori iki. Nalika Arduino IDE mriksa bener entri, dikirim apa ditulis ana. Saiki kita kudu ngirim data sing ditampa liwat saluran radio menyang piranti liya. Ing wektu sing padha, ngalih saka nampa menyang ngirim lan bali cukup kerep. Protokol STK500 ora peduli karo telat, nanging ora ngidinke mundhut data (aneh, nanging kasebut ing ndhuwur yen telat uga mengaruhi transfer data). Lan kerugian sajrone transmisi nirkabel ora bisa dihindari. ATmega128RFA1 nduweni implementasi hardware sing dibangun ing panjalukan sing bola-bali nalika ana keraguan babagan transfer sing bener, nanging penulis mutusake kanggo ngetrapake piranti lunak kasebut. Dheweke ngembangake protokol sing luwih akeh data mili kanthi cara siji tinimbang liyane.
Iku ora sampurna, nanging bisa. Kaca 256-byte dipΓ©rang dadi patang segmen, sing saben-saben dikirim liwat udhara minangka paket. Paket bisa ngemot nganti 125 bita data plus siji bait kanggo dawa lan rong bita kanggo CRC. Dadi fragmen sing dawane 64 bita bebarengan karo nomer kaca lan segmen (saka 0 nganti 3) diselehake ing kana. Piranti panampa nduweni variabel sing ngidini kanggo nglacak jumlah segmen sing wis ditampa, lan nalika kabeh papat teka, piranti sing ngirim nampa konfirmasi yen kabeh kaca wis ditampa. Ora ana konfirmasi (CRC ora cocog) - kirim maneh kabeh kaca. Kacepetan malah luwih gedhe tinimbang nalika ngirim liwat kabel. Waca:
Nanging ing umum, iku perlu kanggo nyedhiyani cara trep kanggo nyambungake kabel menyang piranti kanggo ngunggah sketsa lan liwat iku. Contone, nyelehake ing CP2102 antarmuka konverter, kaya ing foto, lan lem menyang Papan supaya bisa tahan pasukan nalika nyambungake lan medhot kabel Micro USB.
Uga nduweni stabilisator 3,3 volt (lan cara nggunakake piranti kasebut kanthi sumber daya 6 volt - yen mung duwe stabilisator sing padha, lan sampeyan bisa nambah loro dioda kanggo milih kanthi otomatis sing bakal menehi daya piranti) . Kabeh telung LED kudu unsoldered saka Papan Konverter antarmuka, digunakake padha bakal tambahan mbukak baterei nalika operasi ing wong, lan uga ngganggu polling keyboard lan bisa karo memori lampu kilat karo antarmuka SPI.
Nguber gol dadi luwih menarik tinimbang nggayuh (lan ora perlu guyon babagan bis). Penulis sinau akeh babagan bootloader AVR, memori flash SPI, protokol STK500 lan standar 802.15.4.
Kabeh kode liyane saliyane perpustakaan kasebut ing ndhuwur yaiku β
Source: www.habr.com