- Шта је ТИМЕР у уграђеној електроници?
- Регистри Ардуино тајмера
- Прекиди Ардуино тајмера
- Компоненте потребне
- Кружни дијаграм
- Програмирање Ардуино УНО тајмера
Ардуино развојна платформа првобитно је развијена 2005. године као програм за програмирање који се лако користи за уметничке дизајнерске пројекте. Намера му је била да помогне неинжењерима у раду са основном електроником и микроконтролерима без много знања о програмирању. Али, због своје једноставне природе, убрзо су је прилагодили почетници електронике и хобисти широм света, а данас је чак пожељна за развој прототипа и развој ПОЦ.
Иако је у реду започети са Ардуином, важно је полако прећи на основне микроконтролере попут АВР, АРМ, ПИЦ, СТМ итд. И програмирати га помоћу њихових матичних апликација. То је зато што је језик за програмирање Ардуино врло једноставан за разумевање јер се већина посла обавља унапред уграђеним функцијама попут дигиталВрите (), АналогВрите (), Делаи () итд., Док је иза њих скривен машински језик ниског нивоа. Ардуино програми нису слични осталим уграђеним Ц кодирањима где се бавимо регистрационим битовима и чинимо их високим или ниским на основу логике нашег програма.
Ардуино тајмери без одлагања:
Отуда, да бисмо разумели шта се дешава у унапред изграђеним функцијама, морамо копати иза ових термина. На пример, када се користи функција делаи (), она заправо поставља битове регистра тајмера и бројача микроконтролера АТмега.
У овом упутству за ардуино тајмер избећи ћемо употребу ове функције делаи () и уместо тога се позабавити самим регистрима. Добра ствар је што за ово можете користити исти Ардуино ИДЕ. Поставићемо своје битове регистра Тимер-а и користити Тимер Оверфлов Интеррупт за пребацивање ЛЕД диоде сваки пут када дође до прекида. Вредност унапред учитавача бита Тајмер такође се може подесити помоћу тастера за контролу трајања у којем долази до прекида.
Шта је ТИМЕР у уграђеној електроници?
Тајмер је врста прекида. То је попут једноставног сата који може да мери временски интервал догађаја. Сваки микроконтролер има сат (осцилатор), рецимо да у Ардуино Уно износи 16 МХз. Ово је одговорно за брзину. Што је већа тактна фреквенција, већа ће бити брзина обраде. Тајмер користи бројач који броји одређеном брзином у зависности од фреквенције такта. У Ардуино Уно-у је потребно 1/16000000 секунди или 62нано секунди да бисте направили један број. Што значи да се Ардуино премешта из једне инструкције у другу током сваке 62 нано секунде.
Тајмери у Ардуино УНО:
У Ардуино УНО постоје три тајмера која се користе за различите функције.
Тимер0:
То је 8-битни тајмер и користи се у функцији тајмера као што су делаи (), милис ().
Тимер1:
То је 16-битни тајмер и користи се у серво библиотеци.
Тимер2:
То је 8-битни тајмер и користи се у функцији тоне ().
Регистри Ардуино тајмера
Да би се променила конфигурација тајмера, користе се регистри тајмера.
1. Регистри тајмера / бројача (ТЦЦРнА / Б):
Овај регистар садржи главне контролне битове тајмера и користи се за контролу предкалирача тајмера. Такође омогућава контролу режима тајмера помоћу ВГМ битова.
Формат оквира:
ТЦЦР1А | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ЦОМ1А1 | ЦОМ1А0 | ЦОМ1Б1 | ЦОМ1Б0 | ЦОМ1Ц1 | ЦОМ1Ц0 | ВГМ11 | ВГМ10 |
ТЦЦР1Б | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ИЦНЦ1 | ИЦЕС1 | - | ВГМ13 | ВГМ12 | ЦС12 | ЦС11 | ЦС10 |
Пресцалер:
Битови ЦС12, ЦС11, ЦС10 у ТЦЦР1Б постављају вредност предскалера. Предскалер се користи за подешавање такта тајмера. Ардуино Уно има предкалере од 1, 8, 64, 256, 1024.
ЦС12 | ЦС11 | ЦС10 | УСЕ |
0 | 0 | 0 | Нема тајмера СТОП |
0 | 0 | 1 | ЦЛЦК и / о / 1 Нема прескалирања |
0 | 1 | 0 | ЦЛК и / о / 8 (из Пресцалера) |
0 | 1 | 1 | ЦЛК и / о / 64 (из система за предскалирање) |
1 | 0 | 0 | ЦЛК и / о / 256 (из система за предскалирање) |
1 | 0 | 1 | ЦЛК и / о / 1024 (из система за уклањање скала) |
1 | 1 | 0 | Спољни извор сата на Т1 пину. Сат на падајућој ивици |
1 | 1 | 1 | Спољни извор сата на Т1 пину. Сат на растућој ивици. |
2. Тајмер / бројач (ТЦНТн)
Овај регистар се користи за контролу бројача и за подешавање вредности предоптерећивача.
Формула за вредност предоптерећивача за потребно време у секунди:
ТЦНТн = 65535 - (16к10 10 кТиме ин сец / Пресцалер Валуе)
Да бисте израчунали вредност предоптерећивача за тимер1 за време од 2 сек:
ТЦНТ1 = 65535 - (16к10 10 к2 / 1024) = 34285
Прекиди Ардуино тајмера
Претходно смо сазнали за Ардуино Интеррупције и видели смо да су Тимер интеррупције врста софтверских интерптура. У Ардуину постоје различити тајмер прекиди који су објашњени у наставку.Прекид преливања тајмера:
Кад год тајмер достигне своју максималну вредност, рецимо на пример (16 Бит-65535), јавља се прекид преливања тајмера . Дакле, позива се рутина услуге ИСР прекида када је бит прекида прекидања тајмера омогућен у ТОИЕку који је присутан у регистру маске прекида тајмера ТИМСКк.
ИСР формат:
ИСР (ТИМЕРк_ОВФ_вецт) { }
Излазни регистар за упоређивање (ОЦРнА / Б):
Овде када се догоди прекид подударања резултата излаза тада се позива услуга прекида ИСР (ТИМЕРк_ЦОМПи_вецт), а такође ће бити постављен и ОЦФки бит заставице у ТИФРк регистру. Овај ИСР је омогућен постављањем бита за омогућавање у ОЦИЕки присутном у регистру ТИМСКк. Где је ТИМСКк регистар маски прекида прекидача.
Хватање уноса тајмера:
Следеће када се догоди прекид уноса хватања тајмера тада се позива услуга прекида ИСР (ТИМЕРк_ЦАПТ_вецт) и такође ће бити постављен бит заставице ИЦФк у ТИФРк (регистар заставица прекида). Овај ИСР је омогућен постављањем бита за омогућавање у ИЦИЕк који је присутан у регистру ТИМСКк.
Компоненте потребне
- Ардуино УНО
- Тастери (2)
- ЛЕД (било која боја)
- Отпорник 10к (2), 2,2к (1)
- ЛЦД екран од 16к2
Кружни дијаграм
Кружне везе између Ардуино УНО и ЛЦД дисплеја 16к2:
ЛЦД 16к2 |
Ардуино УНО |
ВСС |
ГНД |
ВДД |
+ 5В |
В0 |
На средишњи пин потенциометра за контролу контраста ЛЦД-а |
РС |
8 |
РВ |
ГНД |
Е. |
9 |
Д4 |
10 |
Д5 |
11 |
Д6 |
12 |
Д7 |
13 |
А. |
+ 5В |
К. |
ГНД |
Два тастера са спуштајућим отпорницима од 10К повезана су са Ардуино пиновима 2 и 4, а ЛЕД диода је повезана са ПИН-ом 7 Ардуино-а преко 2.2К отпорника.
Подешавање ће изгледати као на слици испод.
Програмирање Ардуино УНО тајмера
У овом упутству ћемо користити ТИМЕР ОВЕРФЛОВ ИНТЕРРУПТ и помоћу њега ћемо трептати ЛЕД УКЉУЧЕНО и ИСКЉУЧЕНО током одређеног времена подешавањем вредности предоптерећивача (ТЦНТ1) помоћу тастера. Комплетни код за Ардуино тимер дат је на крају. Овде објашњавамо код ред по ред:
Како се 16к2 ЛЦД користи у пројекту за приказ вредности пред-учитавача, тако се користи и библиотека са течним кристалима.
#инцлуде
ЛЕД анодни пин који је повезан са Ардуино пин 7 дефинисан је као ледПин .
#дефине ледПин 7
Даље се објекат за приступ класи Ликуид Цристал декларише са ЛЦД пиновима (РС, Е, Д4, Д5, Д6, Д7) који су повезани са Ардуино УНО.
ЛикуидЦристал лцд (8,9,10,11,12,13);
Затим поставите вредност пред-учитавача 3035 на 4 секунде. Проверите горњу формулу да бисте израчунали вредност предоптерећивача.
флоат вредност = 3035;
Следеће у воид сетуп (), прво подесите ЛЦД у режим 16к2 и на неколико секунди прикажите поруку добродошлице.
лцд.бегин (16,2); лцд.сетЦурсор (0,0); лцд.принт ("АРДУИНО ТИМЕРС"); кашњење (2000); лцд.цлеар ();
Даље поставите ЛЕД пин као ОУТПУТ пин, а тастери су постављени као ИНПУТ пин
пинМоде (ледПин, ОУТПУТ); пинМоде (2, ИНПУТ); пинМоде (4, ИНПУТ);
Следеће онемогућите све прекиде:
ноИнтерруптс ();
Следеће је тајмер1 иницијализован.
ТЦЦР1А = 0; ТЦЦР1Б = 0;
Постављена је вредност тајмера предоптерећивача (у почетку 3035).
ТЦНТ1 = вредност;
Тада се у регистру ТЦЦР1Б подешава вредност 1024 скала.
ТЦЦР1Б - = (1 << ЦС10) - (1 << ЦС12);
Прекид преливања тајмера је омогућен у регистру маске прекида тајмера тако да се ИСР може користити.
ТИМСК1 - = (1 << ТОИЕ1);
Напокон су омогућени сви прекиди.
прекида ();
Сада напишите ИСР за Тимер Оверфлов Интеррупт који је одговоран за УКЉУЧИВАЊЕ И ИСКЉУЧИВАЊЕ ЛЕД-а помоћу дигиталВрите . Стање се мења кад год дође до прекида преливања тајмера.
ИСР (ТИМЕР1_ОВФ_вецт) { ТЦНТ1 = вредност; дигиталВрите (ледПин, дигиталРеад (ледПин) ^ 1); }
У воид лооп () вредност предоптерећивача се увећава или смањује помоћу улаза са дугметом, а такође се приказује и на ЛЦД екрану од 16к2.
иф (дигиталРеад (2) == ХИГХ) { вредност = вредност + 10; // Вредност предоптерећења подстицања } иф (дигиталРеад (4) == ХИГХ) { валуе = валуе-10; // Умањи вредност предоптерећења } лцд.сетЦурсор (0,0); лцд.принт (вредност); }
Дакле, тако се тајмер може користити за кашњење у програму Ардуино. Погледајте доњи видео снимак где смо показали промену кашњења повећавањем и смањивањем вредности предоптерећивача помоћу тастера.