Reklama
Dzisiaj postaram się trochę nauczyć o rejestrach zmianowych. Są to dość ważną częścią programowania Arduino, głównie dlatego, że zwiększają liczbę wyjść, których można użyć, w zamian za tylko 3 piny sterujące. Możesz także łączyć szeregowo rejestry przesuwne, aby uzyskać jeszcze więcej wyników.
Jest to jednak znaczny skok trudności w porównaniu z poprzednimi samouczkami i zdecydowanie sugeruję, że masz naprawdę dobre zrozumienie poprzedniego materiału (linki na końcu tego artykułu), a także zrozumienie podstawy binarne Co to jest binarny? [Technologia wyjaśniona]Biorąc pod uwagę, że pliki binarne są tak absolutnie fundamentalne dla istnienia komputerów, wydaje się dziwne, że nigdy wcześniej nie zajmowaliśmy się tym tematem - więc dzisiaj pomyślałem, że dam krótki przegląd tego, co binarne ... Czytaj więcej które napisałem ostatnim razem.
Co to jest rejestr zmianowy?
Rejestr przesuwny wyjścia, technicznie rzecz biorąc, odbiera dane szeregowo i wysyła je równolegle. W praktyce oznacza to, że możemy szybko wysłać wiązkę poleceń wyjściowych do układu, nakazać mu aktywację, a wyjścia zostaną wysłane do odpowiednich pinów. Zamiast iteracji przez każdy pin, po prostu wysyłamy wymagane dane wyjściowe do wszystkich pinów jednocześnie, jako jeden bajt lub więcej informacji.
Jeśli pomoże ci to zrozumieć, możesz myśleć o rejestrze przesuwnym jako o „tablicy” wyjść cyfrowych, ale możemy pominąć zwykłe polecenia digitalWrite i po prostu wysłać serię bitów, aby je włączyć lub poza.
Jak to działa?
Rejestr przesuwny, którego będziemy używać - 74HC595N zawarty w zestawie startowym Oomlout - potrzebuje tylko 3 pinów sterujących. Pierwszy to zegar - nie musisz się tym zbytnio przejmować, ponieważ kontrolują biblioteki szeregowe Arduino to - ale zegar jest w zasadzie tylko impulsem elektrycznym włączającym / wyłączającym, który ustala tempo sygnału danych.
Kołek zatrzaskowy służy do informowania rejestru przesuwnego, kiedy powinien włączać i wyłączać swoje wyjścia zgodnie z bitami, które właśnie wysłaliśmy - to znaczy zatrzasnąć je na miejscu.
Wreszcie, pin danych jest miejscem, w którym wysłaliśmy rzeczywiste dane szeregowe z bitami, aby określić stan włączenia / wyłączenia wyjść rejestru przesuwnego.
Cały proces można opisać w 4 krokach:
- Ustaw pin danych na wysoki lub niski dla pierwszego pinu wyjściowego w rejestrze przesuwnym.
- Pulsuj zegarem, aby „przenieść” dane do rejestru.
- Kontynuuj ustawianie danych i pulsowanie zegara, aż ustawisz wymagany stan dla wszystkich pinów wyjściowych.
- Pulsuj zatrzask, aby aktywować sekwencję wyjściową.
Realizacja
Potrzebne są następujące komponenty do tego projektu:
- Układ rejestru przesuwnego 7HC595N
- 8 diod LED i odpowiednie rezystory lub cokolwiek, na co chcesz wysyłać sygnał
- Zwykła deska do krojenia, złącza i podstawowe Arduino
Jeśli masz zestaw startowy Oomlout, możesz pobrać układ płyty breadboard tutaj.
Oto wideo z montażu:
Układ planszy:
I moja zmontowana wersja:
Zmodyfikowałem oryginalny kod dostarczony przez Ooolmout, ale jeśli chcesz go wypróbować, możesz go pobrać w całości tutaj. Objaśnienie kodu jest włączone, więc skopiuj i wklej całość od dołu lub pastebin przeczytać wyjaśnienie kodu.
/ * * | Shift Register Tutorial, oparty na | * | Zestaw do eksperymentów Arduino CIRC-05 | * |.: 8 Więcej diod LED:. (Rejestr przesuwny 74HC595) | * * | Zmodyfikowane przez James @ MakeUseOf.com | * * / // Definicje pinów. // 7HC595N ma trzy piny. int dane = 2; // gdzie wysyłamy bity do sterowania wyjściami int clock = 3; // utrzymuje synchronizację danych. int zatrzask = 4; // informuje rejestr przesuwający, kiedy uaktywnić sekwencję wyjściową void setup () {// ustaw trzy piny kontrolne na wyjściowe pinMode (dane, WYJŚCIE); pinMode (zegar, WYJŚCIE); pinMode (zatrzask, WYJŚCIE); Serial.begin (9600); // abyśmy mogli wysyłać komunikaty debugowania do monitora szeregowego. } void loop () {outputBytes (); // nasze podstawowe wyjście, które zapisuje 8 bitów, aby pokazać, jak działa rejestr przesuwny. //outputIntegers(); // wysyła wartość całkowitą jako dane zamiast bajtów, skutecznie licząc binarnie. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (zatrzask, LOW); Serial.println (i); // Debugowanie, wysyłanie danych wyjściowych do shiftOut monitora szeregowego (dane, zegar, MSBFIRST, i); digitalWrite (zatrzask, WYSOKI); opóźnienie (100); }} void outputBytes () {/ * Bajty lub 8-bitów są reprezentowane przez B, po którym następuje 8 0 lub 1 s. W tym przypadku rozważ to jako tablicę, której użyjemy do sterowania 8 diodami LED. Tutaj zacząłem wartość bajtu jako 00000001 * / byte dataValues = B00000001; // zmień to, aby dostosować wzór początkowy / * W pętli for zaczynamy od pociągnięcia zatrzasku w dół, używając funkcji shiftOut Arduino do porozmawiaj z rejestrem przesuwnym, wysyłając do niego nasz bajt danych Wartości reprezentujące stan diod LED, a następnie pociągnij zatrzask wysoko, aby zablokować je w miejsce. Na koniec przesuwamy bity o jedno miejsce w lewo, co oznacza, że kolejna iteracja spowoduje włączenie następnej diody LED w serii. Aby zobaczyć dokładną wysyłaną wartość binarną, sprawdź monitor szeregowy. * / for (int i = 0; i <8; i ++) {digitalWrite (zatrzask, LOW); Serial.println (dataValues, BIN); // Debugowanie, wysyłanie danych wyjściowych do shiftOut monitora szeregowego (data, clock, MSBFIRST, dataValues); digitalWrite (zatrzask, WYSOKI); dataValues = dataValues << 1; // Przesuń bity o jedno miejsce w lewo - zmień na >>, aby dostosować opóźnienie kierunku (100); } }
Przesunięcie bitów (funkcja OutputBytes)
W pierwszym przykładzie pętli - outputBytes () - kod wykorzystuje 8-bitową sekwencję (bajt), którą następnie przesuwa w lewo po każdej iteracji pętli for. Ważne jest, aby pamiętać, że jeśli przesuniesz się dalej niż to możliwe, bit po prostu zginie.
Przesunięcie bitów odbywa się za pomocą << lub >>, a następnie liczby bitów, o którą chcesz przesunąć.
Sprawdź poniższy przykład i upewnij się, że rozumiesz, co się dzieje:
bajt val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, straciliśmy te inne bity! val = val >> 5 // B00000010.
Zamiast tego wysyłanie liczb całkowitych (OutputIntegers Function)
Jeśli wyślesz cały numer do rejestru przesuwnego zamiast bajtu, po prostu przekształci on liczbę w binarną sekwencję bajtów. W tej funkcji (odkomentowanie w pętli i przesyłanie, aby zobaczyć efekt), mamy pętlę for, która liczy się od 0-255 (najwyższa liczba całkowita, którą możemy reprezentować jednym bajtem), i wysyła ją zamiast tego. Zasadniczo liczy się w postaci binarnej, więc sekwencja może wydawać się trochę losowa, chyba że diody LED są ułożone w długiej linii.
Na przykład, jeśli przeczytasz binarny artykuł wyjaśniający, będziesz wiedział, że liczba 44 będzie reprezentowana jako 00101100, więc diody LED 3,5,6 będą świecić w tym punkcie sekwencji.
Rejestrowanie łańcuchowe więcej niż jednej zmiany
Niezwykłą rzeczą w rejestrach przesuwnych jest to, że jeśli otrzymają więcej niż 8-bitowe informacje (lub jak duży jest ich rejestr), ponownie przesuną pozostałe dodatkowe bity. Oznacza to, że możesz połączyć ich serię, wcisnąć jeden długi łańcuch bitów i rozdzielić go do każdego rejestru osobno, bez dodatkowego kodowania z twojej strony.
Chociaż nie będziemy tutaj szczegółowo opisywać procesu ani schematów, jeśli masz więcej niż jeden rejestr zmian, możesz wypróbować projekt z oficjalnej strony Arduino tutaj.
Inne artykuły z serii:
- Co to jest Arduino i co możesz z tym zrobić Co to jest Arduino i co możesz z tym zrobić?Arduino to niezwykłe małe urządzenie elektroniczne, ale jeśli nigdy wcześniej go nie używałeś, jakie dokładnie są i co możesz z tym zrobić? Czytaj więcej ?
- Co to jest zestaw startowy Arduino i co zawiera? Co zawiera zestaw startowy Arduino? [MakeUseOf wyjaśnia]Wcześniej MakeUseOf przedstawiłem tutaj sprzęt open source Arduino, ale będziesz potrzebować czegoś więcej niż samego Arduino, aby coś z niego zbudować i zacząć. „Zestawy startowe” Arduino są ... Czytaj więcej
- Więcej fajnych komponentów do zakupu za pomocą zestawu startowego 8 dodatkowych fajnych komponentów do twoich projektów ArduinoZastanawiasz się więc nad zestawem startowym Arduino, ale zastanawiasz się, czy niektóre podstawowe diody LED i rezystory wystarczą, abyś był zajęty na weekend? Prawdopodobnie nie. Oto kolejne 8 ... Czytaj więcej
- Rozpoczęcie pracy z zestawem startowym Arduino? Instalowanie sterowników i konfigurowanie płyty głównej i portu Rozpoczęcie pracy z zestawem startowym Arduino - instalowanie sterowników oraz konfigurowanie płyty głównej i portuWięc kupiłeś sobie zestaw startowy Arduino i być może jakieś inne fajne komponenty - co teraz? Jak właściwie zacząłeś programować to Arduino? Jak to skonfigurować ... Czytaj więcej
- Fritzing, bezpłatne narzędzie do rysowania schematów połączeń Fritzing - najlepsze narzędzie do szkicowania projektów elektronicznych [Cross Platform]Pomimo tego, że brzmi jak alcopop, Fritzing jest w rzeczywistości niesamowitym kawałkiem darmowego oprogramowania, którego można użyć do stworzenia schematy obwodów i komponentów do użytku z płytkami elektronicznymi do szybkiego prototypowania, takimi jak fantastyczne oprogramowanie typu open source Arduino ... Czytaj więcej
- Bliższe spojrzenie na strukturę aplikacji Arduino i przykładowy program Blink Pierwsze kroki z Arduino: bliższe spojrzenie na płytkę drukowaną i strukturę programuOstatnim razem zostawiłem cię, skonfigurowałeś Arduino do pracy z Maciem lub Windowsem i przesłałem prostą aplikację testową, która mrugała pokładową diodę LED. Dzisiaj wyjaśnię kod ... Czytaj więcej
- Projekt świateł choinkowych Arduino Xmas Projekt Arduino: jak zrobić efektowne ozdoby choinkoweTo kolejna część naszej serii poświęconej uczeniu się Arduino. Tym razem poznamy i wykorzystamy tablice do wykonania ozdoby choinkowej z różnymi błyskającymi sekwencjami. To byłby ... Czytaj więcej (AKA nauka o tablicach)
- Co to jest Binary? Co to jest binarny? [Technologia wyjaśniona]Biorąc pod uwagę, że pliki binarne są tak absolutnie fundamentalne dla istnienia komputerów, wydaje się dziwne, że nigdy wcześniej nie zajmowaliśmy się tym tematem - więc dzisiaj pomyślałem, że dam krótki przegląd tego, co binarne ... Czytaj więcej
To tyle, o ile dzisiaj pójdziemy z rejestrami zmianowymi, ponieważ myślę, że dużo omówiliśmy. Jak zawsze zachęcam do zabawy i dostosowania kodu oraz do zadawania pytań w komentarzach, a nawet do udostępnienia linku do swojego niesamowitego projektu opartego na rejestrze zmian.
James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.