Badamy interfejs SPI i podłączamy rejestr przesuwny do Arduino, do którego uzyskamy dostęp za pomocą tego protokołu do sterowania diodami LED.
Niezbędny
- - Arduino;
- - rejestr przesuwny 74HC595;
- - 8 diod LED;
- - 8 rezystorów 220 Ohm.
Instrukcje
Krok 1
SPI - Serial Peripheral Interface lub „Serial Peripheral Interface” to protokół synchronicznego przesyłania danych do łączenia urządzenia nadrzędnego z urządzeniami peryferyjnymi (podrzędnymi). Master jest często mikrokontrolerem. Komunikacja między urządzeniami odbywa się za pomocą czterech przewodów, dlatego SPI jest czasami określany jako „interfejs czteroprzewodowy”. Te opony to:
MOSI (Master Out Slave In) - linia transmisji danych od urządzenia nadrzędnego do urządzeń podrzędnych;
MISO (Master In Slave Out) - linia transmisyjna od urządzenia podrzędnego do urządzenia nadrzędnego;
SCLK (Serial Clock) - synchronizacja impulsów zegarowych generowanych przez mastera;
SS (Slave Select) - linia wyboru urządzenia podrzędnego; gdy w linii "0", slave "rozumie", że uzyskuje dostęp.
Istnieją cztery tryby przesyłania danych (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), ze względu na kombinację polaryzacji impulsu zegara (pracujemy na poziomie HIGH lub LOW), polaryzacji zegara, CPOL i fazy impulsów zegara (synchronizacja na zboczu narastającym lub opadającym impulsu zegara), Faza zegara, CPHA.
Rysunek przedstawia dwie opcje łączenia urządzeń za pomocą protokołu SPI: niezależne i kaskadowe. W przypadku niezależnego podłączenia do magistrali SPI, urządzenie nadrzędne komunikuje się z każdym podrzędnym indywidualnie. W kaskadzie - urządzenia podrzędne są wyzwalane naprzemiennie, kaskadowo.
Krok 2
W Arduino magistrale SPI znajdują się na określonych portach. Każda płytka ma swoje własne przypisanie pinów. Dla wygody piny są duplikowane i umieszczane na oddzielnym złączu ICSP (In Circuit Serial Programming). Należy pamiętać, że na złączu ICSP nie ma pinu wyboru urządzenia podrzędnego - SS, ponieważ zakłada się, że Arduino będzie używane jako master w sieci. Ale jeśli to konieczne, możesz przypisać dowolny cyfrowy pin Arduino jako SS.
Rysunek przedstawia standardowe przyporządkowanie pinów do magistral SPI dla Arduino UNO i Nano.
Krok 3
Dla Arduino została napisana specjalna biblioteka implementująca protokół SPI. Podłącza się to tak: na początku programu dodaj #include SPI.h
Aby rozpocząć pracę z protokołem SPI, należy skonfigurować ustawienia, a następnie zainicjować protokół za pomocą procedury SPI.beginTransaction(). Możesz to zrobić za pomocą jednej instrukcji: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
Oznacza to, że inicjujemy protokół SPI z częstotliwością 14 MHz, transfer danych idzie od MSB (bitu najbardziej znaczącego) w trybie „0”.
Po inicjalizacji wybieramy urządzenie podrzędne, ustawiając odpowiedni pin SS w stan LOW.
Następnie przesyłamy dane do urządzenia podrzędnego za pomocą polecenia SPI.transfer().
Po transmisji wracamy SS do stanu WYSOKI.
Praca z protokołem kończy się poleceniem SPI.endTransaction(). Pożądane jest zminimalizowanie czasu wykonywania transferu między instrukcjami SPI.beginTransaction() i SPI.endTransaction(), aby nie nakładać się, jeśli inne urządzenie próbuje zainicjować transfer danych przy użyciu innych ustawień.
Krok 4
Rozważmy praktyczne zastosowanie interfejsu SPI. Diody LED zapalimy kontrolując 8-bitowy rejestr przesuwny za pośrednictwem magistrali SPI. Podłączmy rejestr przesuwny 74HC595 do Arduino. Do każdego z 8 wyjść podłączamy za pomocą diody LED (poprzez rezystor ograniczający). Schemat pokazano na rysunku.
Krok 5
Napiszmy taki szkic.
Najpierw połączmy bibliotekę SPI i zainicjujmy interfejs SPI. Zdefiniujmy pin 8 jako pin wyboru urządzenia podrzędnego. Wyczyśćmy rejestr przesuwny, wysyłając do niego wartość „0”. Inicjujemy port szeregowy.
Aby zapalić konkretną diodę LED za pomocą rejestru przesuwnego, musisz zastosować 8-bitową liczbę do jej wejścia. Np. aby zaświeciła się pierwsza dioda, podajemy binarną liczbę 00000001, dla drugiej - 00000010, dla trzeciej - 00000100 itd. Te liczby binarne w notacji dziesiętnej tworzą następujący ciąg: 1, 2, 4, 8, 16, 32, 64, 128 i są potęgami dwójki od 0 do 7.
W związku z tym w pętli () przez liczbę diod przeliczamy od 0 do 7. Funkcja pow (baza, stopień) podnosi 2 do potęgi licznika cykli. Mikrokontrolery nie pracują bardzo dokładnie z liczbami typu „double”, dlatego do przeliczenia wyniku na liczbę całkowitą używamy funkcji round(). I przekazujemy wynikową liczbę do rejestru przesuwnego. Dla jasności monitor portu szeregowego wyświetla wartości, które uzyskuje się podczas tej operacji: biegnie się po cyfrach - diody LED świecą się falą.
Krok 6
Diody zapalają się po kolei i obserwujemy wędrującą „falę” świateł. Diody sterowane są za pomocą rejestru przesuwnego, do którego podłączyliśmy się poprzez interfejs SPI. W efekcie tylko 3 piny Arduino służą do napędzania 8 diod LED.
Przeanalizowaliśmy najprostszy przykład współpracy Arduino z magistralą SPI. Bardziej szczegółowo rozważymy połączenie rejestrów przesuwnych w osobnym artykule.