Съдържание:

Регистърът за смяна на 74HC164 и вашето Arduino: 9 стъпки
Регистърът за смяна на 74HC164 и вашето Arduino: 9 стъпки

Видео: Регистърът за смяна на 74HC164 и вашето Arduino: 9 стъпки

Видео: Регистърът за смяна на 74HC164 и вашето Arduino: 9 стъпки
Видео: Свършвам бързо! Как да правя секс по-дълго? 2024, Ноември
Anonim
Регистърът за смяна на 74HC164 и вашето Arduino
Регистърът за смяна на 74HC164 и вашето Arduino
Регистърът за смяна на 74HC164 и вашето Arduino
Регистърът за смяна на 74HC164 и вашето Arduino

Регистрите за смяна са много важна част от цифровата логика, те действат като лепило между паралелния и серийния свят. Те намаляват броя на проводниците, използването на щифтове и дори помагат да се свали натоварването от процесора ви, като могат да съхраняват техните данни. Те се предлагат в различни размери, с различни модели за различни приложения и различни функции. Този, който ще обсъждам днес, е 74HC164 8 -битов, сериен паралелно изход, без заключване, регистър за смяна. Е, за един, това е един от най -основните регистри за смяна там, което прави изучаването по -лесно, но случайно се оказа единственият, който имах (хаха!) Тази инструкция обхваща как работи този чип, как да го свържа, и го свържете с arduino, включително някои примерни скици и светодиодни схеми. Надявам се всички да ви харесат!

Стъпка 1: И така, какво представляват регистрите за смяна?

И така, какво представляват регистрите за смяна?
И така, какво представляват регистрите за смяна?

Както бе споменато по -рано, те се предлагат във всички различни вкусове, а също така споменах, че използвам 74HC164 8 -битов, сериен паралелен изход, без заключване, регистър на смяна, така че какво означава всичко това?!? Първо, името 74-означава неговата част от семейство 74xx логика и тъй като неговата логика не може директно да контролира много ток (16-20ma за целия чип е често срещано), то само предава сигнали наоколо, но това не означава този сигнал не отива към транзистор, който може да превключи по -висок ток натоварване. HC означава, че е високоскоростно cmos устройство, можете да прочетете за това на връзката по -долу, но това, което основно трябва да знаете за това, е, че е ниско захранващо устройство и ще работи от 2 до 5 волта (така че ако използвате 3,3 волта arduino, всичко е наред) Също така може да работи правилно при високи скорости, този конкретен чип има типична скорост от 78 mhz, но можете да вървите толкова бавно или толкова бързо (докато не започне да се изкривява) както искате www.kpsec.freeuk.com/components/74series.htm164 е номерът на модела за този чип, има голяма тяхна диаграма на wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits Следваща, 8 бита Регистърът за смяна се състои от тригери, джапанката е 1 бит памет, тази ха s 8 (или 1 байт памет). Тъй като това е памет, ако не е необходимо да актуализирате регистъра, можете просто да спрете да "говорите" с него и той ще остане в каквото състояние сте го оставили, докато не "говорите" отново с него или не нулирате захранването. други регистри за смяна на логическа серия от 7400 могат да се издигат до 16 -битов сериен паралелен изход Това означава, че вашият arduino му изпраща данни последователно (при изключени импулси един след друг) и регистърът за смяна поставя всеки бит на правилния изходен щифт. Този модел изисква само 2 проводника да бъдат контролирани, така че можете да използвате 2 цифрови извода на arduino и да прекъснете тези 2 до още 8 цифрови изхода, някои други модели са паралелни в сериен изход, те правят същото, но като входове към arduino (например геймпад на NES) без блокировка Това може да е провал на този чип, ако имате нужда от него. Тъй като данните влизат в регистър за смяна чрез сериен код, те се показват на първия изходен щифт, когато влиза тактов импулс, първият бит се измества над 1 място, създавайки ефект на превъртане на изходите, например 00000001 ще се появи на изходите като 101001000100001000001000000100000001 Ако говорите с други логически устройства, които споделят същия часовник и не очакват това, това може да причини проблеми. Заключените регистри за смяна имат допълнителен набор от памет, така че след като данните са въведени в регистъра, можете да завъртите превключвател и да покажете изходите, но той добавя още един проводник, софтуер и неща, с които да бъдете в крак. контролираме LED дисплеи, ефектът на превъртане се случва толкова бързо, че не можете да го видите (освен когато за първи път включите чипа) и след като байтът е в регистъра за смяна, няма повече превъртане Ще контролираме тип барграф, 7 сегмент, и 16LED 4x4 точкова матрица с този чип и софтуер на arduino, използвайки само 2 цифрови пина (+ захранване и маса)

Стъпка 2: Основно окабеляване и работа

Основно окабеляване и работа
Основно окабеляване и работа
Основно окабеляване и работа
Основно окабеляване и работа

Окабеляване 74HC164 е 14 -пинов чип, има 4 входни пина, 8 изходни пина, захранване и заземяване, така че нека започнем от горе. И двата пина 1 и 2 са серийни входове, те са настроени като логически И порта, което означава, че и двете трябва да са логически високи (т.е. 5 волта), за да може битът да се разглежда като 1, ниското състояние (0 волта) на всеки от тях ще се чете като нула. Ние наистина не се нуждаем от това и е по -лесно да се справим със софтуера, така че изберете един и го свържете с V+, така че винаги да чете високо. Избирам да използвам джъмпер от щифт 1 до щифт 14 (V+), тъй като можете просто да поставите джъмпер за макет върху чипа. Единственият оставащ сериен вход (пин 2 в моите схеми) ще премине към цифров пин 2 на arduino. Пинове 3, 4, 5 и 6 от 74HC164 са първите 4 байта на изхода Pin 7 се свързва към земята Прескачане надясно, щифт 8 е часовникът, по този начин регистърът за смяна знае, че следващият сериен бит е готов за четене, това трябва да бъде свързано към цифров пин 3 на arduino. Pin 9 е да изчисти целия регистър наведнъж, ако той падне, имате възможност да го използвате, но нищо в това неразбираемо не прави, така че го обвържете с V+пинове 10, 11 12 и 13 са последните 4 байта на изхода pin 14 е захранването на чиповете Операция Първо трябва да настроите серийния вход на регистъра (цифров пин 2 на arduino) висок или нисък, след това трябва да обърнете щифта на часовника (цифров щифт 3) от ниско към високо, регистърът за смяна ще прочете данните на серийния вход и ще измести изходните щифтове с 1, повторете 8 пъти и сте задали всички изходи 8. Това може да се направи на ръка с за цикли и цифрови записи в IDU на arduino, но тъй като t Това е много често срещано хардуерно ниво на комуникации (SPI), те имат една единствена функция, която го прави вместо вас. shiftOut (dataPin, clockPin, bitOrder, value) Просто му кажете къде данните и пиновете на часовника са свързани към arduino, по какъв начин да изпращате данните и какво да изпращате, и за какво се грижи за вас (удобно)

Стъпка 3: Проекти

Проекти
Проекти

Добре, достатъчно лекция и теория, нека да направим някои забавни неща с този чип! Има 3 проекта, които да опитате в този инструктаж, първите 2 са лесни и могат да бъдат очертани за мигове. Третият, 4x4 led матрица, изисква повече време и мисъл за конструиране, поради светодиодното окабеляване. Списък на части Проект 1: „2 Wire“барграф LED контролер на дисплея 1 * 74HC164 Регистър за преместване 1 * спойка без запояване1 * arduino или arduino съвместим (5v) 1 * 330 ома 1/4 ватов резистор 8 * нормален изход червени светодиоди 12 * джъмперни проводници Проект 2: '2 Wire' 7 -сегментен контролер на дисплея 1 * 74HC164 Регистър за смяна 1 * спояваща платка 1 * съвместим с arduino или arduino (5v) 1 * 330 ома 1/4 ватов резистор 1 * общ катоден седемсегментен дисплей 9 * джъмперни проводници Проект 3: "2 Wire" 4x4 светодиоден матричен дисплей 1 * 74HC164 Регистър за смяна 1 * arduino или arduino съвместим (5v) 4 * 150 ohm 1 1/4 ватов резистор 8 * 1Kohm 1/8 ватов резистор (или по -голям) 8 * NpN транзистор (2n3904 или по -добър) 16 * нормален изходен червен светодиод е средство за неговото конструиране и регулирана мощност от 5 волта, която може да издържи 160+ma (можете включете всички светодиоди наведнъж като стоп светлина)

Стъпка 4: Проект 1 [pt 1]: Хардуер на контролера на Bargraph LED дисплей „2 Wire“

Проект 1 [pt 1]: Хардуер на контролера за Bargraph LED дисплей „2 Wire“
Проект 1 [pt 1]: Хардуер на контролера за Bargraph LED дисплей „2 Wire“
Проект 1 [pt 1]: Хардуер за двуцветен барграфен LED дисплей
Проект 1 [pt 1]: Хардуер за двуцветен барграфен LED дисплей

Свържете arduino и регистъра за смяна според схемата, вече имам 10 сегментен барграфен дисплей, готов за използване на макет и това ще видите на изображението, но можете да направите същото с отделни светодиоди На втората страница Заявих, че това не са драйвери, че са логически устройства, с малки количества ток, които могат да преминат през тях. За да пуснете 8 светодиода, като същевременно поддържате веригата проста и не готвите регистъра за смяна, изисква да ограничим доста тока. Светодиодите са свързани паралелно и споделят обща маса (общ катод), преди да влязат в захранването захранващото заземяване, което те трябва да преминат през резистор от 330 ома, ограничавайки общото количество ток, което всички светодиоди биха могли да използват до 10ma (при 5 волта) Това оставя светодиодите в болно изглеждащо състояние, но те светват и по този начин служат за този пример, за да задействате светодиодите при правилния им ток, ще трябва да вмъкнете транзистор, където регистърът за смяна може да включва / изключва източник на по -висок ток (вижте проект 3) Пинът за данни на регистъра за смяна (щифт 2) се нуждае за да се свържете с цифров щифт arduino # 2 Пенсът на часовника на регистъра за смяна (пин 8) трябва да се свърже с цифров щифт arduino # 3

Стъпка 5: Проект 1 [pt 2]: Софтуер за контролер на Bargraph LED дисплей „2 Wire“

Проект 1 [pt 2]: Софтуер за контролер на Bargraph LED дисплей „2 Wire“
Проект 1 [pt 2]: Софтуер за контролер на Bargraph LED дисплей „2 Wire“
Проект 1 [pt 2]: Софтуер за контролер на Bargraph LED дисплей „2 Wire“
Проект 1 [pt 2]: Софтуер за контролер на Bargraph LED дисплей „2 Wire“

Пример 1: Отворете файла "_164_bas_ex.pde" Вътре в IDU на arduino, неговата проста скица, която просто ви позволява да дефинирате включване или изключване на светодиодите в лентовия дисплей Първите 2 реда определят номерата на пиновете, които ще използваме за данни и часовник, I използвайте #define над const integer, намирам го за по -лесно да се запомни и няма предимство за едното или другото след компилиране #define data 2 #define clock 3 next е функцията за настройка на void, тя работи само веднъж, така че arduino се превръща on, задава регистъра за смяна и няма какво друго да прави. Вътре във функцията за настройка на void задаваме часовника и щифтовете за данни като изходни изводи, след което с помощта на функцията shiftOut изпращаме данните към регистрацията за смяна void setup () {pinMode (часовник, OUTPUT); // прави пина на часовника изходен pinMode (данни, OUTPUT); // правим извода за данни изход shiftOut (данни, часовник, LSBFIRST, B10101010); // изпращаме тази двоична стойност към регистъра за смяна} Във функцията shiftOut можете да видите нейните аргументи данни е щифтът за данни, часовникът е пина за часовник LSBFIRST се отнася до какъв ред е, когато го записвате в двоична нотация (Bxxxxxxxx) елемент от В е най -малкият значителен бит Първо, това се подава първо, така че завършва на последния изход, след като всички 8 бита са подадени в B10101010 е двоичната стойност, изпратена до регистъра за смяна, и ще включи всяка нечетна светлина, опитайте да играете с различни стойности, за да включите или изключите различни модели и накрая празен void цикъл (защото имате нужда от такъв, дори ако не го използвате) void loop () {} // празен цикъл за сега Пример 2: първите 8 реда са същите като първите 8 реда от първия пример, всъщност те няма да се променят за нито един от другите проекти, така че #define data 2 #определя часовник 3void setup () {pinMode (часовник, OUTPUT); // прави пина на часовника изходен pinMode (данни, OUTPUT); // направете извода на данни изход Но сега при настройка на void има 8 броя за цикъл, като той приема празен байт и измества 1 бит наведнъж, започвайки от най -левия бит и се движи надясно. Това е обратно от първия пример, когато започнахме от най -десния бит и работихме наляво, но използвайки MSBFIRST функцията shift out изпраща данните по правилния начин Също така добавяме забавяне във цикъла for, така че да се забави достатъчно, за да бъде видим. for (int i = 0; i <8; ++ i) // за 0 - 7 do {shiftOut (данни, часовник, MSBFIRST, 1 << i); // битово изместване на логическа висока (1) стойност от i delay (100); // забавяме 100 мс или няма да можете да го видите}} void loop () {} // празен цикъл за сега качвате скрипта и сега трябва да видите барграфа да свети всяка светлина един по един

Стъпка 6: Проект 2: „2 Wire“7 -сегментен контролер за показване

Проект 2: „2 Wire“7 -сегментен контролер за показване
Проект 2: „2 Wire“7 -сегментен контролер за показване
Проект 2: „2 Wire“7 -сегментен контролер за показване
Проект 2: „2 Wire“7 -сегментен контролер за показване

Погледнете извода на вашия 7 -сегментен дисплей (имах само двоен, но използвах само половината) и използвайте чертежа по -долу, за да свържете всеки сегмент към правилния бит на регистъра за смянабит 1 = пин 3 бит 2 = щифт 4 бит 3 = пин 5 бит 4 = пин 6 бит 5 = пин 10 бит 6 = пин 11 бит 7 = пин 12 бит 8 = пин 13 (ако искате да използвате десетичната запетая) И катодът на дисплея през резистора 330 ома и за захранване на земята сега отворете seven_seg_demo.pde в arduino IDEF Първо виждате къде дефинираме данните и щифтовете на часовника #дефинирайте данните 2 #дефинирайте часовника 3 След това задаваме всички шаблони на символи в двоичен код, това е доста лесно, погледнете чертежа по -долу, ако имате нужда от средния сегмент въведете единица, след това имате нужда от горния сегмент, ако е така въведете друг, продължете да правите това, докато покриете всичките 8 сегмента, забележете, че най -десният ми бит (бит 8) винаги е 0, това е така, защото никога не включвам десетичния знак точка. байт нула = B01111110; байт едно = B00000110; байт два = B11011010; байт три = B11010110; байт четири = B10100110; байт пет = B11110100; байт шест = B11111100; байт седем = B01000110; байт осем = B11111110; байт девет Следващата настройка на void настройваме нашите данни и пинове на часовника за изходи void setup () {pinMode (clock, OUTPUT); // прави пина на часовника изходен pinMode (данни, OUTPUT); // правим извода на данни изход3} след това в void цикъл използваме shiftOut за показване на всеки модел (номер) изчакваме 1/2 секунда и показваме следващия, 0 до 9, тъй като това се прави във функцията void loop, той ще брои 0-9 и повтаряйте завинаги. void loop () {shiftOut (данни, часовник, LSBFIRST, нула); забавяне (500); shiftOut (данни, часовник, LSBFIRST, един); забавяне (500); shiftOut (данни, часовник, LSBFIRST, два); забавяне (500); shiftOut (данни, часовник, LSBFIRST, три); забавяне (500); shiftOut (данни, часовник, LSBFIRST, четири); забавяне (500); shiftOut (данни, часовник, LSBFIRST, пет); забавяне (500); shiftOut (данни, часовник, LSBFIRST, шест); забавяне (500); shiftOut (данни, часовник, LSBFIRST, седем); забавяне (500); shiftOut (данни, часовник, LSBFIRST, осем); забавяне (500); shiftOut (данни, часовник, LSBFIRST, девет); забавяне (500);}

Стъпка 7: Проект 3 [pt 1]: „2 Wire“4x4 Led матричен дисплей

Проект 3 [pt 1]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 1]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 1]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 1]: „2 Wire“4x4 Led матричен дисплей

Проектът за 4x4 LED матрица е доста по -сложен, но той е почти в строеж, избирам да направя моя запоен върху перфорирана дъска, но би трябвало да е възможно да се възпроизведе на макет, просто много по -раздалечени. се различава по това, че регистърът на смяна не управлява директно светодиодите, вместо това изходите на регистъра на смяна се изпращат през 1Kohm резистор към основата на NpN транзистор, когато изходът на бита е висок, той позволява достатъчно ток и напрежение да преминат в транзистор за превключване на връзката между колектора и излъчвателя, колекторите са свързани към "здрави" регулирани 5 волта. Излъчвателите на транзисторите са свързани към 150 ома резистори и резисторите са свързани към анодите на 4 светодиода подред и ограничава реда до 20 mA, въпреки че при изчертаване на изображения на дисплея наведнъж свети само 1 светодиод и следователно почти пълна яркост (близо до това, че те се включват и изключват много бързо, за да съставят цялото изображение) Има 4 реда и 4 колони, всяка ред получава резистор и транзистор, като на всяка колона катодите на светодиода са свързани, затичани в колектора на транзистор, чиято база също се контролира от регистъра за смяна, и накрая излизат на земята. Голяма версия на схемата www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

Стъпка 8: Проект 3 [pt 2]: „2 Wire“4x4 Led Matrix Display

Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей
Проект 3 [pt 2]: „2 Wire“4x4 Led матричен дисплей

Сместващият регистър контролира както анода, така и катодите на светодиодите във формат YX, погледнете следния бит 1 = колона 1 (най -десен) бит 2 = колона 2 бит 3 = колона 3 бит 4 = колона 4 бит 5 = ред 1 (най -горен) бит 6 = ред 2 бит 7 = ред 3 бит 8 = ред 4 За да направите изображение, изчертайте квадрат 4х4 върху милиметрова хартия и попълнете кои от тях искате да се показват, след това направете YX таблица. По -долу ще видите картографиране за сравнение, както и най -доброто, което може да се направи на 4x4 "пиксела" За всеки попълнен раздел записвам в коя колона (Y) е, след това в кой ред е (X) Сега отворете файла _4x4.pde в IDE на arduino ще видите нашите стари 2 приятели #дефиниране на данни 2 #дефиниране на часовник 3 след това масив от цели числа int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Ако погледнете само списък с моите записани YX координати, ще бъде голяма болка в дупето да конвертирате тези стойности на ръка, а ние имаме компютър … нека го направи! нашият часовник и пиновете за данни OUTPUTS void setup () {pinMode (clock, OUTPUT); // прави пина на часовника изходен pinMode (данни, OUTPUT); // правим извода на данни изход3} И объркващ изглеждащ void цикъл, за да започнем нещата, трябва да обявим някои локални променливи void loop () {int Y; int X; байт навън; След това for цикъл, този цикъл трябва да е толкова дълъг, колкото количеството записи в img масива, за това изображение използвах само 6 пиксела, така че прави 12 YX координати. Правя го да пропусне всяко друго число, като използвам i += 2, защото четем 2 координати на цикъл за (int i = 0; i <12; i += 2) // брой точки в масива img, този случай 12 {Сега четем Y entery в в масива и изваждаме единица от нейната стойност, тъй като байтовете не започват от едно, те започват от нула, но ние преброихме от 1 // вземете първата двойка YX кабели Y = (img - 1); // изваждаме едно, тъй като броят на битовете започва от 0 След това четем X entery при [i + 1] в масива и изваждаме едно от стойността му, поради същата причина X = (img [i + 1] - 1); След като имаме стойностите YX на пиксела, правим малко побитово или математическо и се изместваме наляво. Първо трябва да прочетем стойността X и каквато и да е нейната стойност да я изместим на много места + 4 наляво, така че ако X е 4 и добавете 4, това е бит 8 (MSB), като погледнете отново диаграмата … бит 1 = колона 1 (най -десен) бит 2 = колона 2 бит 3 = колона 3 бит 4 = колона 4 бит 5 = ред 1 (най -горе) бит 6 = ред 2 бит 7 = ред 3 бит 8 = ред 4 Бит 8 е последният ред След това стойността Y също е изместена наляво, този път само от себе си, нищо не се добавя. Накрая двете са или са заедно в 1 байт вместо в 2 половин байта (nbbles), използвайки побитово или (символът |) взема два байта и основно ги добавя заедно, нека приемем X = 10000000Y = 00000001 -------------------- ИЛИ = 10000001row 4 колона 1 out = 1 << (X + 4) | 1 << Y; И накрая shiftOut, за да се покаже текущата картина, и продължавайте да правите това, докато нямаме повече данни в масива … забавете момент и се въртете завинаги, тъй като измествахме данните наляво и се нуждаем от MSB да бъде на последния изходен щифт от сменния регистър първо го изпратете. shiftOut (данни, часовник, MSBFIRST, изход); // преместваме байта навън към нашето регистърно закъснение (1); // забавете го, за да има шанс да остави петно светлина в очите ви. Чувствайте се свободни да правите свои собствени изображения и ефекти, Има 3 примерни файла, усмихнатото лице и шахматна дъска (която прилича повече на ивици), и накрая произволен производител на блясък

Стъпка 9: Заключение

Заключение
Заключение
Заключение
Заключение
Заключение
Заключение

Всичко това е доста удобен малък чип и се радвам, че го изхвърлих от стара електроника, насочена към боклука. Той може да се използва и за други неща, освен за дисплейни системи, но всеки харесва светлините и мигновената обратна връзка от виждането Това, което се случва, е изключително полезно за визуалните мислители като мен. Също така, моля, простете моя код, имам arduino едва от третата седмица на октомври и това беше доста голям крах курс. Но това е страхотното нещо за системата, ако седнете и работите с нея, тя е пълна с чисти функции, които правят управлението на света с 8 -битов микроконтролер доста лесно. Както винаги въпросите и коментарите са най -добре дошли и благодаря за четейки, надявам се да сте научили много

Препоръчано: