Се започна со купување на интересен уред на секундарниот пазар на авторот - Smart Response XE (
Овие уреди беа прекинати пред неколку години, а она што училиштата го купија за 100-200 долари секој сега се појавува на eBay за 10 долари или помалку. Хардверот таму е многу погоден за џики експерименти:
- Тастатура со 60 копчиња
- дисплеј со резолуција од 384×136, 2 бита по пиксел - слично на BC, CGA, но 4 не бои, туку градации на осветленост
- микроконтролер ATmega128RFA1 (128 kB флеш меморија, 4 kB ROM, 16 kB RAM, 802.15.4 трансивер)
- надворешна (во однос на микроконтролерот, не целиот уред) 1 мегабитна (128 килобајти) флеш меморија со SPI интерфејс
- преграда за 4 ААА елементи.
Од името на микроконтролерот е јасно дека припаѓа на семејството AVR, што значи дека уредот да биде компатибилен со Arduino е повеќе од тривијална задача...
Од вестите натаму
Но, авторот е повеќе заинтересиран за можноста да не игра на уредот, туку да учи:
- флеш меморија со сериски SPI интерфејс
- подигнувачи за AVR
- стандард 802.15.4
Авторот започна со пишување
Ова е доволно за да го поставите подигнувачот на Arduino, но не и скицата - сериската порта не е поврзана таму, така што сè уште не можете да направите без да го отворите куќиштето. Исто така, линиите TX0 и RX0 од првата сериска порта се комбинираат со линиите за избирање на матрицата на тастатурата, имено оние што ги избираат функционалните копчиња на страните на екранот. Но, што можете да направите - авторот го изгради ова:
Таму ги донесе JTAG линиите и сега нема потреба да се отвора батерискиот простор. И за да може да се ставаат скици, ги поврзав двата сериски порти на истиот конектор, додавајќи и прекинувач, бидејќи со поставените батерии физички е невозможно да се исклучи уредот на друг начин.
Беше потребно доста време да се работи со рачка за лемење, помошен нож и пиштол за лепило. Во принцип, поставувањето скици „преку воздухот“ е многу поудобно, итно треба да измислиме нешто за ова.
Arduino IDE ја користи програмата за поставување скици
Откако се обидел на различни начини да го надмине овој проблем, авторот дошол до следново. Уредот има флеш меморија од 128 KB со интерфејс SPI - добиваме податоци преку жиците (запомнете дека авторот веќе има еден уред со конектор на страна), ја користиме оваа меморија како бафер и ги испраќаме податоците преку радио канал на друг уред. Здраво од Cybiko.
По пишувањето на кодот за работа со радио каналот, како и фонтот, натоварувачот стана подолг од 4 килобајти. Затоа, вредноста на HFUSE мораше да се смени од 0xDA на 0xD8. Сега подигнувачот може да биде долг до 8 килобајти, а почетната адреса сега е 0x1E000. Ова се рефлектира во Makefile, но треба да се земе предвид и при пополнување
Трансиверот 802.15.4 во ATmega128RFA1 е првично дизајниран да работи со помош на протоколот
Се испостави дека каналите 15 и 26 се најмалку подложни на пречки од WiFi. Одрекување: преведувачот не знае дали е дозволено да го поедностави ZigBee на овој начин. Можеби треба да направиме малку повеќе програмирање и да го имплементираме целосно?
На првиот уред, неопходно е да се имплементира машина за конечни состојби што пренесува податоци преку протоколот STK500. Во најголем дел, пораките што се пренесуваат и примаат се самодоволни, но некои се врзани за оние што поминале низ каналот порано. Даден е опис на дијалогот
Важна компонента на овој дијалог е преносот на пакети наменети да се запишат во флеш меморијата на одредишниот уред. За едноставни микроконтролери од фамилијата AVR, големината на страницата е 128 бајти, но за ATmega128RFA1 е 256. А за флеш меморијата што е поврзана преку протоколот SPI е исто. Програмата во првиот уред, кога поставува скица, не ја префрла веднаш на вториот, туку ја запишува во оваа меморија. Кога Arduino IDE ја проверува точноста на записот, се испраќа она што е напишано таму. Сега треба да ги пренесеме примените податоци преку радио канал на вториот уред. Во исто време, префрлањето од примање на пренос и назад се случува доста често. Протоколот STK500 е рамнодушен кон одложувањата, но не толерира загуба на податоци (чудно, но погоре беше кажано дека одложувањата исто така влијаат на преносот на податоци). И загубите за време на безжичниот пренос се неизбежни. ATmega128RFA1 има вградена хардверска имплементација на повторени барања кога има сомнежи за исправноста на преносот, но авторот одлучил истото да го имплементира самиот во софтверот. Тој разви протокол во кој многу повеќе податоци течат на еден начин отколку на друг.
Не е совршено, но функционира. Страницата од 256 бајти е поделена на четири сегменти, од кои секој се пренесува преку воздухот како пакет. Еден пакет може да содржи до 125 бајти податоци плус еден бајт за должина и два бајта за CRC. Така, фрагменти долги 64 бајти заедно со броеви на страници и сегменти (од 0 до 3) се поставени таму. Уредот што прима има променлива што му овозможува да следи колку сегменти се примени, а кога ќе пристигнат сите четири, уредот што испраќа добива потврда дека целата страница е примена. Нема потврда (CRC не се совпадна) - повторно испратете ја целата страница. Брзината е уште поголема отколку кога се пренесува преку кабел. Видете:
Но, генерално, би било неопходно да се обезбеди пригоден начин за поврзување на кабелот со уредите за поставување скици и преку него. На пример, ставете внатре таков конвертор за интерфејс на CP2102, како на фотографијата, и залепете го на плочата за да може да ја издржи силата при поврзување и исклучување на Micro USB кабелот.
Има и стабилизатор од 3,3 волти (и како да го користите во уред со напојување од 6 волти - само ако го има истиот стабилизатор и можете да додадете две диоди за автоматски да изберете која од нив ќе го напојува уредот) . Сите три LED диоди мора да се одлемеат од плочата на конверторот на интерфејсот, во спротивно тие дополнително ќе ги вчитаат батериите кога работат со нив, а исто така ќе пречат во гласањето на тастатурата и ќе работат со флеш меморија со интерфејсот SPI.
Следењето на целта се покажа уште поинтересно од постигнувањето (и не ви треба таа шега за автобусот). Авторот научи многу за AVR подигнувачите, SPI флеш меморијата, протоколот STK500 и стандардот 802.15.4.
Сите други кодови покрај библиотеката опишана погоре е -
Извор: www.habr.com