Как да свържете преместващ регистър 74HC595 към Arduino

В една от предишните статии вече накратко засегнахме използването на регистър за смяна, по-специално 74HC595. Нека да разгледаме по-подробно възможностите и процедурата за работа с този чип.

Ще ни трябва:

  • Arduino UNO или друга съвместима платка;
  • смяна регистър 74HC595;
  • свързващи проводници (например, ето такъв комплект);
  • дъска за хляб;
  • логически анализатор (по избор);
  • персонален компютър със среда за разработка Arduino IDE.

1 Описание и предназначение на регистъра за смяна 74HC595

Регистърът за преместване 74HC595 и подобни се използват като серийно-паралелни преобразуватели и могат да се използват и като "резе" за данни, поддържащи дадено състояние.

pinout ("pinout") е показан на фигурата вляво.

регистър
74HC595 Разпределение на щифтовете на регистъра за смяна и външен вид в изходен пакет DIP-16

Разпределението на щифтовете на чипа 74HC595 е както следва.

Обозначение на терминал Цел
Q0…Q7паралелни изходи на данни;
GNDземя (0 V);
Q7'сериен изход на данни;
Г-Носновно нулиране (активен нисък);
SHCPвход за часовник в регистъра за смяна;
STCPвъвеждане на тактови импулси "резе";
OEизходна резолюция (активна ниска);
Д.С.серийно въвеждане на данни;
VCCзахранване +5 V.

Структурно, микросхемата се изпълнява в няколко вида кутии; Ще използвам чип в изходен пакет DIP-16, т.к неговиятпо-лесен за използване с breadboard.

2 Кратко описание на SPI интерфейса

Позволете ми да ви напомня накратко за SPI серийния интерфейс, който ще използваме за прехвърляне на данни към регистъра за смяна. SPI е четирипроводен, двупосочен сериен интерфейс, който включва главен и подчинен. В нашия случай Arduino ще бъде главният, регистърът 74HC595 ще бъде подчинен.

Средата за разработка на Arduino има вградена библиотека за работа по SPI интерфейса. Той използва цифрови пинове 10 до 13 на платките Arduino Uno и Arduino Nano; те също се дублират и се извеждат към отделен ICSP конектор:

свържете
Arduino SPI щифтовеОбозначение на терминал Цел
SCLKSPI тактов изход;
MOSIданни от master към slave;
MISOданни от slave към master;
ССизбор на роб.

3 Свързване на преместващия регистър 74HC595 към Arduino

Нека сглобим веригата, която е показана на фигурата.

Arduino
Схема на свързване за 74HC595 преместващ регистър към Arduino

Също така ще свържа логически анализатор към всички щифтове на чипа на регистъра за смяна. С него ще видим какво се случва на физическо ниво, какви сигнали къде отиват и ще разберем какво означават те. Получих го както е показано на снимката.

свържете
Свързване на Shift Register 74HC595 към Arduino

4 Тестова скица за изследване на работата на преместващия регистър

Нека да напишем такава скица и да я заредим в паметта на Arduino. Тук ще преминем през две числа - 210 и 0 - в регистъра за смяна с малки интервали от време между тях. Да, самоОбща сума.

ПроменливатаPIN_SPI_SSе вътрешна стандартна константа, която съответства на пин "10" на Arduino, когато го използваме като главен на SPI интерфейса, който използваме тук.

По принцип бихме могли да използваме всеки друг цифров щифт на Arduino; тогава ще трябва да го декларирате и не забравяйте да зададете режима на работа - OUTPUT.

Прилагайки LOW към този щифт, ние активираме нашия регистър за изместване за приемане / предаване. След прехвърлянето отново повишаваме напрежението до HIGH и обменът приключва. Да пуснем схемата в действие и да видим какво показва логическият анализатор.

5 Времева диаграма на чипа 74HC595

Общ изглед на времедиаграмата - на фигурата. Синята пунктирана линия показва 4 SPI линии, червената пунктирана линия показва 8 канала данни от паралелни регистри за преместване. ТочкаAна времевата скала е моментът на прехвърляне на числото "210" в регистъра за смяна,Bе моментът на запис на числото "0",Cе краят на текущата итерация на цикъла и началото на нов.

свържете
74HC595 времева диаграма

Както можете да видите, от A до B - 10,03 милисекунди, а от B до C - 90,12 милисекунди, почти колкото поискахме в скицата. Малка добавка от 0,03 и 0,12 ms е времето за серийно предаване на данни от Arduino, така че тук нямаме точно 10 и 90 ms.

Нека разгледаме по-подробно раздел А.

Обърнете внимание на времевата скала. Сега са микросекунди, докато предишните бяха милисекунди. Тоест, това е много увеличена площ в сравнение с първата диаграма.

преместващ
Схема на предаване на номер "11010010" чрез SPI

В първия канал отгоре - дълъг импулс с нулево ниво, с който Arduino инициализира трансфера по линиятаSPI - ENABLE- избор на slave. По това време започватгенерират се тактови импулсиSPI - CLOCK(вижте втория канал отгоре). За прехвърляне на един байт се генерират 8 тактови импулса.

Третият канал отгоре еSPI - MOSI- данните, които прехвърляме от Arduino към регистъра за смяна. Това е нашето число "210" в двоична система - "1101 0010".

След като прехвърлянето приключи, линиятаSPI - ENABLEсе издига до високо състояние и виждаме, че регистърът за смяна е задал стойността "1101 0010" на своите 8 крака. Маркирах това със синя пунктирана линия и отбелязах стойностите за яснота.

Сега нека разгледаме зона B.

преместващ
Диаграма на предаване на числото "00000000" през SPI

Отново всичко започва с избора на slave и генерирането на 8 тактови импулси (първият и вторият канал отгоре). Данните на линияSPI - MOSIвече са "0000 0000" (3-ти канал отгоре). Тоест записваме числото "0" в регистъра в този момент. Но докато прехвърлянето не приключи, стойността "1101 0010", която сме задали по-рано, все още се съхранява в регистъра. Извежда се към паралелни изходи Q0..Q7 (8 долни канала на фигурата), а също така, при наличие на тактови импулси в линиятаSPI - CLOCK, се извежда към линиятаSPI - MISO(вижте 4-тия канал отгоре) от серийния изход на регистъра Q7', който виждаме тук.

6 Свързване на множество регистри за преместване към Arduino

Ако свържете няколко регистъра за смяна по такъв начин, че CLOCK (SCLK на фигурата по-долу), линиите MOSI и MISO да са общи и ENABLE (SS на фигурата) на всеки чип е свързан към различни цифрови щифтове на Arduino, тогава можете независимо да получите достъп до всеки от регистрите за смяна, като активирате съответния ниски, и да записвате данни и да четете данни от тях. Такава връзка се наричанезависим.

свържете
Независими и каскадни типове SPI връзки

Независимото свързване на SPI подчинени устройства (например регистри 74HC595) към главния (например Arduino) е показано от лявата страна на фигурата. Мисля, че това вече е достатъчно просто за нас, тъй като почти не се различава от свързването на един регистър за смяна. Затова нека да разгледаме друг тип връзка - каскада.

7 каскадни регистри за преместване към Arduino

По този начин проучихме подробно въпроса за обмена на информация между главното устройство, което беше Arduino, и регистъра за смяна 74HC595. Научихме как да свързваме регистър за смяна, да записваме данни в него и да четем данни от него.