W jednym z poprzednich artykułów już pokrótce poruszyliśmy użycie rejestru przesuwnego, w szczególności 74HC595. Przyjrzyjmy się bliżej możliwościom i procedurze pracy z tym mikroukładem.
Niezbędny
- - Arduino;
- - rejestr przesuwny 74HC595;
- - przewody łączące.
Instrukcje
Krok 1
Rejestr przesuwny 74HC595 i tym podobne są używane jako urządzenia do konwersji danych szeregowych na równoległe, a także mogą być używane jako „zatrzask” dla danych, utrzymujący przesłany stan.
Pinout (pinout) pokazano na rysunku po lewej stronie. Ich cel jest następujący.
Q0… Q7 - równoległe wyjścia danych;
GND - masa (0 V);
Q7 '- szeregowe wyjście danych;
^ MR - reset mastera (aktywny niski);
SHcp - wejście zegara rejestru przesuwnego;
STcp - wejście impulsowe "zatrzaskowe";
^ OE - załączenie wyjścia (aktywny niski);
Ds - szeregowe wejście danych;
Vcc - zasilanie +5 V.
Strukturalnie mikroukład jest wykonywany w kilku rodzajach przypadków; Użyję tego pokazanego na rysunku po prawej - wyjście - ponieważ jest łatwiejszy w użyciu z płytką do krojenia chleba.
Krok 2
Przypomnę pokrótce interfejs szeregowy SPI, którego użyjemy do przesyłania danych do rejestru przesuwnego.
SPI to czteroprzewodowy dwukierunkowy interfejs szeregowy, w którym uczestniczą master i slave. Master w naszym przypadku będzie Arduino, slave będzie rejestrował 74HC595.
Środowisko programistyczne dla Arduino posiada wbudowaną bibliotekę do pracy na interfejsie SPI. Podczas jego stosowania wykorzystywane są wnioski zaznaczone na rysunku:
SCLK - wyjście zegara SPI;
MOSI - dane od mastera do slave'a;
MISO - dane od slave do master;
SS - wybór slave'a.
Krok 3
Złóżmy obwód jak na zdjęciu.
Podłączę również analizator logiczny do wszystkich pinów mikroukładu rejestru przesuwnego. Za jego pomocą zobaczymy, co dzieje się na poziomie fizycznym, jakie sygnały dokąd zmierzają i dowiemy się, co one oznaczają. Powinno wyglądać jak na zdjęciu.
Krok 4
Napiszmy taki szkic i załadujmy go do pamięci Arduino.
Zmienna PIN_SPI_SS jest wewnętrzną standardową stałą, która odpowiada pinowi „10” Arduino, gdy jest używany jako master interfejsu SPI, którego tutaj używamy. W zasadzie równie dobrze moglibyśmy użyć dowolnego innego pinu cyfrowego w Arduino; wtedy musielibyśmy go zadeklarować i ustawić jego tryb pracy.
Podając ten pin LOW, aktywujemy nasz rejestr przesuwny do nadawania/odbierania. Po transmisji ponownie podnosimy napięcie na WYSOKIE i wymiana się kończy.
Krok 5
Zamieńmy nasz obwód w pracę i zobaczmy, co pokazuje nam analizator stanów logicznych. Ogólny widok wykresu czasowego pokazano na rysunku.
Niebieska linia przerywana pokazuje 4 linie SPI, czerwona linia przerywana pokazuje 8 kanałów równoległych danych rejestru przesuwnego.
Punkt A na skali czasu to moment przeniesienia liczby „210” do rejestru przesuwnego, B to moment zapisania liczby „0”, C to cykl powtarzający się od początku.
Jak widać, od A do B - 10,03 milisekund, a od B do C - 90,12 milisekund, prawie tak, jak prosiliśmy na szkicu. Małym dodatkiem w 0, 03 i 0,12 ms jest czas przesyłania danych szeregowych z Arduino, więc nie mamy tu dokładnie 10 i 90 ms.
Krok 6
Przyjrzyjmy się bliżej sekcji A.
Na samej górze znajduje się długi impuls, którym Arduino inicjuje transmisję na linii SPI-ENABLE - wybór slave'a. W tym czasie zaczynają się generować impulsy zegarowe SPI-CLOCK (druga linia od góry), 8 sztuk (do przesyłania 1 bajta).
Kolejna linia od góry to SPI-MOSI - dane, które przenosimy z Arduino do rejestru przesuwnego. To jest nasza liczba "210" w systemie binarnym - "11010010".
Po zakończeniu przesyłania, na końcu impulsu SPI-ENABLE widzimy, że rejestr przesuwny ustawił taką samą wartość na swoich 8 nogach. Podkreśliłem to niebieską przerywaną linią i oznaczyłem wartości dla jasności.
Krok 7
Zwróćmy teraz uwagę na sekcję B.
Ponownie wszystko zaczyna się od wybrania urządzenia podrzędnego i wygenerowania 8 impulsów zegarowych.
Dane na linii SPI-MOSI to teraz „0”. Oznacza to, że w tym momencie wpisujemy do rejestru liczbę „0”.
Ale dopóki transfer nie zostanie zakończony, rejestr przechowuje wartość „11010010”. Jest wyprowadzany na równoległe piny Q0.. Q7 i jest wyprowadzany, gdy w linii od równoległego wyjścia Q7 'do linii SPI-MISO, którą widzimy tutaj, występują impulsy zegarowe.
Krok 8
W związku z tym szczegółowo przeanalizowaliśmy kwestię wymiany informacji pomiędzy urządzeniem nadrzędnym, którym było Arduino, a rejestrem przesuwnym 74HC595. Nauczyliśmy się, jak podłączyć rejestr przesuwny, zapisywać do niego dane i odczytywać z niego dane.