Rozhranie SPI A Arduino

Obsah:

Rozhranie SPI A Arduino
Rozhranie SPI A Arduino

Video: Rozhranie SPI A Arduino

Video: Rozhranie SPI A Arduino
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Smieť
Anonim

Študujeme rozhranie SPI a pripojíme posuvný register k Arduinu, ku ktorému pristúpime pomocou tohto protokolu na ovládanie LED diód.

SPI rozhranie
SPI rozhranie

Nevyhnutné

  • - Arduino;
  • - posuvný register 74HC595;
  • - 8 LED diód;
  • - 8 odporov 220 Ohm.

Inštrukcie

Krok 1

SPI - sériové periférne rozhranie alebo „sériové periférne rozhranie“je protokol synchrónneho prenosu údajov na prepojenie hlavného zariadenia s periférnymi zariadeniami (slave). Pán je často mikrokontrolér. Komunikácia medzi zariadeniami sa uskutočňuje cez štyri vodiče, a preto sa SPI niekedy označuje ako „štvorvodičové rozhranie“. Tieto pneumatiky sú:

MOSI (Master Out Slave In) - linka na prenos dát z mastera do slave zariadení;

MISO (Master In Slave Out) - prenosové vedenie z podriadeného zariadenia na hlavný;

SCLK (Serial Clock) - synchronizačné hodinové impulzy generované masterom;

SS (Slave Select) - riadok výberu podradeného zariadenia; keď je na linke „0“, podriadený „rozumie“, že k nej niekto pristupuje.

Existujú štyri režimy prenosu dát (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), ktoré sú dané kombináciou polarity hodinových impulzov (pracujeme na úrovni HIGH alebo LOW), polarity hodín, CPOL a fázy hodinových impulzov (synchronizácia na stúpajúcej alebo klesajúcej hrane hodinového impulzu), Clock Phase, CPHA.

Obrázok ukazuje dve možnosti pripojenia zariadení pomocou protokolu SPI: nezávislé a kaskádové. Pri nezávislom pripojení na zbernicu SPI komunikuje nadriadený s každým podriadeným serverom osobitne. Pri kaskáde sa slave zariadenia spúšťajú striedavo, kaskádovo.

Typy pripojení SPI
Typy pripojení SPI

Krok 2

V Arduine sú autobusy SPI na konkrétnych portoch. Každá doska má svoje vlastné priradenie pinov. Pre pohodlie sú kolíky duplikované a umiestnené na samostatnom konektore ICSP (In Circuit Serial Programming). Vezmite prosím na vedomie, že na konektore ICSP - SS, nie je žiadny voliaci pin slave predpokladá sa, že Arduino bude použité ako master v sieti. Ale ak je to potrebné, môžete priradiť ľubovoľný digitálny pin Arduina ako SS.

Obrázok ukazuje štandardné priradenie kolíkov k zberniciam SPI pre Arduino UNO a Nano.

Implementácia SPI v Arduine
Implementácia SPI v Arduine

Krok 3

Pre Arduino bola napísaná špeciálna knižnica, ktorá implementuje protokol SPI. Je to spojené takto: na začiatok programu pridajte #include SPI.h

Ak chcete začať pracovať s protokolom SPI, musíte vykonať nastavenie a potom inicializovať protokol pomocou postupu SPI.beginTransaction (). Môžete to urobiť pomocou jednej inštrukcie: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

To znamená, že inicializujeme protokol SPI na frekvencii 14 MHz, prenos dát prebieha od MSB (najvýznamnejší bit) v režime „0“.

Po inicializácii vyberieme podriadené zariadenie uvedením zodpovedajúceho kolíka SS do stavu LOW.

Potom prenesieme údaje do podriadeného zariadenia pomocou príkazu SPI.transfer ().

Po prenose vraciame SS do stavu VYSOKÉ.

Práca s protokolom končí príkazom SPI.endTransaction (). Je žiaduce minimalizovať čas vykonania prenosu medzi inštrukciami SPI.beginTransaction () a SPI.endTransaction (), aby nedochádzalo k prekrývaniu, ak sa iné zariadenie pokúsi inicializovať prenos údajov pomocou rôznych nastavení.

SPI prenos
SPI prenos

Krok 4

Uvažujme o praktickej aplikácii rozhrania SPI. LED diódy rozsvietime ovládaním 8-bitového posuvného registra cez zbernicu SPI. Pripojme posuvný register 74HC595 k Arduinu. Ku každému z 8 výstupov sa pripájame pomocou LED (cez obmedzujúci odpor). Schéma je znázornená na obrázku.

Pripojenie posuvného registra 74HC595 k Arduinu
Pripojenie posuvného registra 74HC595 k Arduinu

Krok 5

Napíšme taký náčrt.

Najskôr pripojme knižnicu SPI a inicializujme rozhranie SPI. Definujeme pin 8 ako pin výberu otroka. Vymažme posuvný register tak, že mu pošleme hodnotu „0“. Inicializujeme sériový port.

Na rozsvietenie konkrétnej LED diódy pomocou posuvného registra musíte na jej vstup použiť 8-bitové číslo. Napríklad aby sa rozsvietila prvá LED dióda, napájame binárne číslo 00000001, pre druhé - 00000010, pre tretie - 00000100 atď. Tieto binárne čísla v desatinnej notácii tvoria nasledujúcu postupnosť: 1, 2, 4, 8, 16, 32, 64, 128 a sú mocninami dvoch od 0 do 7.

Podľa toho v slučke () počtom LED diód prepočítame z 0 na 7. Funkcia pow (základňa, stupeň) zvýši 2 na výkon počítadla cyklov. Mikrokontroléry nepracujú veľmi presne s číslami typu „double“, takže na prevod výsledku na celé číslo použijeme funkciu round (). A výsledné číslo prenesieme do posuvného registra. Z dôvodu prehľadnosti monitor sériového portu zobrazuje hodnoty, ktoré sa získajú počas tejto operácie: jedna prechádza číslicami - LED diódy sa rozsvietia vo vlne.

Náčrt na riadenie posuvného registra cez zbernicu SPI
Náčrt na riadenie posuvného registra cez zbernicu SPI

Krok 6

LED sa postupne rozsvietia a my pozorujeme cestujúcu „vlnu“svetiel. LED diódy sa ovládajú pomocou posuvného registra, ku ktorému sme sa pripájali cez rozhranie SPI. Vo výsledku sa na pohon 8 LED používajú iba 3 piny Arduino.

Preštudovali sme najjednoduchší príklad toho, ako Arduino pracuje so zbernicou SPI. Pripojeniu posuvných registrov sa budeme podrobnejšie venovať v samostatnom článku.

Odporúča: