Interfejs SPI I Arduino

Spisu treści:

Interfejs SPI I Arduino
Interfejs SPI I Arduino

Wideo: Interfejs SPI I Arduino

Wideo: Interfejs SPI I Arduino
Wideo: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Może
Anonim

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.

Interfejs SPI
Interfejs SPI

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.

Rodzaje połączeń SPI
Rodzaje połączeń SPI

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.

Implementacja SPI w Arduino
Implementacja SPI w Arduino

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ń.

Transmisja SPI
Transmisja SPI

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.

Podłączanie rejestru przesuwnego 74HC595 do Arduino
Podłączanie rejestru przesuwnego 74HC595 do Arduino

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ą.

Szkic do sterowania rejestrem przesuwnym za pośrednictwem magistrali SPI
Szkic do sterowania rejestrem przesuwnym za pośrednictwem magistrali SPI

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.

Zalecana: