Мазмұны:

ATtiny13 және WS2812: 7 қадамы бар 1 долларлық жарықдиодты шам
ATtiny13 және WS2812: 7 қадамы бар 1 долларлық жарықдиодты шам

Бейне: ATtiny13 және WS2812: 7 қадамы бар 1 долларлық жарықдиодты шам

Бейне: ATtiny13 және WS2812: 7 қадамы бар 1 долларлық жарықдиодты шам
Бейне: Самый простой бегущий поворотник на Arduino UNO 2024, Қараша
Anonim
ATtiny13 және WS2812 бар $ 1 жарықдиодты көңіл -күй шамы
ATtiny13 және WS2812 бар $ 1 жарықдиодты көңіл -күй шамы

Автордың толығырақ авторы:

Жеке тақталы CalDAV сервері
Жеке тақталы CalDAV сервері
Жеке тақталы компьютердегі CalDAV жеке сервері
Жеке тақталы компьютердегі CalDAV жеке сервері
СКД басқыншылары: 16x2 СКД дисплейіндегі ойын сияқты ғарыштық басқыншылар
СКД басқыншылары: 16x2 СКД дисплейіндегі ойын сияқты ғарыштық басқыншылар
СКД басқыншылары: 16x2 СКД дисплейіндегі ойын сияқты ғарыштық басқыншылар
СКД басқыншылары: 16x2 СКД дисплейіндегі ойын сияқты ғарыштық басқыншылар
Октарин: WS2812 RGB светодиодтары бар түстерді сәйкестендіру ойыны
Октарин: WS2812 RGB светодиодтары бар түстерді сәйкестендіру ойыны
Октарин: WS2812 RGB светодиодтары бар түстерді сәйкестендіру ойыны
Октарин: WS2812 RGB светодиодтары бар түстерді сәйкестендіру ойыны

Бұл төрт режимі бар арзан көңіл-күй шамы.

1. Радуга ұшқыны. Жарық ұшқыны уақыт өте келе жоғары қарай жылжиды және бірте -бірте түсін өзгертеді.

2. Кемпірқосақтың жарқырауы. Түсті біртіндеп өзгертетін тұрақты жарқыл.

3. Шамның өртенуін модельдеу.

4. Өшірулі.

Жоғарыдағы сенсорлық түймені түрту арқылы режимді ауыстыруға болады. Ағымдағы режим өшірілгеннен кейін EEPROM жадында сақталады.

ATtiny13 қаншалықты кішкентай?

Идея минималды аппараттық құралдан максималды мүмкіндіктерді алу болды, бұл автоматтандырылған қосқыштан немесе термометрден гөрі күрделі жоба, бұл шағын микроконтроллердің шетіне жақын. Өйткені, шектеулер сізді шығармашылық ойлауға итермелейді, иә? Әйтеуір, басында солай көрінді.

Бұл жобадағы ең қиын мәселе - барлық кодты ATtiny13 -ке көшіру болды. Микроконтроллерде 1К байтты флэш және тек 64 байт жедел жады бар. Иә, мен «байт» дегенде сегіз биттен тұратындарды білдіреді. Барлық жергілікті айнымалылар мен қоңыраулар стегі үшін 64 байт. Түсінікті болу үшін, біз 8 RGB жарықдиодты басқару керек деп есептейміз. Олардың әрқайсысы 3 байтпен анықталады (сәйкесінше қызыл, жасыл және көк арна үшін). Сонымен, 8 жарықдиодты күйді сақтау үшін бізге әрқайсысы 3 байт болатын 8 құрылымнан тұратын массив енгізу керек және бұл массивтің басына көрсеткіш тағы бір байтты алады. Осылайша, 64 байттың 25 -і шығады. Біз ЖЖҚ -ның 39% -ын қолдандық, бірақ әлі іске қосқан жоқпыз. Сонымен қатар, кемпірқосақтың жеті негізгі түстерін сақтау үшін сізге 7 × 3 = 21 байт қажет, сондықтан ЖЖҚ -ның 72% -ы өшеді. Негізгі түстерге келетін болсақ, мен асыра айтамын: олардың бәріне жедел жадта бір мезгілде қажет емес және олар ешқашан өзгермейді, сондықтан оларды жедел жадтың орнына флэште сақтау үшін тұрақты массив ретінде қолдануға болады. Қалай болғанда да, бұл қолданылған жабдық туралы жалпы әсер береді.

Кнуттың мерзімінен бұрын оңтайландыру туралы айтқандарын еске түсіре отырып, мен не болатынын көру үшін үш шам режимін прототиптен бөлек бастадым. Мен олардың дұрыс жұмыс істейтініне және әрқайсысы менің микроконтроллеріме сәйкес келетініне көз жеткізу үшін оларды бөлек тексердім. Мұны орындау үшін бірнеше кеш қажет болды және бәрі жақсы болды … мен оларды коммутаторға біріктіруге тырысқанша. avr-size утилитасы мәтін бөлімдерінің өлшемі 1,5 Kb туралы хабарлады (avr-gcc жалаушасымен). Сол сәтте менің бастапқы мақсатым 2Kb флэшпен ATtiny25 алу болды, бұл оқиғаның бақытты аяқталуы мүмкін еді.

Бірақ мен біршама оңтайландырудан кейін мен бұл жаман кодты 1 Кб дейін кішірейте алатынымды сездім. Алайда, бұл мүмкін емес екенін түсіну үшін тағы бір апта қажет болды және бәрібір оны орындау үшін тағы бір апта қажет болды. Маған кемпірқосақты бес негізгі түске дейін кесуге тура келді (визуалды айырмашылығы жоқ). Мен кейс мәлімдемелерінен құтылдым және екілік код өлшемін азайту үшін if-then-if тізбегін қолдандым. Өрт анимациясына жалған кездейсоқ сандар генераторы қажет, сондықтан мен тұрақты бастапқы мәні бар LFSR жеңілдетілген нұсқасын енгіздім. Мен PRNG толық циклінің ұзақтығына мән бермеймін және код өлшемі мен «шынайы өрт анимациясы» арасындағы тепе -теңдікті іздеймін. Мен сондай -ақ дәл қазір есімде жоқ көптеген ұсақ оңтайландыруларды енгіздім, тіпті чипке өрттен басқа барлық режимдерді қосуға қол жеткіздім. Менде идеялар таусылған кезде, менің жалпы кодым шамамен 1200 байтты құрады.

Мен күту уақытын алдым және AVR кодын оңтайландыру туралы көп оқыдым. Мен бәрін тастап, ассемблер тілінде қайта жазуға жақын болдым, бірақ соңғы мүмкіндікті бердім. Оңтайландырудың соңғы кезеңінде мен кемпірқосақты үш негізгі түске бөліп, басқаларын тез есептеуге мәжбүрледім, бәрін тексердім, AVR оңтайландыру ұсыныстарын орындадым, ақырында …

avrdude: жазу флеші (1004 байт):

Жазу | ############################################################################################################################### | 100% 0,90s

Ағымдағы режимді сақтау үшін мен барлық жедел жады мен EEPROM -нің бір байтын қолдандым деп айтудың қажеті жоқ. Мен бұл идеалды және түпкілікті іске асыру дегенді білдірмеймін. Ол жай ғана жұмыс істейді және микроконтроллерге сәйкес келеді. Мен сенемін, сіз мұны жақсырақ жасай аласыз. Мен шынымен. Мен жай ғана мүмкін емес деп есептейтін мәселені шешудің қызықтарымен бөліскім келеді. «Осылайша, хакерлік -бұл мүмкін болатын шектеулерді зерттеу …» -Ричард Сталлман.

Жабдықтар:

1x ATtiny13 MCU (SOP-8 пакетіндегі MCU үшін $ 0,28 = $ 0,24 және DIP8 адаптері үшін $ 0,04)

8x WS2812 RGB светодиодтары (мен тақтаны немесе жарықдиодты жолақты ұсынамын) ($ 0,42)

1x TTP223 сенсорлық түймесі ($ 0.10)

1x Micro USB DIP адаптері ($ 0.14)

1x 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 жолы/to/project

жасау

2 -қадам: Микроконтроллерді бағдарламалау

Микроконтроллерді бағдарламалау
Микроконтроллерді бағдарламалау
Микроконтроллерді бағдарламалау
Микроконтроллерді бағдарламалау
Микроконтроллерді бағдарламалау
Микроконтроллерді бағдарламалау

Егер сізде USBASP бағдарламашысының қандай да бір түрі болса, оны Attiny -ге оның бекітілуіне сәйкес қосыңыз. Әдетте бұл осылай көрінетін еді, бірақ мен сіздің нақты пинтуыңызды тексеруді ұсынамын!

Сонымен қатар, сіз Arduino тақтасын бағдарламашы ретінде пайдалана аласыз. Arduino IDE бағдарламасын ашып, Arduino провайдерінің мысалын «Файл → Мысалдар» мәзірінен табыңыз. Эскизді жүктегеннен кейін сіздің Arduino тақтасы бағдарламашы қызметін атқарады. Эскиз -кодтағы түсініктемелер сізге түйреуді анықтауға мүмкіндік береді.

Енді жүгір

жарқыл жасау

MCU жыпылықтау үшін және

сақтандырғыш жасаңыз

сақтандырғыш биттерді орнату үшін.

Ұсынылған: