Mundarija:

ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq
ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq

Video: ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq

Video: ATtiny13 va WS2812: 7 qadamli 1 dollarlik LED kayfiyatli chiroq
Video: How to add library to Arduino IDE | Error : No such file or directory 2024, Noyabr
Anonim
ATtiny13 va WS2812 bilan 1 dollarlik LED kayfiyatli chiroq
ATtiny13 va WS2812 bilan 1 dollarlik LED kayfiyatli chiroq

Muallif tomonidan batafsil:

Shaxsiy CalDAV serveri bitta taxtali kompyuterda
Shaxsiy CalDAV serveri bitta taxtali kompyuterda
Shaxsiy CalDAV serveri bitta taxtali kompyuterda
Shaxsiy CalDAV serveri bitta taxtali kompyuterda
LCD bosqinchilar: 16x2 o'lchamli LCD displeyidagi o'yin kabi kosmik bosqinchilar
LCD bosqinchilar: 16x2 o'lchamli LCD displeyidagi o'yin kabi kosmik bosqinchilar
LCD bosqinchilar: 16x2 o'lchamli LCD displeyidagi o'yin kabi kosmik bosqinchilar
LCD bosqinchilar: 16x2 o'lchamli LCD displeyidagi o'yin kabi kosmik bosqinchilar
Oktarin: WS2812 RGB LEDli ranglarni moslashtirish o'yini
Oktarin: WS2812 RGB LEDli ranglarni moslashtirish o'yini
Oktarin: WS2812 RGB LEDli ranglarni moslashtirish o'yini
Oktarin: WS2812 RGB LEDli ranglarni moslashtirish o'yini

Bu to'rtta rejimga ega bo'lgan arzon kayfiyat chiroqidir.

1. Kamalak uchquni. Yorug'lik uchquni vaqti -vaqti bilan yuqoriga qarab harakat qiladi va asta -sekin rangini o'zgartiradi.

2. Kamalakning porlashi. Rangni asta -sekin o'zgartiradigan barqaror nur.

3. Sham olovining simulyatsiyasi.

4. O'chirilgan.

Yuqoridagi sensorli tugmani bosib rejimlarni o'zgartirishingiz mumkin. Joriy rejim o'chirilgandan so'ng EEPROM xotirasida saqlanadi.

ATtiny13 qanchalik kichkina?

Maqsad - bu minimal uskunadan maksimal funktsiyalarni olish, avtomatlashtirilgan kalit yoki termometrdan ko'ra murakkabroq narsa, bu kichik mikrokontrollerning chetiga yaqin loyiha. Axir, cheklovlar sizni ijodiy o'ylashga majbur qiladi, to'g'rimi? Xo'sh, boshida shunday ko'rinardi.

Ushbu loyihadagi eng qiyin narsa ATtiny13 -ga barcha kodlarni kiritish edi. Mikrokontroller 1K baytli fleshka va faqat 64 baytli RAMga ega. Ha, men "bayt" deganda, sakkiz bitdan iborat bo'lganlarni nazarda tutyapman. Barcha mahalliy o'zgaruvchilar va qo'ng'iroqlar to'plami uchun 64 bayt. Aniq bo'lish uchun, biz 8 ta RGB LEDni boshqarishimiz kerakligini o'ylab ko'ring. Ularning har biri 3 bayt bilan belgilanadi (mos ravishda qizil, yashil va ko'k kanallar uchun). Shunday qilib, faqat 8 ta LED holatini saqlash uchun biz har biri 3 bayt bo'lgan 8 ta tuzilmadan iborat massivni amalga oshirishimiz kerak va bu qatorning boshiga ko'rsatgich yana bir baytni oladi. Shunday qilib, 64 baytdan 25 tasi tashqarida. Biz RAMning 39 foizini ishlatganmiz va hozircha ishga tushmaganmiz. Bundan tashqari, kamalakning ettita asosiy rangini saqlash uchun sizga 7 × 3 = 21 bayt kerak bo'ladi, shuning uchun RAMning 72 foizi tugagan. Asosiy ranglarga kelsak, men bo'rttirib aytaman: ularning barchasiga bir vaqtning o'zida RAMda kerak emas va ular hech qachon o'zgarmaydi, shuning uchun ularni RAM o'rniga fleshda saqlash uchun doimiy massiv sifatida qo'llash mumkin. Qanday bo'lmasin, u ishlatilgan uskunalar haqida umumiy taassurot qoldiradi.

Knutning muddatidan oldin optimallashtirish haqidagi bayonotini eslab, nima bo'lishini ko'rish uchun uchta chiroq rejimini alohida prototiplashdan boshladim. Men ularning to'g'ri ishlashini va har biri mening mikrokontrollerimga mos kelishini tekshirish uchun ularni alohida sinovdan o'tkazdim. Buni amalga oshirish uchun bir necha oqshom kerak bo'ldi va men hamma narsani yaxshi o'tdim … men ularni kalit so'zlari ichida birlashtirishga harakat qilgunimcha. avr-size yordam dasturi 1,5 Kb hajmdagi matn bo'limi haqida xabar berdi (avr-gcc bayrog'i bilan). O'sha paytda mening asl niyatim 2Kb fleshli ATtiny25 ni olish edi va bu hikoyaning baxtli oxiri bo'lishi mumkin edi.

Ammo men qandaydir tarzda optimallashtirishdan so'ng, bu yomon kodni 1Kb ga qisqartirishim mumkinligini his qildim. Biroq, buning iloji yo'qligini anglash uchun yana bir hafta kerak bo'ldi va baribir buni amalga oshirish uchun yana bir hafta kerak bo'ldi. Men kamalakni beshta asosiy rangga kesishim kerak edi (sezilarli vizual farqsiz). Men ish bayonotlaridan qutuldim va ikkilik kod hajmini kamaytirish uchun if-then-if zanjiridan foydalandim. Yong'in animatsiyasi juda katta hajmdagi soxta tasodifiy sonlar generatoriga muhtoj, shuning uchun men doimiy boshlang'ich qiymati bilan LFSR ning soddalashtirilgan versiyasini joriy qildim. Menga PRNG to'liq tsikli haqida qayg'urmayman va faqat kod o'lchami va "haqiqiy yong'in animatsiyasi" o'rtasidagi tushish muvozanatini qidiraman. Men hozirda eslay olmaydigan juda ko'p kichik optimallashtirishlarni amalga oshirdim va hatto yong'indan tashqari barcha rejimlarni chipga o'chirishga muvaffaq bo'ldim. Fikrlar tugagach, mening umumiy kodim taxminan 1200 bayt edi.

Men tanaffus oldim va AVR kodini optimallashtirish haqida ko'p o'qigan edim. Men hamma narsadan voz kechishga va assambleyada qayta yozishga yaqin edim, lekin oxirgi imkoniyatni berdim. Oxirgi optimallashtirish paytida men kamalakni uchta asosiy rangga kesib tashladim va boshqalarini tezda hisoblab chiqdim, men hamma narsani ko'rib chiqdim va AVRni optimallashtirish bo'yicha tavsiyalarga amal qildim va nihoyat …

avrdude: yozish chirog'i (1004 bayt):

Yozish | ######################################################################################## | 100% 0,90s

Hozirgi rejimni saqlash uchun deyarli barcha operativ xotira va bir bayt EEPROM ishlatilgan deb aytishga hojat yo'q. Men bu ideal va yakuniy amalga oshirish degani emas. Bu shunchaki ishlaydi va mikrokontrollerga mos keladi. Ishonchim komilki, buni yaxshiroq qilishingiz mumkin. Men haqiqatan ham. Men siz boshida deyarli imkonsiz deb hisoblagan amaliy bo'lmagan muammoni hal qilishning zavqini bo'lishmoqchiman. "Shunday qilib, xakerlik -bu mumkin bo'lgan chegaralarni o'rganishni anglatadi …" -Richard Stallman.

Ta'minot:

1x ATtiny13 MCU (SOP-8 paketidagi MCU uchun $ 0,28 = 0,24 dollar va DIP8 adapteri uchun 0,04 dollar)

8x WS2812 RGB LEDlari (men taxtani yoki LED tasmasini tavsiya qilaman) (0,42 dollar)

1x TTP223 sensorli tugma ($ 0.10)

1x Micro USB to DIP adapter (0,14 dollar)

1x 10kΩ qarshilik (<$ 0.01)

1x 100nF sopol kondansatör (<$ 0.01)

1x 10-47 mkF elektrolitik kondansatör (<$ 0.01)

Hammasi <$ 0,97

1 -qadam: dasturiy ta'minotni sozlash

Dasturiy ta'minotni sozlash
Dasturiy ta'minotni sozlash

Sizga manba kodini tuzish uchun avr-gcc asboblar zanjiri va mikrokontroller ROMini yuklash uchun avrdude yordam dasturi kerak bo'ladi. O'rnatish jarayoni juda oddiy va sodda, lekin bu sizning operatsion tizimingizga bog'liq. Agar siz GNU/Linux -dan foydalansangiz, ehtimol sizning ombor daraxtingizda tegishli paketlar mavjud. Loyihaning manba kodini bu erdan yuklab olish mumkin:

github.com/arduinocelentano/t13_ws2812_lamp

Sizga light_ws2812 kutubxonasi ham kerak bo'ladi:

github.com/cpldcpu/light_ws2812

Avr-gcc asboblar zanjiri va loyiha manbalariga ega bo'lgach, terminalingizni ishga tushiring va quyidagi kodni kiriting:

cd yo'l/loyihasi

qilmoq

2 -qadam: Mikrokontrollerni dasturlash

Mikrokontrollerni dasturlash
Mikrokontrollerni dasturlash
Mikrokontrollerni dasturlash
Mikrokontrollerni dasturlash
Mikrokontrollerni dasturlash
Mikrokontrollerni dasturlash

Agar sizda qandaydir USBASP dasturchisi bo'lsa, uni Attiny -ga ulang. Odatda bu shunday bo'ladi, lekin men sizning haqiqiy pinoutingizni tekshirishni qat'iy tavsiya qilaman!

Shu bilan bir qatorda, Arduino kartasini dasturchi sifatida ishlatishingiz mumkin. Arduino IDE -ni oching va "Fayl → Misollar" menyusida Arduino provayderining misolini toping. Eskizni yuklaganingizdan so'ng, sizning Arduino kartangiz dasturchi vazifasini bajaradi. Eskiz kodidagi izohlar sizga pinout haqida ma'lumot beradi.

Endi yugur

chirog 'qilish

MCU -ni o'chirish va

sug'urta qilmoq

sug'urta bitlarini o'rnatish uchun.

3 -qadam: sxemalar

Tavsiya: