Ամեն ինչ սկսվեց նրանից, որ հեղինակը երկրորդական շուկայում ձեռք բերեց հետաքրքիր սարք՝ Smart Response XE (
Այս սարքերը դադարեցվել են մի քանի տարի առաջ, և այն, ինչ դպրոցները գնել են յուրաքանչյուրը 100-200 դոլարով, այժմ հայտնվում է eBay-ում 10 դոլարով կամ ավելի քիչ: Այնտեղ ապարատը շատ հարմար է գեյկի փորձերի համար.
- 60 ստեղնաշարի ստեղնաշար
- էկրան 384×136 լուծաչափով, 2 բիթ մեկ պիքսելում - նման է BC-ին, CGA-ին, բայց 4-ը ոչ թե գույներ, այլ պայծառության աստիճանավորում
- միկրոկոնտրոլեր ATmega128RFA1 (128 կԲ ֆլեշ հիշողություն, 4 կԲ ROM, 16 կԲ RAM, 802.15.4 հաղորդիչ)
- արտաքին (կապված միկրոկոնտրոլերի, ոչ թե ամբողջ սարքի հետ) 1 մեգաբիթ (128 կիլոբայթ) ֆլեշ հիշողություն SPI ինտերֆեյսով
- 4 AAA տարրերի խցիկ:
Միկրոկառավարիչի անունից պարզ է դառնում, որ այն պատկանում է AVR ընտանիքին, ինչը նշանակում է, որ սարքը Arduino-ի հետ համատեղելի դարձնելն ավելի քան տրիվիալ խնդիր է...
Նորություններից սկսած
Բայց հեղինակին ավելի շատ հետաքրքրում է սարքում ոչ թե խաղալու, այլ ուսումնասիրելու հնարավորությունը.
- ֆլեշ հիշողություն սերիական SPI ինտերֆեյսով
- bootloaders AVR-ի համար
- 802.15.4 ստանդարտ
Հեղինակը սկսեց գրելով
Սա բավական է Arduino բեռնախցիկը վերբեռնելու համար, բայց ոչ ուրվագիծը. սերիական պորտը միացված չէ այնտեղ, այնպես որ դուք դեռ չեք կարող անել առանց գործը բացելու: Նաև առաջին սերիական պորտի TX0 և RX0 տողերը համակցված են ստեղնաշարի մատրիցայի քվեարկության գծերի հետ, մասնավորապես՝ էկրանի կողքերում գտնվող ֆունկցիոնալ ստեղները: Բայց ինչ կարող ես անել. հեղինակը կառուցել է սա.
Նա JTAG գծերը բերեց այնտեղ, և այժմ մարտկոցի խցիկը բացելու կարիք չկա։ Եվ որպեսզի էսքիզները վերբեռնվեն, ես երկու սերիական պորտերը միացրել եմ նույն միակցիչին՝ ավելացնելով նաև անջատիչ, քանի որ տեղադրված մարտկոցների դեպքում ֆիզիկապես անհնար է այլ կերպ անջատել սարքը։
Զոդման երկաթի, օգտակար դանակով և սոսինձ ատրճանակով աշխատելու համար բավական ժամանակ պահանջվեց: Ընդհանրապես, էսքիզները «եթերում» վերբեռնելը շատ ավելի հարմար է, դրա համար շտապ պետք է ինչ-որ բան հորինել:
Arduino IDE-ն օգտագործում է ծրագիրը էսքիզներ վերբեռնելու համար
Այս խնդիրը հաղթահարելու տարբեր ուղիներ փորձելուց հետո հեղինակը հանգել է հետեւյալին. Սարքն ունի 128 ԿԲ ֆլեշ հիշողություն SPI ինտերֆեյսով. մենք տվյալներ ենք ստանում լարերի միջոցով (հիշեք, որ հեղինակն արդեն ունի մեկ սարք՝ կողքի միակցիչով), օգտագործում ենք այս հիշողությունը որպես բուֆեր և ուղարկում ենք տվյալները ռադիոյով։ ալիք դեպի այլ սարք: Բարև Cybiko-ից:
Ռադիոալիքի հետ աշխատելու կոդը, ինչպես նաև տառատեսակը գրելուց հետո բեռնիչը դարձավ 4 կիլոբայթից ավելի երկար։ Հետևաբար, HFUSE արժեքը պետք է փոխվեր 0xDA-ից մինչև 0xD8: Այժմ bootloader-ը կարող է ունենալ մինչև 8 կիլոբայթ երկարություն, իսկ մեկնարկային հասցեն այժմ 0x1E000 է: Սա արտացոլված է Makefile-ում, բայց պետք է նաև հաշվի առնել լրացնելիս
ATmega802.15.4RFA128-ի 1 հաղորդիչն ի սկզբանե նախագծված է աշխատելու արձանագրության միջոցով
Պարզվել է, որ 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 ստանդարտի մասին:
Բոլոր մյուս ծածկագրերը, բացի վերը նկարագրված գրադարանից, − է
Source: www.habr.com