Мазмуну:
- Жабдуулар
- 1 -кадам: Цирк
- 2 -кадам: Убакыт диаграммасы
- 3 -кадам: Программалоо. Макростар жана аныктамалар
- 4 -кадам: Программалоо. Main Loop
- 5 -кадам: Программалоо. Көмөкчү функциялар
- 6 -кадам: Программалоо. Protothread тартиби
- 7 -кадам: Ички иштер
Video: Attiny85 Бирдей Программалоо же Көп Түстүү Көздөр менен Ашкабак: 7 Кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
By jumbleviewJumbleview.infoFollow More by Author:
Жөнүндө: Мен Bay Area (California) компаниялардын биринде инженер -инженер болуп иштейм. Убакыт болгондо мен микро контроллерлерди программалоону, механикалык оюнчуктарды курууну жана үйдү жакшыртуу долбоорлорун жасаганды жакшы көрөм. Jumbleview жөнүндө көбүрөөк маалымат »
Бул долбоор Attiny85 чипи менен 10мм үч түстүү жалпы аноддук диоддорду (Ашкабак Хэллоуин жылтырагынын түстүү көздөрү) кантип башкарууну көрсөтөт. Долбоордун максаты - окурманды бир убакта программалоо искусствосу менен тааныштыруу жана Адам Дюнкелстин прототек китепканасын колдонуу. Бул долбоор окурман AVR 8-бит контроллери жөнүндө билет, кээ бир C-программасын жаза алат жана Atmel студиясында тажрыйбасы бар деп болжолдойт.
GitHubда жарыяланган долбоордун коду:
Жабдуулар
Программалоодон мурун дагы эле схеманы куруу керек. Бул жерде компоненттер:
- Attiny85 контроллери (каалаган электрондук жеткирүүчү).
- Жалпы анод менен үч түстүү 10 мм диоддор. Adafruit LED
- Резисторлор 100 Ом, 120 Ом, 150 Ом 0.125 же 0.250 Вт (каалаган электрондук жеткирүүчү).
- AVR ISP интерфейси үчүн алты пин баш. Бул Adafruit башынан жасалышы мүмкүн
- Кээ бир нан тактасы же басылган шаблон тактасы. Мен муну колдондум
- AVR ISP MKII интерфейси жана Atmel Studio 6.1 (Кийинки версия да иштеши керек).
1 -кадам: Цирк
Дизайн беш чип казыгын колдонот:
- Аноддорду көзөмөлдөө үчүн эки казык колдонулат: ар бир LED аноду атайын пинге тиркелет.
- LED катоддоруна үч пин (резисторлор аркылуу) тиркелет (ар бир түстүн катоду бир эле пинге тиркелет)
Бирөө сурайт: эмне үчүн чиптин алты кирүүчү/чыккычын колдонбоңуз, андыктан LED аноддору +5 в түз туташат жана ар бир катоддо өзүнүн пини болот? Бул программалоону түз кылат. Тилекке каршы, көйгөй бар: пин PB5 (RESET) - ~ 2 мА токту камсыз кылууга жөндөмдүү алсыз пин, ал эми ~ 20 мА болушу керек.
Албетте, бул алсыз пин үчүн транзистордук күчөткүчтү курууга болот, бирок мен мүмкүн болушунча көйгөйдү код аркылуу чечүүнү туура көрөм.
2 -кадам: Убакыт диаграммасы
Убакыт диаграммасы бизге программалоо үчүн эмне керек экенин түшүнүүгө жардам берет.
Диаграммада жогорку эки катар LED аноддорунда чыңалуунун өзгөрүшүн көрсөтөт. LED аноддоруна туташкан төөнөгүчтөрдөгү чыңалуу ~ 250 Гц жыштыкта термелет. Сол LED үчүн бул чыңалуу термелүүсү оң LED термелүүсүнө карама -каршы келет. Аноддогу чыңалуу жогору болгондо тиешелүү LED жаркырап турушу мүмкүн. Ал аз болгондо тиешелүү LED караңгы болот. Бул ар бир светодиод 2 миллисекунд аралыгында жарык болушу мүмкүн жана башка 2 миллисекунд ичинде караңгы болот дегенди билдирет. Адамдын көзүндө кандайдыр бир инерция бар болгондуктан, байкоочу 250 Гцтин жаркылдашы байкалбайт. Диаграмманын астындагы үч катар LED катоддоруна туташкан казыктарда чыңалуунун өзгөрүшүн көрсөтөт. Келгиле, биринчи диаграмма тилкесин карап көрөлү. Бул сол LED кызыл түстө жана оң LED жашыл түстө болгон учурду көрсөтөт. Бул жерде КЫЗЫЛ катоддор сол анод бийик, ал эми Жашыл катод төмөн, оң анод бийик, КӨК катод дайыма төмөн бойдон калат. Диаграммадагы башка мамычалар ар кандай түстөр үчүн катод менен аноддун чыңалуусунун айкалыштарын көрсөтөт.
Көрүнүп тургандай, пин абалынан көз карандылык бар. Эгерде кандайдыр бир алкак болбосо, аны чечүү оңой болбойт. Мына ошол жерде протоколдуу китепкана жардамга келет.
3 -кадам: Программалоо. Макростар жана аныктамалар
Программалоо кадамдарындагы мисал бир аз жөнөкөйлөтүлгөн версияны билдирет. Программа кыскарып, кээ бир символикалык аныктама ачык константалар менен алмаштырылган.
Келгиле, башынан баштайлы. Программа Atmel Studio менен келген файлдарды, ошондой эле протоколдун китепканасынын башын камтыйт. Кийинки, пиндердин деңгээлин иштетүү үчүн эки макростар жана сигналдарды туташтыруу үчүн логикалык аттарды берүү үчүн кээ бир аныктамалар бар. Азырынча өзгөчө эч нерсе жок.
4 -кадам: Программалоо. Main Loop
Анда аягына чейин карап көрөлү, анда негизги процедуранын эмне камтылганын билебиз.
Бир аз инициализациядан кийин негизги функция түбөлүккө айланат. Бул циклде ал кийинки кадамдарды жасайт:
- Сол LED үчүн протоколдун тартибин чакырат. Бул кээ бир казыктардын чыңалуусун өзгөртөт.
- Эки миллисекунд кечигүү жасаңыз. Пин чыңалуусунда эч кандай өзгөрүү жок.
- Оң LED үчүн протоколду чакырат. Бул кээ бир пин чыңалуусун өзгөртөт.
- 2 MS кечигүү жасаңыз. Пин чыңалуусунда эч кандай өзгөрүү жок.
5 -кадам: Программалоо. Көмөкчү функциялар
Протоколдорду талкуулоону баштаардан мурун, биз кээ бир жардамчы функцияларды карашыбыз керек. Биринчиден, белгилүү бир түс орнотуу үчүн функциялар бар. Алар түз. Колдоого алынган түстөрдүн саны (жети) жана LED караңгысын коюу үчүн дагы бир функция (NoColor) сыяктуу көптөгөн функциялар бар.
Жана дагы бир функция бар, ал түздөн -түз протоколдун тартиби менен иштей баштайт. Анын аты DoAndCountdown ().
Техникалык жактан мындай функцияны колдонуу милдеттүү эмес, бирок мен аны ыңгайлуу деп таптым. Анын үч аргументи бар:
- LED түсүн орнотуу үчүн көрсөткүч (RedColor же GreenColor ж.б. сыяктуу)
- Ревер эсептегичтин баштапкы мааниси: бул протоколдун стадиясында бул функция канча жолу чакырылышы керек.
- Көрсөткүчтү артка кайтаруу. Түстө өзгөрүү болгондо, тескери эсептегич 0 болот, демек, алгач кайталоо коду ошол эсептегичке баштапкы маанини берет. Ар бир кайталоо эсептегичтен кийин азаят.
DoAndCountdown () функциясы тескери эсептегичтин маанисин кайтарат.
6 -кадам: Программалоо. Protothread тартиби
Жана бул жерде фреймдин өзөгү: протоколдун тартиби. Мисал жөнөкөйлүк үчүн үч гана кадам менен чектелген: түсүн КЫЗЫЛ, Жашыл жана КӨКкө өзгөртүү үчүн.
Функция эки аргумент менен чакырылат:
- Протоколдун түзүлүшүнө көрсөткүч. Бул структура негизги цикл башталганга чейин негизги тарабынан башталган.
- Көрсөткүчтү артка кайтаруу. Негизги цикл баштала электе ал 0 тарабынан негизги болуп коюлган.
Функция сол чыракты активдүү кылуу үчүн чыңалууларды коюп, протоколдун сегментин баштайт. Бул сегмент PT_BEGIN жана PT_END макростарынын ортосунда. Ичинде биздин учурда PT_WAIT_UNTIL макростарын кайталаган кээ бир коддор бар. Бул макростар төмөнкүлөрдү аткарат:
- DoAndCountdown функциясын чакыруу. Бул LED түстүү катоддордун чыңалуусун аныктайт.
- 0 менен салыштырганда жыйынтык кайтарылды. Эгерде шарт "жалган" болсо, протоколдун функциясы дароо кайтып келип, башкы циклге башкарууну берет.
- Кийинки жолу прототок чакырылганда, ал кодду PT_BEGINге чейин кайра аткарат, андан кийин PT_WAIT_UNTIL макросунун ичине акыркы жолу кайтып келет.
- Мындай аракеттер DoAndCountdown жыйынтыгы 0 болгонго чейин кайталанат. Бул учурда кайтаруу жок, программа протоколдо калат жана коддун кийинки сабын аткарат. Биздин учурда бул кийинки PT_WAIT_UNTIL, бирок жалпысынан айтканда бул дээрлик бардык C коду болушу мүмкүн.
- Экинчи PT_WAIT_UNTIL тескери эсептегичтин алгачкы аткарылышында 0 болот, ошондуктан DoAndCountdown () процедурасы аны баштапкы мааниге койду. Экинчи макростар кайра эсептөөчү 0гө жеткенге чейин 250 жолу аткарылат.
- PT_END макростарына жетээри менен структуранын абалы калыбына келтирилет. Кийинки жолу протоколдун функциясы чакырылганда, протоколдун сегменти PT_BEGINден кийин коддун линиясын аткара баштайт.
Туура LED үчүн ушундай протоколдун тартиби бар. Биздин мисалда ал түстөрдүн ар кандай тартибин аткарат, бирок эгерде биз таптакыр башкача кыла турган болсок: сол жана оң LED режиминин ортосунда тыгыз байланыш жок.
7 -кадам: Ички иштер
Бүт программа 200 саптан кем эмес (комментарийлер жана бош саптар менен) жана Attiny85 код эсинин 20% дан азын алат. Керек болсо, бул жерде дагы бир нече протоколдорду колдонуу жана аларга алда канча татаал логиканы дайындоо мүмкүн.
Protothreads китепканасы компьютерди бир убакта программалоонун эң жөнөкөй түрү. Параллелдүү программалоо - бул программаны логикалык бөлүктөргө бөлүүгө мүмкүндүк берүүчү ыкма: кээде алар корутиндер, кээде жип, кээде тапшырмалар деп аталат. Принцип - ар бир ушундай тапшырма кодду аздыр -көптүр сызыктуу жана башка бөлүктөрдөн көз карандысыз сактоо менен бир процессордун кубатын бөлүшө алат. Логикалык жактан алганда тапшырмалар бир убакта аткарылышы мүмкүн.
Өркүндөтүлгөн системалар үчүн мындай милдеттерди операциялык системанын ядросу же компилятор тарабынан аткарылуучу тилдин иштөө убактысы көзөмөлдөйт. Ал эми протоколдор болсо, программист аны протоколго макро китепкананы колдонуу менен көзөмөлдөйт жана мындай тартиптерди колдонот (адатта негизги циклден тышкары).
Балким, прототектор чынында кантип иштээрин билгиңиз келеби? Сыйкыр кайда катылган? Протоколдор C тилинин өзгөчө өзгөчөлүгүнө таянат: C которуу учурунун билдирүүсү эгерде же башка блокко (мисалы, учурунда же үчүн) киргизилиши мүмкүн. Чоо -жайын Адам Дюнкелс сайтынан таба аласыз
Бул долбоордун ички электроникасы абдан жөнөкөй. Жогорудагы сүрөт сизге кандайдыр бир түшүнүк берет. Мен сенден жакшыраак кыла алаарыңа ишенем.
Сунушталууда:
Көп түстүү жарык сүрөтчүсү (сенсордук): 8 кадам (сүрөттөр менен)
Көп түстүү жарык сүрөтчүсү (тийүү сезгичтиги): Жарык сүрөтү-жапкычтын жай ылдамдыгында атайын эффекттерди түзүү үчүн колдонулган фотографиялык ыкма. Чырак көбүнчө " боёп " сүрөттөр. Бул Нускоодо, мен сизге кантип тийүү менен бир жарык сүрөтчүнү кантип курууну көрсөтөм
Көп түстүү LEDди колдонуу менен сериялык LED жарык: 3 кадам (сүрөттөр менен)
Сериялык LED жарык көп түстүү светодиоддорду колдонуу менен: Сериалдык LED жарык анча кымбат эмес, бирок эгер сиз мага окшоп DIY сүйгөн (хоббиист) болсоңуз, анда сиз өзүңүздүн сериялык диоддоруңузду жасай аласыз жана ал базардагы жарыкка караганда арзаныраак. Мен 5 вольтто иштеген сериялык LED жарыгын жасайм
Көп түстүү LED Icosahedron: 7 кадам (Сүрөттөр менен)
Көп түстүү LED Icosahedron: Бир аз мурун мен чоң 20 тараптуу Die жасадым. Көптөгөн адамдар менин бирөөбүздү курушумду каалашты жана долбоордун эң татаал бөлүгү кесүүчү бурчтарды туура тартып жаткандыктан, мен дагы так чогултууга мүмкүндүк бере турган башкасын жасоону чечтим
Arduino негизделген көп түстүү жарык таякчасы: 13 кадам (сүрөттөр менен)
Arduino негизделген көп түстүү жарык боёк таякчасы: Жарык сүрөт - бул фотографтар колдонгон техника, анда кызыктуу булактарды тартуу үчүн жарыктын булагы колдонулат жана Камера буларды бириктирет. Натыйжада, Фото жарыктын издерин камтыйт, ал акыры бир көрүнүштү берет
Variable Output менен комплекстүү көп түстүү шаблондор: 12 кадам (сүрөттөр менен)
Ар түрдүү түстүү комплекстүү көп түстүү шаблондор: Көп кабаттуу түстүү реалдуу трафарет баары эле тез жана оңой эмес. Албетте, сиз бир сааттын ичинде бир нерсени чече аласыз, бирок процессти кайталап, аны ар бир трафаретке кантип тууралоону билүү үчүн убакыт жана практика керек. Бул көрсөтмөдө мен