Мазмұны:

Attiny85 Бір мезгілде бағдарламалау немесе түрлі-түсті көзбен асқабақ: 7 қадам
Attiny85 Бір мезгілде бағдарламалау немесе түрлі-түсті көзбен асқабақ: 7 қадам
Anonim

JumbleviewJumbleview.info авторы Толығырақ:

Айқай
Айқай
Айқай
Айқай
NiCd батареясын сыртқы қуат көзіне ауыстыру
NiCd батареясын сыртқы қуат көзіне ауыстыру
NiCd батареясын сыртқы қуат көзіне ауыстыру
NiCd батареясын сыртқы қуат көзіне ауыстыру
Сандық камераның тұтқасы
Сандық камераның тұтқасы
Сандық камераның тұтқасы
Сандық камераның тұтқасы

Туралы: Мен Bay Area (Калифорния) компанияларының бірінде инженер -бағдарламашы болып жұмыс жасаймын. Уақыт болған сайын, мен микроконтроллерлерді бағдарламалауды, механикалық ойыншықтарды жасауды және үйді жақсартуға арналған бірнеше жобалар жасағанды ұнатамын. Jumbleview туралы толығырақ »

Бұл жоба Attiny85 чипі бар екі түсті 10мм үш түсті жалпы анодты жарықдиодты (асқабақ Хэллоуинінің жарқылының түрлі түсті көздері) қалай басқаруға болатынын көрсетеді. Жобаның мақсаты - оқырманды бір мезгілде бағдарламалау өнерімен таныстыру және Адам Дюнкельс прототека кітапханасын қолдану. Бұл жоба оқырман AVR 8-разрядты контроллері туралы білетінін, C-бағдарламасын жаза алатынын және Atmel студиясында тәжірибесі бар екенін болжайды.

GitHub -да жарияланған жоба коды:

Жабдықтар

Бағдарламалауды бастамас бұрын схеманы құру қажет. Мұнда компоненттер:

  • Attiny85 контроллері (кез келген электронды жеткізуші).
  • Жалпы анодпен үш түсті 10 мм екі жарықдиодты. Adafruit жарық диодтары
  • Резисторлар 100 Ом, 120 Ом, 150 Ом 0.125 немесе 0.250 Вт (кез келген электронды жеткізуші).
  • AVR ISP интерфейсіне арналған алты пин тақырыбы. Бұл Adafruit тақырыбынан жасалуы мүмкін
  • Кейбір нан тақтасы немесе басып шығарылған шаблон тақтасы. Мен бұны қолдандым
  • AVR ISP MKII интерфейсі және Atmel Studio 6.1 (кейінгі нұсқа да жұмыс істеуі керек).

1 -қадам: Айналым

Цирк
Цирк

Дизайн бес чипті түйреуішті қолданады:

  • Анодтарды басқару үшін екі түйреуіш қолданылады: әрбір жарықдиодты анод арнайы түйреуішке бекітілген.
  • Жарық диодты катодтарға үш түйреуіш (резисторлар арқылы) бекітілген (әр сымның бірдей түсті катодтары бір істікке бекітілген)

Сұрақ болар еді: неге чиптің барлық алты кіріс -шығыс түйреуін пайдаланбау керек, сондықтан жарықдиодты анодтар +5 вольтке тікелей қосылады және әрбір катодта арнайы түйреуіш болады? Бұл бағдарламалауды қарапайым етеді. Өкінішке орай, мәселе бар: PB5 түйреуіші (RESET) - бұл ~ 2 мА токты қамтамасыз етуге қабілетті әлсіз түйреуіш, ал ~ 20 мА болуы керек.

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

2 -қадам: уақыт диаграммасы

Уақыт диаграммасы
Уақыт диаграммасы

Уақыт диаграммасы бізге бағдарламалау үшін не қажет екенін түсінуге көмектеседі.

Диаграммадағы жоғарғы екі жол жарықдиодты анодтардың кернеуінің өзгеруін көрсетеді. Жарықдиодты анодтарға қосылған түйреуіштердегі кернеу жиілігі ~ 250 Гц тербеледі. Сол жақ жарық диодты кернеудің тербелісі оң жақ жарық диодты тербеліске қарама -қарсы. Анодтағы кернеу жоғары болған кезде сәйкес жарықдиодты жарық болуы мүмкін. Төмен болған кезде сәйкес келетін жарық диоды қараңғы болады. Бұл әр жарық диоды 2 миллисекунд аралығында жарқын болуы мүмкін және тағы 2 миллисекунд ішінде қараңғы болады. Адам көзінде инерция болғандықтан, бақылаушы 250 Гц жыпылықтағанын байқамайды. Диаграмманың төменгі үш жолында катодты светодиодтарға қосылған түйреуіштердегі кернеудің өзгеруі көрсетілген. Диаграмманың бірінші бағанын қарастырайық. Ол сол жақ жарық диоды қызыл түспен, ал оң жақ жарық диоды жасыл түспен болған жағдайды көрсетеді. Бұл жерде ҚЫЗЫЛ катодтар төменде қалады, сол жақ анод жоғарыда, ЖАСЫЛ катод төменде, ал оң жақ анод жоғарыда, ал КӨК катод үнемі төмен болады. Диаграммадағы басқа бағандар әр түрлі түстерге арналған катод пен анод кернеуінің комбинациясын көрсетеді.

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

3 -қадам: Бағдарламалау. Макростар мен анықтамалар

Бағдарламалау. Макростар мен анықтамалар
Бағдарламалау. Макростар мен анықтамалар

Бағдарламалау қадамдарының мысалы сәл жеңілдетілген нұсқаны көрсетеді. Бағдарлама қысқартылды, ал кейбір символдық анықтама нақты тұрақтылармен алмастырылды.

Басынан бастайық. Бағдарлама Atmel Studio -мен бірге келетін файлдарды, сонымен қатар протоколды кітапхана тақырыбын қамтиды. Келесіде түйреуіш деңгейлерін басқаруға арналған екі макростар және түйреуіштерге логикалық атаулар беру үшін кейбір анықтамалар бар. Әзірге ерекше ештеңе жоқ.

4 -қадам: Бағдарламалау. Негізгі цикл

Бағдарламалау. Негізгі цикл
Бағдарламалау. Негізгі цикл

Содан кейін негізгі процедураның не екенін білу үшін соңына қарайық.

Кейбір инициализациядан кейін негізгі функция мәңгілік циклде қалады. Бұл циклде ол келесі қадамдарды жасайды:

  • Сол жақ жарық диоды үшін протекторлы жұмыс тәртібін шақырады. Ол кейбір түйреуіштердің кернеуін өзгертеді.
  • Екі миллисекундқа кешіктіру. Ілмек кернеуінде өзгеріс жоқ.
  • Оң жақ жарық диодты протоколды шақырады. Ол кейбір істік кернеуді өзгертеді.
  • 2 MS кідірісін жасаңыз. Ілмек кернеуінде өзгеріс жоқ.

5 -қадам: Бағдарламалау. Көмекші функциялар

Бағдарламалау. Көмекші функциялар
Бағдарламалау. Көмекші функциялар

Прототехниканы талқылауды бастамас бұрын кейбір көмекші функцияларды қарастыру қажет. Алдымен белгілі бір түсті орнату функциялары бар. Олар тікелей. Қолдау көрсетілетін түстер саны (жеті) және жарық диодты қою қоюға арналған тағы бір функция (NoColor) сияқты көптеген функциялар бар.

Және тағы бір функция бар, ол тікелей прототехникалық жүйемен шақырылады. Оның аты DoAndCountdown ().

Техникалық тұрғыдан алғанда, мұндай функцияны қолдану міндетті емес, бірақ мен оны ыңғайлы деп таптым. Оның үш аргументі бар:

  • Жарықдиодты түс функциясын көрсететін көрсеткіш (мысалы, RedColor немесе GreenColor немесе т.б.)
  • Кері есептегіштің бастапқы мәні: протектордың белгілі бір кезеңінде бұл функция қанша рет шақырылуы керек.
  • Кері есептегіштің көрсеткіші. Түсті өзгерту кезінде кері есептегіш 0 -ге тең деп есептеледі, сондықтан бастапқыда қайталау коды сол санауышқа бастапқы мәнді береді. Әр қайталаудан кейін есептегіш азаяды.

DoAndCountdown () функциясы кері санауыштың мәнін қайтарады.

6 -қадам: Бағдарламалау. Прототекторлық тәртіптер

Бағдарламалау. Прототекторлық тәртіптер
Бағдарламалау. Прототекторлық тәртіптер

Міне, бұл негіздің негізі: протоколды өңдеу тәртібі. Мысал қарапайымдылық үшін тек үш қадаммен шектеледі: түстерді ҚЫЗЫЛға, Жасылға және КӨКке өзгерту үшін.

Функция екі дәлелмен шақырылады:

  • Протоколдың құрылымына көрсеткіш. Бұл құрылым негізгі цикл басталмай тұрып main арқылы инициализацияланды.
  • Кері есептегіштің көрсеткіші. Негізгі цикл басталмай тұрып, ол 0 мәніне орнатылды.

Функция кернеулерді сол жақ жарық диодты белсенді ету үшін орнатады, содан кейін протекторлы сегментті бастайды. Бұл сегмент PT_BEGIN мен PT_END макростарының арасында. Ішінде біздің жағдайда тек PT_WAIT_UNTIL макростарын қайталайтын код бар. Бұл макростар келесі әрекеттерді орындайды:

  • DoAndCountdown функциясын шақыру. Бұл жарықдиодты катодтардың кернеуін белгілі бір түс шығару үшін орнатады.
  • 0 -мен салыстырғанда нәтиже қайтарылды. Егер шарт «жалған» болса, протекторлық функция бірден қайтарылады және басқаруды негізгі циклге береді.
  • Келесі жолы прототека шақырылғанда, ол PT_BEGIN алдында кодты қайтадан орындайды, содан кейін ол соңғы рет қайтарылған PT_WAIT_UNTIL макростарының ішіне тікелей секіреді.
  • Мұндай әрекеттер DoAndCountdown нәтижесі 0 болғанша қайталанады. Бұл жағдайда қайтару болмайды, бағдарлама протекторда қалады және кодтың келесі жолын орындайды. Біздің жағдайда бұл келесі PT_WAIT_UNTIL, бірақ жалпы айтқанда бұл кез келген С коды болуы мүмкін.
  • Екінші PT_WAIT_UNTIL кері есептегішті бастапқы орындау кезінде 0 болады, сондықтан DoAndCountdown () процедурасы оны бастапқы мәнге орнатады. Екінші макростар кері есептегіш 0 -ге жеткенше 250 рет орындалады.
  • PT_ құрылымының күйі басқару PT_END макростарына жеткенде қалпына келтіріледі. Келесі жолы прототека функциясы шақырылғанда, протоколдың сегменті кодтың жолын PT_BEGIN кейін бірден орындайды.

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

7 -қадам: ішкі

Ішкі
Ішкі

Толық бағдарлама 200 жолдан аз (түсініктемелер мен бос жолдармен) және Attiny85 кодтық жадының 20% -дан азын алады. Қажет болса, мұнда тағы бірнеше протекторлық процедураларды қолдануға және оларға әлдеқайда күрделі логиканы тағайындауға болады.

Protothreads кітапханасы - бір мезгілде компьютерлік бағдарламалаудың қарапайым түрі. Бір мезгілде бағдарламалау - бұл бағдарламаны логикалық бөліктерге бөлуге мүмкіндік беретін тәсіл: кейде оларды корутиндер, кейде ағындар, кейде тапсырмалар деп атайды. Принципі - әрбір осындай тапсырма кодты көп немесе аз сызықты және басқа бөліктерге тәуелсіз сақтай отырып, процессордың бір қуатын бөлісе алады. Тапсырмалар логикалық тұрғыдан бір уақытта орындалуы мүмкін.

Жетілдірілген жүйелер үшін мұндай тапсырмаларды операциялық жүйенің ядросы немесе компилятор орындауға енгізілген тілдік жұмыс уақыты арқылы басқарады. Прототындар болған жағдайда, бағдарламашы бағдарламалық қамтамасыздандыруды қолмен басқарады, протоколды макростар кітапханасын тапсырмалар мен мұндай процедураларды шақыру (әдетте негізгі циклден тыс).

Сіз прототектор шынымен қалай жұмыс істейтінін білгіңіз келе ме? Сиқыр қайда жасырылған? Протоколдар C тілінің арнайы мүмкіндігіне сүйенеді: C коммутаторының регистрі if немесе басқа блокқа енгізілуі мүмкін (мысалы, while немесе for). Толық ақпаратты Адам Дюнкельс сайтынан таба аласыз

Бұл жобаның электроника интерьері өте қарапайым. Жоғарыдағы фотосурет сізге біраз түсінік береді. Сіз жақсырақ жасай алатыныңызға сенімдімін.

Ұсынылған: