На први поглед код Ардуино УНО микроконтролера (μконтролера) може да се закључи да је број дигиталних пинова недовољан за неки озбиљнији пројекат. Ардуино Мега нуди 54 дигиталних пинова, па можете размотрити набавку таквог микроконтролера. Друго решење које омогућава повећање броја пинова је коришћење померачких регистара. У овом случају биће речи о померачком регистру 74HC595. Како се ово постиже, како ради један померачки регистар и како га користити са Ардуино УНО μконтролером је тема овог видео туторијала и текста.
Видео туторијал
Како ради померачки регистар (shift register) – 74HC595
74HC595 померачки регистар ради на принципу серијског (редног) улаза и паралелног излаза. Ово практично значи да се подаци са микроконтролера примају бит по бит, док се на излазу подаци шаљу паралелно (од једном) преко 8 паралелних пинова. Можемо повећати излазне пинове за 8 користећи један чип. Могуће је повезати више оваквих померачких регистара и то тако што се пин Q7 повеже на DATA пин наредног померачког регистра.
Распоред пинова
DS (DATA) – подаци се шаљу интегрисаном колу импулсима високог и ниског напона уз синхронизацију тактног сигнала (CLOCK).
CLOCK – то је конзистентан високи и ниски сигнал са фиксном фреквенцијом који ради као померач података за регистре.
LATCH (RCLK) – освежава излаз са интегрисаног кола чак и ако је још увек у току пријем података. Неће приказати излаз све док је стање овог пина ниско.
Опис пројекта
Задатак овог пројекта је креирање бинарног бројача помоћу ЛЕД диода (8 их је потребно за пројекат) уз помоћ померачког регистра. Бинарни бројач је реализован помоћу померачког регистра како би се смањио број искоришћених дигиталних пинова Ардуино УНО μконтролера, односно како би се повећао број доступних пинова μконтролера. Главни циљ је схватање принципа рада и начина употребе померачког регистра!
Потребне компоненте
Електрична шема
Скица
// HC595 int CLOCK = 12; int LATCH = 11; int DATA = 10; int counter = 1; //podesavanje pinova kao izlaznih kako bi se kontrolisao registar //setting pins as output to control the register void setup(){ pinMode(LATCH, OUTPUT); pinMode(CLOCK, OUTPUT); pinMode(DATA, OUTPUT); } void loop() { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, MSBFIRST, counter); digitalWrite(LATCH, HIGH); delay(500); counter++; if (counter >= 256) counter=1; }
Објашњење скице
Одељак дефиниција
Дефинишу се променљиве CLOCK, LATCH и DATA са вредностима 12, 11 и 10 (редом). Имена променљивих представљају пинове на интегрисаном колу на који ће Ардуино УНО бити повезан, а њихове вредности представљају дигиталне пинове Ардуина. Променљива counter представља бројач чија је почетна вредност 1.
Одељак конфигурације
Пинови CLOCK, LATCH и DATA (12,11 и 10) се дефинишу као излазни помоћу којих се конктролише сам померачки регистар. CLOCK представља такт пин регистра, LATCH је пин којим (када је активан) приказујемо податке смештене у регистар на изназне пинове. DATA пин је онај којим шаљемо податке бит по бит и смештамо у регистар.
Одељак петље
digitalWrite(LATCH, LOW);
Поставља се пин LATCH (11) на логичку 0, чиме се искључују излазни пинови регистра, па на излазу нема никаквог сигнала;
shiftOut(DATA, CLOCK, MSBFIRST, counter);
Овом функцијом се уписује један бит са пина DATA (10) у померачки регистар са тактом CLOCK (12) редом дефинисаним трећим параметром MSBFIRST док је последњи параметар податак који се уписује у регистар – counter.
digitalWrite(LATCH, HIGH);
Поставља се пин LATCH (11) на логичку 1, чиме се омогућава приказ података на излазне пинови регистра;
counter++;
Повећава се вредност бројача.
if (counter >= 256) counter=1;
Уколико је вредност бројача већа или једнака од 256, онда се његова вредност поставља на 1 (бројач поново креће да броји од броја 1).
Детаљније објашњење функције shiftOut
Преноси 1 бајт података бит по бит. Циклус почиње битом највеће или најмање тежине. Након сваког окидања тактног пина (CLOCK) на DATA пин се уписује 1 бит податка.
Синтакса: shiftOut(dataPin, clockPin, bitOrder, value)
Параметри:
dataPin – пин на који се шаље сваки бит (дозвољени тип података int)
clockPin – пин за окидање када је на dataPin доведена исправна вредност (дозвољени тип података int)
bitOrder – ред којим се битови шаљу; могуће вредности MSBFIRST или LSBFIRST (бит највеће или бит најмање тежине)
value – податак који шаљемо на померачки регистар (дозвољена вредност byte)
Повратна вредност – Нема!