Мазмұны:
Бейне: ATtiny13 және WS2812: 7 қадамы бар 1 долларлық жарықдиодты шам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
Автордың толығырақ авторы:
Бұл төрт режимі бар арзан көңіл-күй шамы.
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 жыпылықтау үшін және
сақтандырғыш жасаңыз
сақтандырғыш биттерді орнату үшін.
Ұсынылған:
NodeMCU Lua MicroPython температурасы мен ылғалдылығын есепке алу, Wifi және мобильді статистикасы бар 6 долларлық арзан тақта: 4 қадам
NodeMCU Lua MicroPython температурасы мен ылғалдылығын тіркейтін, Wi -Fi мен мобильді статистикасы бар 6 долларлық арзан тақта: Бұл негізінен бұлтты ауа райы станциясы, сіз телефондағы деректерді тексере аласыз немесе телефонды тірі дисплей ретінде пайдалана аласыз NodeMCU құрылғысымен сыртта температура мен ылғалдылық туралы деректерді тіркеуге болады. , бөлмеде, жылыжайда, зертханада, салқындатқышта немесе кез келген басқа жерде
4017 IC және RGB жарықдиодты жарықдиодты жарықдиодты қалай жасауға болады: 13 қадам
Жарық диодты машинаны 4017 IC және RGB светодиод арқылы қалай жасауға болады: Сәлем досым, бүгін мен 4017 IC және RGB LED светодиодты қолданып светодиодты іздеу схемасын жасаймын
Микроскоптарға арналған жарықдиодты жарықдиодты жарықдиодты жарықдиодты тақта!: 6 қадам (суреттермен)
Микроскоптар үшін DIY жарықдиодты жарықдиодты PCB! Мен электрониканы қолдануға арналған екінші микроскопты сатып алдым және сіз
Ескі LiIon батареясынан қайта зарядталатын жарықдиодты шам / шам: 15 қадам
Ескі LiIon батареясынан қайта зарядталатын жарықдиодты шам / шам: сәлем, арзан ebay компоненттерінен және ескі электроникадан LI-иондық батареялардан бірнеше қайта зарядталатын шамдар жасадым
Смартфонның веб интерфейсі бар 5 долларлық ақылды шам: 4 қадам
Смартфонның интерфейсі бар 5 долларлық ақылды шам: Сәлеметсіз бе! Менің атым Рафаэль. Бұл менің бірінші нұсқаулық! Бұл шамды жасаудың негізгі мотивациясы-ұтқырлығы төмен адамдардың өміріне көмектесу. Бір күні бізде қабырғаға қосқыштар немесе жетуге қиын штепсельдер болмайды, керісінше біздің смартфондар басқарады