Mündəricat:

ATtiny13 və WS2812: 7 Addımlı 1 dollarlıq LED Mood Lampası
ATtiny13 və WS2812: 7 Addımlı 1 dollarlıq LED Mood Lampası

Video: ATtiny13 və WS2812: 7 Addımlı 1 dollarlıq LED Mood Lampası

Video: ATtiny13 və WS2812: 7 Addımlı 1 dollarlıq LED Mood Lampası
Video: Динамические поворотники на ATTiny13 и 'бесплатных' WS2812 2024, Noyabr
Anonim
ATtiny13 və WS2812 ilə 1 dollarlıq LED Mood Lampası
ATtiny13 və WS2812 ilə 1 dollarlıq LED Mood Lampası

Müəllif tərəfindən daha çox izləyin:

Tək lövhəli kompüterdə fərdi CalDAV Server
Tək lövhəli kompüterdə fərdi CalDAV Server
Tək lövhəli kompüterdə fərdi CalDAV Server
Tək lövhəli kompüterdə fərdi CalDAV Server
LCD İşğalçıları: 16x2 LCD Xarakterli Ekranda Oyunu Bəyənən Bir Yer İşğalçıları
LCD İşğalçıları: 16x2 LCD Xarakterli Ekranda Oyunu Bəyənən Bir Yer İşğalçıları
LCD İşğalçıları: 16x2 LCD Xarakterli Ekranda Oyun İstəyən Bir Space İşğalçıları
LCD İşğalçıları: 16x2 LCD Xarakterli Ekranda Oyun İstəyən Bir Space İşğalçıları
Octarine: WS2812 RGB LED -ləri olan bir rəng uyğunluğu oyunu
Octarine: WS2812 RGB LED -ləri olan bir rəng uyğunluğu oyunu
Octarine: WS2812 RGB LED -ləri olan bir rəng uyğunluğu oyunu
Octarine: WS2812 RGB LED -ləri olan bir rəng uyğunluğu oyunu

Bu, dörd rejimi olan ucuz bir əhval lampasıdır.

1. Göy qurşağı qığılcımı. İşıq qığılcımı zaman keçdikcə yuxarıya doğru hərəkət edir və tədricən rəngini dəyişir.

2. Göy qurşağı parıltısı. Rəngi tədricən dəyişən sabit bir parıltı.

3. Şam atəşi simulyasiyası.

4. Qapalı.

Yuxarıdakı bir toxunma düyməsinə toxunaraq rejimi dəyişə bilərsiniz. Mövcud rejim söndürüldükdən sonra EEPROM yaddaşında saxlanılır.

ATtiny13 nə qədər kiçikdir?

Fikir, bu kiçik mikrokontrolörün kənarına yaxın bir layihə olan avtomatlaşdırılmış keçiddən və ya termometrdən daha mürəkkəb bir şey olan minimum cihazdan maksimum xüsusiyyətləri əldə etmək idi. Axı, məhdudiyyətlər sizi yaradıcı düşünməyə vadar edir, elə deyilmi? Yaxşı, əvvəlcə belə görünürdü.

Bu layihədə ən çətin olanı bütün kodu ATtiny13 -ə soxmaq idi. Mikro nəzarətçi 1K bayt flaşa və yalnız 64 bayt RAM -a malikdir. Bəli, "bayt" dedikdə, səkkiz bitdən ibarət olanları nəzərdə tuturam. Bütün yerli dəyişənləriniz və zəng yığınlarınız üçün 64 bayt. Aydınlaşdırmaq üçün 8 RGB LED -ə nəzarət etməli olduğumuzu düşünün. Hər biri 3 baytla müəyyən edilir (biri qırmızı, yaşıl və mavi kanal üçün). Beləliklə, yalnız 8 LED vəziyyətini saxlamaq üçün hər biri 3 bayt olan 8 quruluşdan ibarət bir sıra tətbiq etməliyik və bu dizinin əvvəlinə bir bayt daha gedəcək. Beləliklə, 64 baytdan 25 -i çıxdı. RAM -ın 39% -ni istifadə etdik və hələ başlamamışıq. Əlavə olaraq, yeddi əsas göy qurşağı rəngini saxlamaq üçün 7 × 3 = 21 bayta ehtiyacınız olacaq, buna görə də RAM -ın 72% -i bitib. Əsas rənglərə gəldikdə, şişirdirəm: hamısına eyni vaxtda RAM -da ehtiyacımız yoxdur və heç vaxt dəyişmirlər, buna görə də RAM yerinə flash -da saxlanacaq sabit bir sıra olaraq tətbiq oluna bilər. Hər halda, istifadə olunan avadanlıq haqqında ümumi bir təəssürat yaradır.

Knuthun vaxtından əvvəl optimallaşdırma ilə bağlı açıqlamasını xatırlayaraq, nə olacağını görmək üçün üç lampa rejimini ayrıca prototip etməyə başladım. Düzgün işlədiklərindən və hər birinin mikrokontrollerimə uyğun olduğundan əmin olmaq üçün onları ayrı -ayrılıqda sınadım. Bunu yerinə yetirmək üçün bir neçə axşam lazım idi və hər şey yaxşı getdi … onları açar ifadəsi içərisində bir araya gətirməyə çalışana qədər. avr-size yardım proqramı 1,5 Kb mətn bölmə ölçüsünü bildirdi (-r bayrağı ilə avr-gcc). O anda mənim ilk niyyətim 2Kb flaşla ATtiny25 çəkmək idi və bu hekayənin xoşbəxt sonu ola bilərdi.

Ancaq nədənsə hiss etdim ki, xeyli optimallaşdırıldıqdan sonra o bədbəxt kodu 1Kb -ə endirə bildim. Bununla birlikdə, bunun mümkün olmadığını başa düşmək üçün bir həftə və hər halda bunu etmək bir həftə çəkdi. Göy qurşağını beş əsas rəngə kəsmək məcburiyyətində qaldım (əhəmiyyətli vizual fərq olmadan). Dava ifadələrindən qurtuldum və ikili kod ölçüsünü azaltmaq üçün if-then-if zəncirindən istifadə etdim. Yanğın animasiyasına olduqca böyük olan yalançı təsadüfi ədəd generatoru lazımdır, buna görə də LFSR -nin daimi ilkin dəyəri olan sadələşdirilmiş bir versiyasını tətbiq etdim. PRNG -in tam dövrü ilə maraqlanmıram və sadəcə kod ölçüsü ilə "real yanğın animasiyası" arasında bir eniş balansı axtarıram. Hal -hazırda xatırlaya bilmədiyim bir çox kiçik optimallaşdırma da tətbiq etdim və hətta yanğından başqa bütün modları çipə daxil etməyi də bacardım. Fikirlərim tükənəndə ümumi kodum təxminən 1200 bayt idi.

Mən fasilə aldım və AVR kodunun optimallaşdırılması haqqında çox oxudum. Hər şeyi montaj dilində buraxmağa və yenidən yazmağa yaxın idim, amma son şansı verdim. Son optimallaşdırma tələskən, göy qurşağını üç əsas rəngə ayırdım və digərlərini anında hesablamağa məcbur etdim, hər şeyi yoxladım və AVR optimallaşdırma tövsiyələrinə əməl etdim və nəhayət …

avrdude: yazı flaşı (1004 bayt):

Yazı | ################################################### | 100% 0,90s

Cari rejimi saxlamaq üçün demək olar ki, bütün RAM və bir bayt EEPROM istifadə etdiyimi söyləməyə ehtiyac yoxdur. Bunun ideal və son bir tətbiq olduğunu düşünmürəm. Sadəcə işləyir və mikro nəzarətçiyə uyğundur. Əminəm ki, bunu daha yaxşı edə bilərsiniz. Mən həqiqətən. Başlanğıcda demək olar ki, qeyri -mümkün hesab etdiyiniz praktik olmayan bir problemi həll etməyin əyləncəsini bölüşmək istəyirəm. "Beləliklə, hack etmək mümkün olanların sərhədlərini araşdırmaq deməkdir …" -Richard Stallman.

Təchizat:

1x ATtiny13 MCU (SOP-8 paketindəki MCU üçün 0,28 dollar = 0,24 dollar və DIP8 Adaptoru üçün 0,04 dollar)

8x WS2812 RGB LED (bir lövhə və ya bir LED şeridi tövsiyə edirəm) (0.42 dollar)

1x TTP223 Toxunma düyməsi ($ 0.10)

1x Mikro USB -dən DIP Adaptora (0,14 dollar)

1x 10kΩ müqavimət (<$ 0.01)

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

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

Ümumi <0,97 dollar

Addım 1: Proqram Quraşdırması

Proqram Quraşdırması
Proqram Quraşdırması

Mənbə kodunu tərtib etmək üçün avr-gcc alət zəncirinə və mikro nəzarətçinin ROMunu yükləmək üçün avrdude proqramına ehtiyacınız olacaq. Quraşdırma prosesi olduqca sadə və sadədir, ancaq əməliyyat sisteminizdən asılıdır. Bir növ GNU/Linux istifadə edirsinizsə, ehtimal ki, anbar ağacınızda müvafiq paketləriniz var. Bu layihənin mənbə kodu buradan yüklənə bilər:

github.com/arduinocelentano/t13_ws2812_lamp

Light_ws2812 kitabxanasına da ehtiyacınız olacaq:

github.com/cpldcpu/light_ws2812

Avr-gcc alət zəncirinə və layihə mənbələrinə sahib olduqdan sonra terminalınızı işə salın və aşağıdakı kodu yazın:

cd yolu/layihəsi

etmək

Addım 2: Mikrokontrolörün proqramlaşdırılması

Mikrokontrolörün proqramlaşdırılması
Mikrokontrolörün proqramlaşdırılması
Mikrokontrolörün proqramlaşdırılması
Mikrokontrolörün proqramlaşdırılması
Mikrokontrolörün proqramlaşdırılması
Mikrokontrolörün proqramlaşdırılması

Bir növ USBASP proqramçınız varsa, pininə görə Attiny -ə qoşun. Adətən bu belə olardı, amma həqiqi pinoutunuzu yoxlamağı şiddətlə məsləhət görürəm!

Alternativ olaraq, bir proqramçı olaraq bir Arduino lövhəsindən istifadə edə bilərsiniz. Arduino IDE -ni açın və "Fayl → Nümunələr" menyusunda Arduino İSS nümunəsini tapın. Eskizi yüklədikdən sonra Arduino lövhəniz proqramçı kimi çıxış edir. Eskiz kodundakı şərhlər pinout üçün bir ipucu verəcəkdir.

İndi qaç

flaş etmək

MCU -nu yandırmaq və

qoruyucu etmək

sigorta bitlərini təyin etmək.

Tövsiyə: