Мазмуну:

$ 1 LED маанай чырагы ATtiny13 жана WS2812 менен: 7 кадам
$ 1 LED маанай чырагы ATtiny13 жана WS2812 менен: 7 кадам

Video: $ 1 LED маанай чырагы ATtiny13 жана WS2812 менен: 7 кадам

Video: $ 1 LED маанай чырагы ATtiny13 жана WS2812 менен: 7 кадам
Video: “Ksenon” hamda “Led” chiroqlari “Gentra” yoki “Cobalt” avtomobillariga oʻrnatilishi mumkinmi? 2024, Ноябрь
Anonim
$ 1 LED маанай чырагы ATtiny13 жана WS2812 менен
$ 1 LED маанай чырагы ATtiny13 жана WS2812 менен

By arduinocelentanoFollow More by Author:

Жеке тактадагы жеке CalDAV Server
Жеке тактадагы жеке CalDAV Server
Жеке тактадагы жеке CalDAV Server
Жеке тактадагы жеке CalDAV Server
LCD Invaders: Space Invaders 16x2 ЖК символдорунун дисплейиндеги оюн сыяктуу
LCD Invaders: Space Invaders 16x2 ЖК символдорунун дисплейиндеги оюн сыяктуу
LCD Invaders: Space Invaders 16x2 ЖК символдорунун дисплейиндеги оюн сыяктуу
LCD Invaders: Space Invaders 16x2 ЖК символдорунун дисплейиндеги оюн сыяктуу
Octarine: WS2812 RGB LED менен түс дал келген оюн
Octarine: WS2812 RGB LED менен түс дал келген оюн
Octarine: WS2812 RGB LED менен түс дал келген оюн
Octarine: WS2812 RGB LED менен түс дал келген оюн

Бул төрт режими бар арзан маанай чырагы.

1. Радуга учкуну. Жарыктын учкуну убакыттын өтүшү менен өйдө карай жылып, бара -бара түсүн өзгөртөт.

2. Радуга жарыгы. Акырындык менен түсүн өзгөртө турган туруктуу жаркыроо.

3. Шамдын отун симуляциялоо.

4. Өчүк.

Сиз үстүндөгү сенсордук баскычты таптоо менен режимдерин алмаштыра аласыз. Учурдагы режим өчүрүлгөндөн кийин EEPROM эс тутумунда сакталат.

ATtiny13 канчалык кичинекей?

Идея минималдуу жабдуулардан максималдуу функцияларды алуу, автоматташтырылган которгучка же термометрге караганда татаал нерсе, бул кичинекей микроконтроллердин четине жакын долбоор. Кантсе да, чектөөлөр сизди чыгармачыл ойлонууга мажбурлайт, туурабы? Ооба, башында окшош экен.

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

Кнуттун мөөнөтүнөн мурда оптималдаштыруу жөнүндөгү билдирүүсүн эстеп, мен эмне болорун көрүү үчүн үч лампа режимин прототиптөөдөн баштадым. Мен алардын өзүнчө текшерип көрдүм, алар туура иштеши керек жана ар бири менин микроконтроллериме туура келет. Аны ишке ашыруу үчүн бир нече кечтер өттү жана баары жакшы өттү … мен аларды которуу билдирүүсүнүн ичине чогултканга чейин. avr-size утилитасы 1,5 Кб текст бөлүмүнүн көлөмүн билдирди (-r желеги менен avr-gcc). Ошол учурда менин түпкү ниетим 2Kb флэш менен ATtiny25ти тартып алуу болгон жана бул окуянын бактылуу аягы болмок.

Бирок мен кандайдыр бир жол менен бир топ оптималдаштыруудан кийин, бул жаман кодду 1Кбга чейин кыскарта алаарымды сездим. Бирок, бул мүмкүн эместигин түшүнүү үчүн дагы бир жума жана аны аткарууга дагы бир жума кетти. Мен асан -үсөндү беш негизги түскө чейин кесишим керек болчу (көрүнөө айырмачылыгы жок). Мен кейстердин билдирүүлөрүнөн кутулдум жана экилик коддун өлчөмүн азайтуу үчүн if-then-if чынжырын колдондум. Өрт анимациясына жасалма сандык генератор керек, ал абдан чоң, ошондуктан мен LFSRдин жөнөкөйлөтүлгөн версиясын дайыма баштапкы мааниси менен ишке ашырдым. Мага PRNGтин толук циклинин узактыгы жана коддун өлчөмү менен "реалдуу өрт анимациясынын" ортосундагы тең салмактуулукту издөө маанилүү эмес. Мен дагы азыр эстей албаган көптөгөн майда оптимизацияларды ишке ашырдым, ал тургай оттон башка бардык режимдерди чипке жаркырата алдым. Идеялар түгөнгөндө, менин жалпы кодум болжол менен 1200 байт болчу.

Мен күтүү убактысын алдым жана AVR кодун оптималдаштыруу жөнүндө көп окудум. Мен баарын таштап, ассемблер тилинде кайра жазууга жакын калдым, бирок акыркы мүмкүнчүлүк бердим. Акыркы оптималдаштыруу учурунда мен асан -үсөндү үч негизги түскө бөлдүм жана башкаларды учууда эсептеп чыктым, баарын карап чыктым жана AVR оптималдаштыруу сунуштарын аткардым жана акыры …

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

Жазуу | #################################################### | 100% 0.90s

Мен учурдагы режимди сактоо үчүн дээрлик бардык RAM жана EEPROMдун бир байтын колдондум деп айтуунун кажети жок. Бул идеалдуу жана акыркы ишке ашыруу дегенди билдирбейт. Бул жөн эле иштейт жана микроконтроллерге туура келет. Мен ишенем, сен муну жакшыраак кыла аласың. Мен чын эле. Мен жөн эле башында мүмкүн эмес деп эсептеген, көрүнбөгөн проблеманы чечүүнүн кызыктуусу менен бөлүшкүм келет. "Ошентип, хакерлик мүмкүн болгон нерселердин чектерин изилдөө дегенди билдирет …" -Ричард Сталлман.

Берилиштер:

1x ATtiny13 MCU (SOP-8 пакетиндеги MCU үчүн $ 0.28 = $ 0.24 жана DIP8 адаптери үчүн $ 0.04)

8x WS2812 RGB светодиоддору (мен тактай же LED тилкесинин бир бөлүгүн сунуштайм) ($ 0.42)

1x TTP223 Touch баскычы ($ 0.10)

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

1x 10kΩ каршылыгы (<$ 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 path/to/project

жасоо

2 -кадам: Микроконтроллерди программалоо

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

Эгерде сизде кандайдыр бир USBASP программисти болсо, аны анын чокусуна ылайык Аттиниге туташтырыңыз. Адатта, мындай көрүнөт, бирок мен сиздин чыныгы пинтуңузду текшерүүнү сунуштайм!

Же болбосо, сиз Arduino тактасын программист катары колдоно аласыз. Arduino IDE ачыңыз жана "Файл → Мисалдар" менюсунан Arduino ISP мисалын табыңыз. Эскизди жүктөгөндөн кийин, сиздин Arduino тактаңыз программист катары иштейт. Эскиз кодундагы комментарийлер сизге пинтуту үчүн кеңеш берет.

Эми чуркагыла

жарк этүү

MCUду күйгүзүү үчүн жана

эритме жасоо

сактандыргычтарды орнотуу.

Сунушталууда: