Hammasi muallifning ikkilamchi bozorda qiziqarli qurilmani sotib olishi bilan boshlandi - Smart Response XE (
Ushbu qurilmalar bir necha yil oldin ishlab chiqarish to'xtatilgan va har biri 100-200 dollarga sotib olingan maktablar eBay-da 10 dollar yoki undan kamroq narxda paydo bo'lmoqda. U erdagi apparat geeky tajribalar uchun juda mos keladi:
- 60 tugmali klaviatura
- 384 × 136 pikselli displey, har bir piksel uchun 2 bit - BC, CGA ga o'xshaydi, lekin 4 rang emas, balki yorqinlik gradatsiyasi
- mikrokontroller ATmega128RFA1 (128 kB flesh-xotira, 4 kB ROM, 16 kB RAM, 802.15.4 qabul qiluvchi)
- tashqi (butun qurilmaga emas, mikrokontrollerga nisbatan) SPI interfeysli 1 megabit (128 kilobayt) flesh xotira
- 4 ta AAA elementi uchun bo'linma.
Mikrokontroller nomidan uning AVR oilasiga tegishli ekanligi ayon bo'ladi, ya'ni qurilmani Arduino-moslashuvchan qilish oddiygina vazifa emas...
Yangiliklardan boshlab
Ammo muallifni qurilmada o'ynash emas, balki o'rganish imkoniyati ko'proq qiziqtiradi:
- ketma-ket SPI interfeysi bilan flesh xotira
- AVR uchun yuklagichlar
- standart 802.15.4
Muallif yozishdan boshladi
Bu Arduino yuklash moslamasini yuklash uchun etarli, lekin eskiz emas - ketma-ket port ulanmagan, shuning uchun siz hali ham ishni ochmasdan qilolmaysiz. Shuningdek, birinchi ketma-ket portning TX0 va RX0 satrlari klaviatura matritsasining so'rov satrlari, ya'ni displeyning yon tomonlaridagi funksiya tugmachalarini so'raydiganlar bilan birlashtirilgan. Lekin nima qila olasiz - muallif buni qurgan:
U JTAG liniyalarini u erga olib keldi va endi batareya bo'linmasini ochishning hojati yo'q. Eskizlar yuklanishi uchun men ikkala ketma-ket portni bir xil ulagichga uladim, shuningdek, kalitni qo'shdim, chunki o'rnatilgan batareyalar bilan qurilmani boshqa yo'l bilan o'chirish jismonan mumkin emas.
Lehimlash temir, yordamchi pichoq va yopishtiruvchi qurol bilan ishlashga ancha vaqt kerak bo'ldi. Umuman olganda, eskizlarni "havoda" yuklash ancha qulayroq, biz zudlik bilan buning uchun biror narsa ixtiro qilishimiz kerak.
Arduino IDE eskizlarni yuklash uchun dasturdan foydalanadi
Ushbu muammoni bartaraf etishning turli usullarini sinab ko'rgandan so'ng, muallif quyidagi xulosaga keldi. Qurilmada SPI interfeysli 128 KB flesh-xotira mavjud - biz ma'lumotlarni simlar orqali olamiz (esda tutingki, muallifning yon tomonida ulagichi bo'lgan bitta qurilma bor), bu xotiradan bufer sifatida foydalaning va ma'lumotlarni radio orqali yuboring boshqa qurilmaga kanal. Cybiko'dan salom.
Radiokanal bilan ishlash uchun kodni, shuningdek, shriftni yozgandan so'ng, yuklovchi 4 kilobaytdan uzunroq bo'ldi. Shuning uchun HFUSE qiymatini 0xDA dan 0xD8 ga o'zgartirish kerak edi. Endi bootloader uzunligi 8 kilobaytgacha bo'lishi mumkin va boshlang'ich manzil endi 0x1E000. Bu Makefile-da aks ettirilgan, ammo to'ldirishda ham e'tiborga olinishi kerak
ATmega802.15.4RFA128-dagi 1 qabul qiluvchi-uzatuvchisi dastlab protokol yordamida ishlash uchun mo'ljallangan.
Ma'lum bo'lishicha, 15 va 26-kanallar WiFi shovqinlariga eng kam sezgir.Muallif ulardan ikkinchisini tanlagan. Rad etish: tarjimon ZigBee-ni shu tarzda soddalashtirishga ruxsat borligini bilmaydi. Balki biz biroz ko'proq dasturlashtirib, uni to'liq amalga oshirishimiz kerakmi?
Birinchi qurilmada STK500 protokoli orqali ma'lumotlarni uzatuvchi cheklangan holat mashinasini amalga oshirish kerak. Ko'pincha, uzatiladigan va qabul qilingan xabarlar o'z-o'zidan etarli, ammo ba'zilari avvalroq kanal orqali o'tgan xabarlarga bog'langan. Dialogning tavsifi berilgan
Ushbu dialogning muhim komponenti - bu maqsad qurilmaning flesh-xotirasiga yozish uchun mo'ljallangan paketlarni uzatish. AVR oilasining oddiy mikrokontrollerlari uchun sahifa hajmi 128 bayt, lekin ATmega128RFA1 uchun bu 256. SPI protokoli orqali ulangan flesh-xotira uchun esa xuddi shunday. Birinchi qurilmadagi dastur eskizni yuklashda uni darhol ikkinchisiga o'tkazmaydi, balki uni ushbu xotiraga yozadi. Arduino IDE yozuvning to'g'riligini tekshirganda, u erda yozilgan narsa yuboriladi. Endi biz radiokanal orqali olingan ma'lumotlarni ikkinchi qurilmaga o'tkazishimiz kerak. Shu bilan birga, qabul qilishdan uzatishga va orqaga o'tish juda tez-tez sodir bo'ladi. STK500 protokoli kechikishlarga befarq, lekin ma'lumotlar yo'qolishiga toqat qilmaydi (g'alati, lekin yuqorida kechikishlar ma'lumotlar uzatilishiga ham ta'sir qilishi aytilgan edi). Va simsiz uzatish paytida yo'qotishlar muqarrar. ATmega128RFA1 o'tkazmaning to'g'riligiga shubha tug'ilganda takroriy so'rovlarning o'rnatilgan apparat ta'minotiga ega, ammo muallif buni dasturiy ta'minotda ham amalga oshirishga qaror qildi. U protokol ishlab chiqdi, unda ma'lumotlar bir tomonga boshqasiga qaraganda ancha ko'p.
Bu mukammal emas, lekin u ishlaydi. 256 baytlik sahifa to'rtta segmentga bo'lingan, ularning har biri havo orqali paket sifatida uzatiladi. Paket 125 baytgacha ma'lumotni, shuningdek uzunligi uchun bir baytni va CRC uchun ikki baytni saqlashi mumkin. Shunday qilib, u erda 64 bayt uzunlikdagi fragmentlar va sahifa va segment raqamlari (0 dan 3 gacha) joylashtiriladi. Qabul qiluvchi qurilmada qancha segment olinganligini kuzatish imkonini beruvchi o'zgaruvchi mavjud va to'rttasi kelganda jo'natuvchi qurilma butun sahifa olinganligi haqidagi tasdiqni oladi. Tasdiqlash yo'q (CRC mos kelmadi) - butun sahifani qayta yuboring. Tezlik kabel orqali uzatishdan ham kattaroqdir. Qarang:
Ammo umuman olganda, kabelni eskizlarni yuklash va u orqali qurilmalarga ulashning qulay usulini ta'minlash kerak bo'ladi. Misol uchun, fotosuratda bo'lgani kabi, CP2102-ga bunday interfeys konvertorini joylashtiring va Micro USB kabelini ulash va ajratishda kuchga bardosh bera oladigan tarzda uni taxtaga yopishtiring.
Shuningdek, u 3,3 voltli stabilizatorga ega (va uni 6 voltli quvvat manbai bo'lgan qurilmada qanday ishlatish kerak - agar u bir xil stabilizatorga ega bo'lsa va ulardan qaysi biri qurilmani quvvatlantirishini avtomatik ravishda tanlash uchun ikkita diod qo'shishingiz mumkin) . Barcha uchta LEDni interfeys konvertor taxtasidan lehimsiz bo'lishi kerak, aks holda ular ishlayotganda batareyalarni qo'shimcha ravishda yuklaydi, shuningdek, klaviatura so'roviga xalaqit beradi va SPI interfeysi bilan flesh-xotira bilan ishlaydi.
Maqsadga intilish unga erishishdan ko'ra qiziqroq bo'lib chiqdi (va avtobus haqida bu hazil kerak emas). Muallif AVR yuklash qurilmalari, SPI flesh-xotirasi, STK500 protokoli va 802.15.4 standarti haqida ko'p narsalarni bilib oldi.
Yuqorida tavsiflangan kutubxonaga qo'shimcha ravishda barcha boshqa kodlar -
Manba: www.habr.com