Как да свържете преместващ регистър 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 щифтовеSCLK | SPI тактов изход; |
MOSI | данни от master към slave; |
MISO | данни от slave към master; |
СС | избор на роб. |
3 Свързване на преместващия регистър 74HC595 към Arduino
Нека сглобим веригата, която е показана на фигурата.
Схема на свързване за 74HC595 преместващ регистър към ArduinoСъщо така ще свържа логически анализатор към всички щифтове на чипа на регистъра за смяна. С него ще видим какво се случва на физическо ниво, какви сигнали къде отиват и ще разберем какво означават те. Получих го както е показано на снимката.
Свързване на Shift Register 74HC595 към Arduino4 Тестова скица за изследване на работата на преместващия регистър
Нека да напишем такава скица и да я заредим в паметта на 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. Научихме как да свързваме регистър за смяна, да записваме данни в него и да четем данни от него.