В една от предишните статии вече накратко засегнахме използването на регистър за смяна, по-специално 74HC595. Нека разгледаме по-отблизо възможностите и процедурата за работа с тази микросхема.
Необходимо
- - Arduino;
- - регистър за смяна 74HC595;
- - свързващи проводници.
Инструкции
Етап 1
Shift регистър 74HC595 и други подобни се използват като устройства за преобразуване на серийни данни в паралелни и могат да се използват и като "резе" за данни, задържащи прехвърленото състояние.
Пинът (pinout) е показан на фигурата вляво. Целта им е следната.
Q0 … Q7 - паралелни изходи за данни;
GND - земя (0 V);
Q7 '- сериен изход на данни;
^ MR - нулиране на главен (активен нисък);
SHcp - вход за часовник на регистър на смяна;
STcp - импулсен вход за тактова честота "резе";
^ OE - активиране на изхода (активно ниско);
Ds - последователно въвеждане на данни;
Vcc - захранване +5 V.
Структурно микросхемата е направена в няколко вида случаи; Ще използвам показаната на фигурата вдясно - изхода - защото по-лесно е да се използва с макет.
Стъпка 2
Позволете ми накратко да си припомня серийния интерфейс SPI, който ще използваме за прехвърляне на данни към регистъра за смяна.
SPI е двупроводен двупосочен сериен интерфейс, в който участват главен и подчинен. Главният в нашия случай ще бъде Arduino, подчиненият ще бъде регистриран 74HC595.
Средата за разработка на Arduino има вградена библиотека за работа по интерфейса SPI. При прилагането му се използват заключенията, отбелязани на фигурата:
SCLK - изход на часовника SPI;
MOSI - данни от главен на подчинен;
MISO - данни от подчинен на главен;
SS - избор на роб.
Стъпка 3
Нека да съберем веригата, както е на снимката.
Също така ще свържа логически анализатор към всички изводи на микросхемата на регистъра за смяна. С него ще видим какво се случва на физическо ниво, какви сигнали къде отиват и ще разберем какво означават те. Трябва да изглежда нещо като снимката.
Стъпка 4
Нека напишем скица като тази и я заредим в паметта на Arduino.
Променливата PIN_SPI_SS е вътрешна стандартна константа, която съответства на щифт "10" на Arduino, когато се използва като главен интерфейс SPI, който използваме тук. По принцип бихме могли също така да използваме всеки друг цифров щифт на Arduino; тогава ще трябва да го декларираме и да зададем режима му на работа.
Чрез подаване на този щифт LOW, ние активираме нашия регистър за смяна за предаване / приемане. След предаването отново вдигаме напрежението до HIGH и обмяната приключва.
Стъпка 5
Нека превърнем нашата схема в работа и да видим какво ни показва логическият анализатор. Общият изглед на времевата диаграма е показан на фигурата.
Синята пунктирана линия показва 4 SPI линии, червената пунктирана линия показва 8 канала успоредни данни на регистъра на смяната.
Точка А на времевата скала е моментът, когато числото "210" се прехвърля в регистъра за смяна, В е моментът, когато се записва числото "0", С е цикълът, повтарящ се от началото.
Както можете да видите, от А до Б - 10,03 милисекунди и от Б до В - 90,12 милисекунди, почти както поискахме в скицата. Малко добавяне в 0, 03 и 0, 12 ms е времето за прехвърляне на серийни данни от Arduino, така че тук нямаме точно 10 и 90 ms.
Стъпка 6
Нека разгледаме по-отблизо раздел А.
В самия връх има дълъг импулс, с който Arduino инициира предаване по линията SPI-ENABLE - подбор на подчинени. По това време започват да се генерират тактови импулси SPI-CLOCK (втори ред отгоре), 8 броя (за прехвърляне на 1 байт).
Следващият ред отгоре е SPI-MOSI - данните, които прехвърляме от Arduino към регистъра за смяна. Това е нашето число "210" в двоично - "11010010".
След приключване на трансфера, в края на импулса SPI-ENABLE, виждаме, че регистърът за смяна е задал същата стойност на своите 8 крака. Подчертах това със синя пунктирана линия и обозначих стойностите за яснота.
Стъпка 7
Сега нека насочим вниманието си към раздел Б.
Отново всичко започва с избиране на роб и генериране на 8 тактови импулса.
Данните по линията SPI-MOSI вече са "0". Тоест в този момент ние записваме числото „0“в регистъра.
Но докато прехвърлянето завърши, регистърът съхранява стойността "11010010". Той се извежда към паралелните щифтове Q0.. Q7 и се извежда, когато има тактови импулси в линията от паралелния изход Q7 'към линията SPI-MISO, която виждаме тук.
Стъпка 8
По този начин проучихме подробно въпроса за обмена на информация между главното устройство, което беше Arduino, и регистъра за смяна 74HC595. Научихме как да свързваме регистър за смяна, да записваме данни в него и да четем данни от него.