Агуулгын хүснэгт:

ATtiny13 ба WS2812: 7 алхамтай 1 долларын үнэтэй LED гэрлийн чийдэн
ATtiny13 ба WS2812: 7 алхамтай 1 долларын үнэтэй LED гэрлийн чийдэн

Видео: ATtiny13 ба WS2812: 7 алхамтай 1 долларын үнэтэй LED гэрлийн чийдэн

Видео: ATtiny13 ба WS2812: 7 алхамтай 1 долларын үнэтэй LED гэрлийн чийдэн
Видео: Удаление ржавчины золой. DIY 2024, Арваннэгдүгээр
Anonim
ATtiny13 ба WS2812 бүхий 1 долларын үнэтэй LED гэрэл
ATtiny13 ба WS2812 бүхий 1 долларын үнэтэй LED гэрэл

Зохиогчийн бусад зүйлийг дагаж мөрдөх:

Ганц самбар бүхий хувийн CalDAV сервер
Ганц самбар бүхий хувийн CalDAV сервер
Ганц самбар бүхий хувийн CalDAV сервер
Ганц самбар бүхий хувийн CalDAV сервер
LCD Invaders: 16x2 LCD тэмдэгт дэлгэц дээрх тоглоом шиг сансрын довтлогчид
LCD Invaders: 16x2 LCD тэмдэгт дэлгэц дээрх тоглоом шиг сансрын довтлогчид
LCD Invaders: 16x2 LCD тэмдэгт дэлгэц дээрх тоглоом шиг сансрын довтлогчид
LCD Invaders: 16x2 LCD тэмдэгт дэлгэц дээрх тоглоом шиг сансрын довтлогчид
Окарин: WS2812 RGB LED бүхий өнгө тааруулах тоглоом
Окарин: WS2812 RGB LED бүхий өнгө тааруулах тоглоом
Окарин: WS2812 RGB LED бүхий өнгө тааруулах тоглоом
Окарин: WS2812 RGB LED бүхий өнгө тааруулах тоглоом

Энэ бол дөрвөн горимтой хямд үнэтэй сэтгэлийн гэрэл юм.

1. Солонгын оч. Гэрлийн оч үе үе дээшээ хөдөлж аажмаар өнгөө өөрчилдөг.

2. Солонгын гэрэл. Өнгийг аажмаар өөрчилдөг тогтвортой туяа.

3. Лааны галын симуляци.

4. Унтраасан.

Та дээд талын мэдрэгчтэй товчлуур дээр дарж горимыг сольж болно. Одоогийн горимыг унтраасны дараа EEPROM санах ойд хадгална.

ATtiny13 хэр жижиг вэ?

Энэхүү жижигхэн микроконтроллерийн ирмэг дээр байрлах төсөл, автомат унтраалга эсвэл термометрээс илүү төвөгтэй зүйлийг хамгийн бага тоног төхөөрөмжөөс авах боломжтой байв. Эцсийн эцэст хязгаарлалт нь таныг бүтээлч сэтгэхэд хүргэдэг, тийм үү? Яахав эхэндээ ийм л харагдаж байсан.

Энэ төслийн хамгийн хэцүү ажил бол бүх кодыг ATtiny13 руу оруулах явдал байв. Микроконтроллер нь 1К байт флаш, ердөө 64 байт RAM -тай. Тийм ээ, би "байт" гэж хэлэхэд найман битээс бүрдэхийг хэлнэ. Таны бүх локал хувьсагч болон дуудлагын стекийн хувьд 64 байт. Ойлгомжтой болгохын тулд бид 8 RGB LED -ийг хянах ёстой гэж бодож байна. Тэд тус бүрийг 3 байтаар тодорхойлдог (нэг нь улаан, ногоон, цэнхэр суваг тус бүр). Тиймээс, 8 LED -ийн төлөв байдлыг хадгалахын тулд бид тус бүрдээ 3 байтын 8 бүтэцтэй массивыг хэрэгжүүлэх шаардлагатай бөгөөд энэ массивын эхэнд заагч нь өөр нэг байт шаардагдана. Тиймээс 64 байтын 25 нь гарч байна. Бид RAM -ийн 39% -ийг дөнгөж ашигласан боловч хараахан эхлээгүй байна. Үүнээс гадна солонгын долоон үндсэн өнгийг хадгалахын тулд танд 7 × 3 = 21 байт хэрэгтэй тул RAM -ийн 72% нь дууссан байна. Үндсэн өнгөний хувьд би хэтрүүлсэн байна: бидэнд бүгд RAM -тэй зэрэг ажиллах шаардлагагүй бөгөөд тэд хэзээ ч өөрчлөгддөггүй тул тэдгээрийг RAM -ийн оронд флэш дээр хадгалах тогтмол массив болгон ашиглаж болно. Ямар ч байсан энэ нь ашигласан тоног төхөөрөмжийн талаар ерөнхий сэтгэгдэл төрүүлдэг.

Урьдчилан оновчлох тухай Knuth -ийн хэлсэн үгийг санаж, би юу болж байгааг харахын тулд гурван чийдэнгийн горимыг тусад нь загварчилж эхлэв. Би тэдгээрийг тус тусад нь туршиж үзсэн бөгөөд тэдгээр нь зөв ажиллаж байгаа эсэхийг шалгасан бөгөөд тус бүр нь миний микроконтроллерт тохирсон байна. Үүнийг дуусгахын тулд хэд хэдэн орой зарцуулсан бөгөөд бүх зүйл сайн болсон … би тэднийг түлхүүрийн мэдэгдэлд нэгтгэхийг оролдох хүртэл. avr-size хэрэгсэл нь 1.5 Kb хэмжээтэй текстийн хэсгийн талаар мэдээлсэн (-r тугтай хамт avr-gcc). Тэр үед миний анхны зорилго бол 2Kb флаштай ATtiny25 авах байсан бөгөөд энэ түүхийн аз жаргалтай төгсгөл байж магадгүй юм.

Гэхдээ нэлээд оновчтой болгосны дараа би тэр муу кодыг 1Кб болгон багасгаж чадна гэж бодсон юм. Гэсэн хэдий ч үүнийг хийх боломжгүй гэдгийг ойлгохын тулд дахиад нэг долоо хоног шаардагдсан бөгөөд үүнийг хийх нь дахиад нэг долоо хоног шаардагджээ. Би солонгыг таван үндсэн өнгө болгон хуваах ёстой байв (харааны хувьд мэдэгдэхүйц ялгаа байхгүй). Би тохиолдлын мэдэгдлээс ангижирч, хоёртын кодын хэмжээг багасгахын тулд if-then-if гинжийг ашигласан. Галын анимэйшн нь асар том хэмжээтэй хуурамч санамсаргүй тоо үүсгэгч хэрэгтэй тул би анхны утга бүхий LFSR -ийн хялбаршуулсан хувилбарыг хэрэгжүүлсэн. Би PRNG -ийн бүтэн мөчлөгийн үргэлжлэлийг анхаарч үздэггүй бөгөөд кодын хэмжээ ба "бодит галын хөдөлгөөнт дүрс" хоорондын тэнцвэрийг хайж байна. Би одоогоор санахгүй байгаа маш олон жижиг оновчлолыг хэрэгжүүлсэн бөгөөд галаас бусад бүх горимыг чип рүү асааж чадсан. Надад санаа алга болоход миний нийт код ойролцоогоор 1200 байт байсан.

Би завсарлага аваад AVR кодыг оновчтой болгох талаар маш их уншиж байсан. Би бүх зүйлийг орхиж, ассемблер хэл дээр дахин бичихэд ойрхон байсан боловч түүнд сүүлчийн боломжийг олгосон. Төгсгөлийн оновчлолын үеэр би солонгыг гурван үндсэн өнгөнд хувааж, бусдыг тооцоолоход хүргэж, бүх зүйлийг шалгаж AVR оновчлолын зөвлөмжийг дагаж, эцэст нь …

avrdude: бичих флаш (1004 байт):

Бичих | ###################################################### | 100% 0.90 -ээд он

Би одоогийн горимыг хадгалахын тулд бараг бүх RAM, EEPROM -ийн нэг байтыг ашигласан гэж хэлэх шаардлагагүй болно. Энэ бол хамгийн тохиромжтой, эцсийн хэрэгжилт гэж би бодохгүй байна. Энэ нь зүгээр л ажилладаг бөгөөд микроконтроллерт тохирсон байдаг. Та үүнийг илүү сайн хийж чадна гэдэгт итгэлтэй байна. Би үнэхээр байна. Эхэндээ бараг боломжгүй гэж үзсэн, боломжгүй мэт асуудлыг шийдэх хөгжилтэй байдлаа хуваалцахыг хүсч байна. "Тиймээс хакердах гэдэг нь боломжтой зүйлийн хязгаарыг судлах гэсэн үг юм." -Ричард Сталлман.

Хангамж:

1x ATtiny13 MCU (SOP-8 багц дахь MCU-ийн хувьд 0.28 доллар = 0.24 доллар, DIP8 адаптерийн хувьд 0.04 доллар)

8x WS2812 RGB LED (би самбар эсвэл LED тууз санал болгож байна) ($ 0.42)

1x TTP223 мэдрэгчтэй товчлуур ($ 0.10)

1x Micro USB -ээс DIP адаптер (0.14 доллар)

1х 10 кОм эсэргүүцэл (<$ 0.01)

1x 100nF керамик конденсатор (<$ 0.01)

1x 10-47µF электролитийн конденсатор (<0.01 $)

Нийт <$ 0.97

Алхам 1: Програм хангамжийн тохиргоо

Програм хангамжийн тохиргоо
Програм хангамжийн тохиргоо

Танд эх кодыг эмхэтгэхэд avr-gcc багаж хэрэгсэл, микроконтроллерын ROM-ийг байршуулах avrdude хэрэгсэл хэрэгтэй болно. Суулгах процесс нь маш энгийн бөгөөд энгийн боловч энэ нь таны үйлдлийн системээс хамаарна. Хэрэв та ямар нэгэн GNU/Linux ашигладаг бол таны хадгалах санд зохих багцууд байгаа байх. Энэ төслийн эх кодыг эндээс татаж авч болно.

github.com/arduinocelentano/t13_ws2812_lamp

Мөн танд light_ws2812 номын сан хэрэгтэй болно.

github.com/cpldcpu/light_ws2812

Та avr-gcc багаж хэрэгсэл, төслийн эх сурвалжтай болсны дараа терминалаа ажиллуулаад дараах кодыг бичнэ үү.

cd зам/руу/төсөл

хийх

Алхам 2: Микроконтроллерыг програмчлах

Микроконтроллер програмчлах
Микроконтроллер програмчлах
Микроконтроллер програмчлах
Микроконтроллер програмчлах
Микроконтроллер програмчлах
Микроконтроллер програмчлах

Хэрэв танд USBASP програмист байгаа бол түүнийг холболтын дагуу Attiny руу холбоно уу. Ихэвчлэн энэ нь иймэрхүү харагддаг, гэхдээ би таны жинхэнэ pinout -ийг шалгахыг зөвлөж байна!

Эсвэл та Arduino самбарыг програмист болгон ашиглаж болно. Arduino IDE -ийг нээгээд "Файл → Жишээ" цэснээс Arduino ISP -ийн жишээг олоорой. Ноорог байршуулсны дараа таны Arduino самбар програмистын үүрэг гүйцэтгэдэг. Ноорог код дээрх сэтгэгдлүүд нь хасах тухай ойлголт өгөх болно.

Одоо гүй

флаш хийх

MCU -г асаах ба

гал хамгаалагч хийх

гал хамгаалагчийн битүүдийг тохируулах.

Зөвлөмж болгож буй: