Obsah:
- Krok 1: Co jsou tedy posuvné registry?
- Krok 2: Základní zapojení a provoz
- Krok 3: Projekty
- Krok 4: Projekt 1 [bod 1]: Hardware 2barevného sloupcového grafického LED displeje
- Krok 5: Projekt 1 [pt 2]: Software „2drátového“sloupcového LED displeje LED
- Krok 6: Projekt 2: „2vodičový“7segmentový řadič zobrazení
- Krok 7: Projekt 3 [pt 1]: „2vodičový“maticový LED displej 4x4
- Krok 8: Projekt 3 [pt 2]: „2vodičový“maticový displej LED 4x4
- Krok 9: Závěr
Video: Posuvný registr 74HC164 a vaše Arduino: 9 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:25
Posuvné registry jsou velmi důležitou součástí digitální logiky a fungují jako lepidlo mezi paralelním a sériovým světem. Snižují počet vodičů, používání pinů a dokonce pomáhají odlehčit procesoru tím, že dokážou ukládat jejich data. Dodávají se v různých velikostech, s různými modely pro různá použití a různými funkcemi. Ten, o kterém budu dnes diskutovat, je 8bitový 74HC164, sériový paralelní výstup, bez západky, posuvný registr. Proč? Pro jednoho je to jeden z nejzákladnějších posuvných registrů, což usnadňuje učení o něm, ale náhodou to byl jediný, který jsem měl (lol!) Tento návod popisuje, jak tento čip funguje, jak jej zapojit, a propojte jej s arduino včetně několika ukázkových skic a LED obvodů. Doufám, že se vám všem bude líbit!
Krok 1: Co jsou tedy posuvné registry?
Jak již bylo zmíněno dříve, přicházejí ve všech různých příchutích, a také jsem zmínil, že používám 8bitový 74HC164, sériový paralelní výstup, bez západky, posuvné registry, co to všechno znamená?!? Za prvé, název 74-znamená jeho část logické rodiny 74xx, a protože jeho logika nemůže přímo řídit velký proud (16-20 ma pro celý čip je běžné), přenáší pouze signály kolem, ale to neznamená tento signál nepřejde do tranzistoru, který může přepínat vyšší proudové zatížení. HC znamená jeho vysokorychlostní zařízení cmos, o tom si můžete přečíst na níže uvedeném odkazu, ale co o tom v zásadě potřebujete vědět, je to, že je nízký napájecí zařízení a poběží od 2 do 5 voltů (takže pokud používáte arduino 3,3 voltů, je to v pořádku) Také může správně fungovat při vysokých rychlostech, tento konkrétní čip má typickou rychlost 78 MHz, ale můžete jít jak pomalu, tak rychle (dokud nezačne flákat), jak chcete Posuvný registr se skládá z klopných obvodů, klopný obvod je 1 bit paměti, tento ha s 8 (nebo 1 bajt paměti). Protože je to paměť, pokud nepotřebujete aktualizovat registr, můžete s ním přestat „mluvit“a zůstane v jakémkoli stavu, ve kterém jste jej opustili, dokud s ním znovu „nepromluvíte“nebo neobnovíte napájení. ostatní posouvací registry řady 7400 logické řady mohou jít až na 16 bitů sériově paralelně ven To znamená, že vaše arduino posílá data sériově (impulsy vypnuto jeden po druhém) a posuvný registr umísťuje každý bit na správný výstupní pin. Tento model vyžaduje ovládání pouze 2 vodičů, takže na Arduinu můžete použít 2 digitální piny a tyto 2 výstupy rozbít na 8 digitálních výstupů Některé jiné modely jsou paralelní v sériovém výstupu, dělají totéž, ale jako vstupy do Arduina (například NES gamepad) non latched To může být pád tohoto čipu, pokud ho potřebujete. Když data vstupují do posuvného registru přes sériové číslo, zobrazují se na prvním výstupním pinu, když vstupuje hodinový impuls, první bit se posune o 1 místo, čímž se na výstupech vytvoří efekt posouvání, například 00000001 se zobrazí na výstupech jako 10100100010000100000100000010000000001 Pokud mluvíte s jinými logickými zařízeními, která sdílejí stejné hodiny a neočekávají to, mohlo by to způsobit problémy. Západkové posuvné registry mají další sadu paměti, takže jakmile jsou data zadána, můžete přepnout přepínač a zobrazit výstupy, ale přidá další vodič, software a věci, se kterými budete držet krok. V případě tohoto instruktážního ovládáme LED displeje, efekt posouvání se děje tak rychle, že ho nevidíte (kromě případů, kdy čip zapnete úplně poprvé), a jakmile je bajt v posuvném registru, žádné další posouvání už budeme ovládat typ sloupcového grafu, 7 segmentů a bodová matice 16 LED 4x4 s tímto čipem a softwarem na Arduinu využívající pouze 2 digitální piny (+ napájení a uzemnění)
Krok 2: Základní zapojení a provoz
Zapojení 74HC164 je 14kolíkový čip, má 4 vstupní piny, 8 výstupních kolíků, napájení a uzemnění, takže můžeme začít od začátku. Piny 1 a 2 jsou oba sériové vstupy, jsou nastaveny jako logická AND brána, což znamená, že oba musí být logicky vysoké (tj. 5 voltů), aby byl bit vnímán jako 1, nízký stav (0 voltů) na obou bude číst jako nula. Ve skutečnosti to nepotřebujeme a je snazší se s tím vypořádat v softwaru, takže si vyberte jeden a spojte jej s V+, aby se vždy četl vysoko. Rozhodl jsem se použít propojku od kolíku 1 po kolík 14 (V+), protože můžete jednoduše přeskočit propojku na čip. Jeden zbývající sériový vstup (v mých schématech pin 2) přejde na digitální pin 2 arduina. Piny 3, 4, 5 a 6 74HC164 jsou první 4 bajty výstupu Pin 7 se připojuje k zemi Skákání doprava, pin 8 je hodinový kolík, takto posuvný registr ví, že další sériový bit je připraven ke čtení, toto by mělo být připojeno k digitálnímu pinu 3 na Arduinu. Pin 9 je vymazání celého registru najednou, pokud klesne „Máte možnost ji použít, ale nic v této nevyzpytatelné ne, takže ji spojte s piny V+10, 11 12 a 13 jsou poslední 4 bajty výstupního kolíku 14 je výkon čipů Provoz Nejprve musíte nastavit sériový vstup registru (digitální pin 2 na arduino) vysoký nebo nízký, dále je třeba otočit hodinový pin (digitální pin 3) z nízkého na vysoký, posuvný registr přečte data na sériovém vstupu a posune výstupní piny o 1, opakujte 8krát a nastavili jste všech 8 výstupů. To lze provést ručně pro smyčky a digitální zápisy v arduino IDE, ale od t his is very very hardware level communications (SPI) they have a single function that does it for you. shiftOut (dataPin, clockPin, bitOrder, hodnota) Stačí říct, kde jsou datové a hodinové piny připojeny k arduinu, jakým způsobem odesílat data a co odesílat a jak je o vás postaráno (praktické)
Krok 3: Projekty
Dobře, dost přednášek a teorie, pojďme s tímto čipem dělat zábavné věci! V tomto instruktážním programu jsou k vyzkoušení 3 projekty, první 2 jsou snadné a lze je během chvilky zvládnout. Třetí, matice LED 4x4, vyžaduje více času a přemýšlení o konstrukci díky zapojení LED diod. Seznam dílů Projekt 1: Řadič LED indikátoru '2 Wire' LED grafu 1 * 74HC164 Posuvný registr1 * pájecí deska bez pájky1 * arduino nebo arduino kompatibilní (5v) 1 * 330 ohmů 1/4 wattový odpor 8 * normální výstup červené LED diody 12 * propojovací vodiče Projekt 2: '2vodičový' 7segmentový řadič displeje 1 * 74HC164 Posuvný registr1 * bezspájkový breadboard1 * arduino nebo arduino kompatibilní (5v) 1 * 330 ohm 1/4 wattový odpor 1 * společná katodová sedmisegmentová obrazovka 9 * propojovací vodiče Projekt 3: „2vodičový“maticový LED displej 4x4 1 * 74HC164 posuvný registr 1 * kompatibilní s arduino nebo arduino (5v) 4 * 150 ohm 1 Odpor 1/4 watt 8 * 1 ohm odpor 1/8 watt (nebo větší) 8 * tranzistor NpN (2n3904 nebo lepší) 16 * červené LED diody s normálním výstupem prostředky k jeho konstrukci a regulované 5 voltové napájení, které zvládne 160+ma (můžete rozsvítit všechny LED najednou jako brzdové světlo)
Krok 4: Projekt 1 [bod 1]: Hardware 2barevného sloupcového grafického LED displeje
Zapojte arduino a posuvný registr podle schématu, již mám připravený 10segmentový bargraf pro použití na prkénku a to je to, co uvidíte na obrázku, ale to samé můžete udělat s jednotlivými LED diodami. Na druhé stránce Uvedl jsem, že to nejsou ovladače, že jsou to logická zařízení, kterými jimi projde malé množství proudu. Aby bylo možné spustit 8 LED, a přitom udržovat obvod jednoduchý, a ne vařit posuvný registr, vyžaduje, abychom proud trochu omezili. LED diody jsou zapojeny paralelně a sdílejí společnou zem (společnou katodu), než půjdou do napájení napájecí zem, kterou potřebují projít přes odpor 330 ohmů, což omezuje celkové množství proudu, které by mohly použít všechny LED diody, na 10 ma (při 5 voltech) To ponechá diody LED v chorobně vypadajícím stavu, ale rozsvítí se, a tak slouží v tomto příkladu, abyste mohli řídit LED na jejich správný proud, budete muset vložit tranzistor, kde posuvný registr může zapnout / vypnout zdroj vyššího proudu (viz projekt 3) Datový kolík posuvného registru (pin 2) potřebuje pro připojení k digitálnímu pinu arduino č. 2 Hodinový kolík posuvného registru (kolík 8) se musí připojit k digitálnímu pinu arduino č. 3
Krok 5: Projekt 1 [pt 2]: Software „2drátového“sloupcového LED displeje LED
Příklad 1: Otevřete soubor „_164_bas_ex.pde“Uvnitř Arduino IDE. Jedná se o jednoduchý náčrt, který vám umožní definovat zapnuté nebo vypnuté LED diody na sloupcovém displeji. První 2 řádky definují čísla pinů, která budeme používat pro data a hodiny, já použijte #define over const integer, je pro mě snazší si to zapamatovat a pro jednoho ani druhého není žádná výhoda po kompilaci #define data 2 #define clock 3 další je funkce nastavení neplatnosti, běží pouze jednou, takže arduino se otočí on, nastaví posuvný registr a nemá nic jiného na práci. Uvnitř funkce nastavení neplatnosti nastavíme hodiny a datové piny jako VÝSTUPNÍ piny, poté pomocí funkce shiftOut odešleme data do posuvného registru void setup () {pinMode (hodiny, VÝSTUP); // udělejte z hodinového pinu výstupní pinMode (data, OUTPUT); // z datového pinu udělá výstupní shiftOut (data, hodiny, LSBFIRST, B10101010); // pošlete tuto binární hodnotu do posuvného registru} Ve funkci shiftOut můžete vidět její argumentydata jsou datový pin, hodiny jsou hodinový pin LSBFIRST odkazuje na to, v jakém pořadí je, při zápisu v binárním zápisu (Bxxxxxxxx) 7. prvek za B je nejméně signifikantní bit, nejprve je přiváděn, takže končí na posledním výstupu, jakmile je přiváděno všech 8 bitů B10101010 je binární hodnota odesílaná do posuvného registru a zapne každé liché světlo, zkuste hrát s různými hodnotami pro zapnutí nebo vypnutí různých vzorů a nakonec prázdnou prázdnou smyčku (protože ji potřebujete, i když ji nepoužíváte) prázdná smyčka () {} // zatím prázdná smyčka Příklad 2: prvních 8 řádků je stejné jako prvních 8 řádků prvního příkladu, ve skutečnosti se nezmění pro žádný z dalších projektů, takže #define data 2 #define clock 3void setup () {pinMode (clock, OUTPUT); // udělejte z hodinového pinu výstupní pinMode (data, OUTPUT); // udělejte z datového pinu výstup Ale nyní v neplatném nastavení existuje 8 cyklů pro smyčku, přičemž vezme prázdný bajt a přesune se o 1 bit dovnitř, počínaje bitem úplně vlevo a pohybem doprava. To je zpětně od prvního příkladu, kde jsme začínali od nejpravějšího bitu a pracovali vlevo, ale pomocí MSBFIRST funkce shift out posílá data správným způsobem. Také přidáme zpoždění ve smyčce for, aby se dostatečně zpomalilo, aby bylo vidět. for (int i = 0; i <8; ++ i) // for 0 - 7 do {shiftOut (data, hodiny, MSBFIRST, 1 << i); // bitový posun logické vysoké (1) hodnoty o i zpoždění (100); // zpoždění 100 ms, jinak byste to neviděli}} void loop () {} // zatím prázdná smyčka nahrajte skript a nyní byste měli vidět, jak se barograf rozsvítí každé světlo najednou
Krok 6: Projekt 2: „2vodičový“7segmentový řadič zobrazení
Podívejte se na pinout vašeho 7segmentového displeje (měl jsem pouze duální, ale pouze poloviční) a pomocí níže uvedeného výkresu připojte každý segment ke správnému bitu na posuvném registratu 1 = pin 3bit 2 = pin 4bit 3 = pin 5bit 4 = pin 6bit 5 = pin 10bit 6 = pin 11bit 7 = pin 12bit 8 = pin 13 (pokud chcete použít desetinnou čárku) A katoda displeje přes odpor 330 ohmů a pro napájení napájení nyní otevřete Seven_seg_demo.pde v arduino IDE Nejprve vidíte, kde definujeme data a kolíky hodin #definovat data 2 #definovat hodiny 3 Dále nastavíme všechny charaterové vzory v binárním formátu, je to docela snadné, podívejte se na výkres níže, pokud potřebujete střední segment zadejte jeden, další potřebujete horní segment, pokud ano, zadejte další, pokračujte v tom, dokud nepokryjete všech 8 segmentů, všimněte si, že můj pravý krajní bit (bit 8) je vždy 0, protože nikdy nezapínám desetinné číslo směřovat. bajt nula = B01111110; bajt jedna = B00000110; bajt dva = B11011010; bajt tři = B11010110; bajt čtyři = B10100110; bajt pět = B11110100; bajt šest = B11111100; bajt sedm = B01000110; bajt osm = B11111110; bajt devět = B11110110; dále v nastavení neplatnosti nastavíme naše datové a hodinové piny na výstupy void setup () {pinMode (hodiny, VÝSTUP); // udělejte z hodinového pinu výstupní pinMode (data, OUTPUT); // udělejte z datového pinu výstup3} pak v prázdné smyčce použijeme shiftOut k zobrazení každého vzoru (čísla), počkejte 1/2 sekundy a zobrazte další, 0 až 9, protože se provádí ve funkci prázdné smyčky, bude se počítat 0-9 a navždy opakovat. void loop () {shiftOut (data, hodiny, LSBFIRST, nula); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, jedna); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, dva); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, tři); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, čtyři); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, pět); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, šest); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, sedm); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, osm); zpoždění (500); shiftOut (data, hodiny, LSBFIRST, devět); zpoždění (500);}
Krok 7: Projekt 3 [pt 1]: „2vodičový“maticový LED displej 4x4
Maticový projekt 4x4 LED je o něco složitější, ale je téměř celý ve výstavbě. Rozhodl jsem se, že ten můj připájím na perfboard, ale mělo by to být možné replikovat na prkénku, jen mnohem více rozmístěném. liší se v tom, že posuvný registr nepohání přímo diody LED, místo toho jsou výstupy posuvných registrů posílány přes odpor 1Kohm na základnu tranzistoru NpN, když je výstup bitu vysoký, umožňuje průchod dostatečného proudu a napětí do tranzistor pro přepnutí připojení mezi kolektorem a emitorem, kolektory jsou svázány s „robustním“regulovaným 5 V. Emitory tranzistorů jsou připojeny k odporům 150 ohmů a odpory jsou svázány s anodami 4 LED v řadě a omezuje řádek na 20 ma, i když při kreslení obrázků na displej svítí vždy jen 1 LED, a tedy téměř plný jas (v blízkosti se zapínají a vypínají opravdu rychle, aby vytvořily celý obrázek) K dispozici jsou 4 řádky a 4 sloupce, každý řada dostane odpor a tranzistor, na každém sloupci jsou katody LED svázány dohromady, narazily na kolektor tranzistoru, jehož základna je také ovládána posuvným registrem, a nakonec ven na zem. Velká verze schématu www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg
Krok 8: Projekt 3 [pt 2]: „2vodičový“maticový displej LED 4x4
Posuvný registr ovládá jak anodu, tak katody LED ve formátu YX, podívejte se na následující bit 1 = sloupec 1 (úplně vpravo) bit 2 = sloupec 2bit 3 = sloupec 3bit 4 = sloupec 4bit 5 = řádek 1 (úplně nahoře) bit 6 = řádek 2bit 7 = řádek 3bit 8 = řádek 4 Chcete -li vytvořit obrázek, nakreslete na milimetrový papír čtverec 4x4 a vyplňte, které chcete zobrazit, vytvořte tabulku YX. Níže uvidíte mapování pro přirovnání, stejně jako to nejlepší, co lze udělat na „pixelech“4x4. Pro každý vyplněný oddíl zapíšu, ve kterém sloupci (Y) se nachází, ve kterém řádku je (X) Nyní otevřete v souboru _4x4.pde v arduino IDE uvidíte naše staré 2 přátele #define data 2 #definujte hodiny 3 a poté řadu celých čísel int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Když se podíváte na seznam mých zapsaných souřadnic YX, bylo by velkou bolestí zadek převádět tyto hodnoty ručně a máme počítač … nechte to udělat! Pohybujeme se tam, kde děláme neplatné nastavení naše hodinové a datové piny VÝSTUPY neplatné nastavení () {pinMode (hodiny, VÝSTUP); // udělejte z hodinového pinu výstupní pinMode (data, OUTPUT); // udělejte z datového pinu výstup3} A matoucí vypadající prázdná smyčka, pro začátek potřebujeme deklarovat některé místní proměnné void loop () {int Y; int X; bajt ven; Pak pro smyčku, tato smyčka musí být tak dlouhá jako množství záznamů v poli img, pro tento obrázek jsem použil pouze 6 pixelů, takže to dělá 12 souřadnic YX. Přeskočím každé další číslo pomocí i += 2, protože čteme 2 souřadnice na smyčku pro (int i = 0; i <12; i += 2) // počet bodů v poli img, v tomto případě 12 {Nyní čteme Y entery na v poli a odečteme jeden od jeho hodnoty, protože bajty nezačínají na jedničce, začínají na nule, ale počítali jsme od 1 // získejte první pár YX kabelů Y = (obr - 1); // odečtěte jedničku, protože počet bitů začíná na 0 Dále načteme X entery na [i + 1] v poli a odečteme jednu od její hodnoty, ze stejného důvodu X = (img [i + 1] - 1); Poté, co máme hodnoty YX pixelu, provedeme bitovou nebo matematickou a posuneme doleva. Nejprve musíme přečíst hodnotu X a bez ohledu na její hodnotu ji posunout o mnoho míst + 4 vlevo, takže pokud X je 4 a přidejte 4, je to bit 8 (MSB), znovu se podíváte na graf… bit 1 = sloupec 1 (zcela vpravo) bit 2 = sloupec 2bit 3 = sloupec 3bit 4 = sloupec 4bit 5 = řádek 1 (úplně nahoře) bit 6 = řádek 2bit 7 = řádek 3bit 8 = řádek 4Bit 8 je poslední řádekDále je hodnota Y posunuta také doleva, tentokrát jen sama od sebe, nic se nepřidává. Nakonec se oba spojí do 1 bajtu místo 2 půl bajtů (nibbles), using bitwise or (the symbol |) takes two bytes and basicly adds them together, lets guess X = 10000000Y = 00000001 -------------------- OR = 10000001row 4 sloupec 1 ven = 1 << (X + 4) | 1 << Y; A nakonec shiftOut, aby se zobrazil aktuální obrázek, a pokračujte v tom, dokud v poli nebudeme mít žádná další data … zdržte okamžik a smyčku navždy, protože jsme přesouvali data doleva a potřebujeme, aby MSB byl na posledním výstupním pinu posuvného registru nejprve odešlete. shiftOut (data, hodiny, MSBFIRST, out); // posunutí bajtu ven na naše zpoždění registru (1); // zpozdit to, aby to mělo šanci zanechat ve vašich očích bod světla Neváhejte si vytvořit vlastní obrázky a efekty. K dispozici jsou 3 ukázkové soubory, smajlík a šachovnice (která vypadá spíše jako pruhy), a nakonec náhodný výrobce jisker
Krok 9: Závěr
Přes to všechno je to docela šikovný malý čip a jsem rád, že jsem ho vyhodil ze starého kusu elektroniky směřujícího do koše. Lze jej použít i na jiné věci než na zobrazovací systémy, ale každý má rád světla a okamžitou zpětnou vazbu, že vidí to, co se děje, je nesmírně užitečné pro vizuální myslitele jako já. Také mi prosím promiňte můj kód, arduino mám jen od třetího říjnového týdne a byl to docela velký nárazový kurz. Ale to je na systému to skvělé, když si sednete a budete s ním pracovat, je plný skvělých funkcí, díky nimž je ovládání světa pomocí 8bitového mikrokontroléru docela snadné. Otázky a komentáře jsou jako vždy vítány a díky za čtení, doufám, že ses hodně naučil
Doporučuje:
Chytrý pokojový monitor rostlin - zjistěte, kdy vaše rostlina potřebuje zálivku: 8 kroků (s obrázky)
Chytrý pokojový monitor rostlin - zjistěte, kdy vaše rostlina potřebuje zálivku: Před několika měsíci jsem vyrobil tyč pro monitorování vlhkosti půdy, která je napájena bateriemi a lze ji zapíchnout do půdy v květináči pokojové rostliny, abyste získali užitečné informace o půdě. úroveň vlhkosti a LED blesk vám řeknou, kdy máte počkat
Elektrický posuvný přepínač s 3D tiskem (pouze pomocí kancelářské sponky): 7 kroků (s obrázky)
Elektrický posuvný vypínač s 3D tiskem (pouze pomocí kancelářské sponky): V průběhu let jsem se zapojil do zapojení svých vlastních malých elektrických projektů, většinou ve formě kancelářských spon, hliníkové fólie a lepenky dlážděných horkým lepidlem. Nedávno jsem si koupil 3D tiskárnu (Creality Ender 3) a šel hledat
Posuvný kryt webové kamery pro snadný přenos notebooku: 6 kroků
Posuvný kryt webové kamery pro snadné přenášení: MATERIÁLY: Silná tkanina, například syntetická kůže. Izolační páska. Víko krabice od sušenek nebo čokolády. Nůžky na nářadí. Rychlé lepidlo
Posuvný ovladač pohybu pro časosběrnou lištu: 10 kroků (s obrázky)
Posuvný ovladač pohybu pro časosběrnou lištu: Tento návod vysvětluje, jak motorizovat časosběrnou kolej pomocí krokového motoru poháněného Arduinem. Zaměříme se hlavně na ovladač pohybu, který pohání krokový motor za předpokladu, že již máte kolejnici, kterou chcete motorizovat. Například když
Demontujte svůj posuvný telefon Samsung A737: 7 kroků
Demontujte posuvný telefon Samsung A737: Nedávno jsem upustil svůj mobilní telefon Samsung A737, což způsobilo zkreslené zobrazení na obrazovce. LCD se nezdálo být rozbité, ale displej byl nečitelný. Ve skutečnosti to připomínalo televizi, která ztratila horizontální držení, protože