SPI I Arduino Sučelje

Sadržaj:

SPI I Arduino Sučelje
SPI I Arduino Sučelje

Video: SPI I Arduino Sučelje

Video: SPI I Arduino Sučelje
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Svibanj
Anonim

Proučavamo SPI sučelje i na Arduino povezujemo registar pomaka kojem ćemo pristupiti pomoću ovog protokola za upravljanje LED-ima.

SPI sučelje
SPI sučelje

Potrebno

  • - Arduino;
  • - registar smjene 74HC595;
  • - 8 LED dioda;
  • - 8 otpornika od 220 Ohm.

Upute

Korak 1

SPI - serijsko periferno sučelje ili "serijsko periferno sučelje" je sinkroni protokol za prijenos podataka za povezivanje glavnog uređaja s perifernim uređajima (slave). Master je često mikrokontroler. Komunikacija između uređaja vrši se preko četiri žice, zbog čega se SPI ponekad naziva i "četverožično sučelje". Ove gume su:

MOSI (Master Out Slave In) - linija prijenosa podataka od glavnog do pomoćnih uređaja;

MISO (Master In Slave Out) - dalekovod od slave do mastera;

SCLK (serijski sat) - sinkronizacijski impulsi takta generirani od strane glavnog;

SS (Slave Select) - linija za odabir slave uređaja; kada je na liniji "0", slave "razumije" da mu se pristupa.

Postoje četiri načina prijenosa podataka (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), zbog kombinacije polariteta impulsa takta (radimo na VISOKOJ ili NISKOJ razini), Polariteta sata, CPOL i faze impulsa takta (sinkronizacija na rastućem ili padajućem rubu impulsa sata), Clock Phase, CPHA.

Slika prikazuje dvije mogućnosti povezivanja uređaja pomoću SPI protokola: neovisnu i kaskadnu. Kada se neovisno poveže sa SPI sabirnicom, master komunicira sa svakim slaveom pojedinačno. S kaskadom - slave uređaji se aktiviraju naizmjenično, u kaskadi.

Vrste SPI veza
Vrste SPI veza

Korak 2

U Arduinu se SPI sabirnice nalaze na određenim lukama. Svaka ploča ima svoj dodijeljeni pin. Radi praktičnosti, pinovi se dupliciraju i postavljaju na zasebni ICSP (In Circuit Serial Programming) konektor. Imajte na umu da na ICSP konektoru - SS ne postoji pribadača za odabir slave pretpostavlja se da će se Arduino koristiti kao glavni na mreži. No ako je potrebno, bilo koji digitalni pin Arduina možete dodijeliti kao SS.

Slika prikazuje standardno dodjeljivanje pinova SPI sabirnicama za Arduino UNO i Nano.

Implementacija SPI-a u Arduinu
Implementacija SPI-a u Arduinu

3. korak

Za Arduino je napisana posebna biblioteka koja provodi SPI protokol. Povezan je ovako: na početku programa dodajte #include SPI.h

Da biste započeli rad s SPI protokolom, trebate postaviti postavke, a zatim inicijalizirati protokol pomoću postupka SPI.beginTransaction (). To možete učiniti pomoću jedne upute: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

To znači da inicijaliziramo SPI protokol na frekvenciji od 14 MHz, prijenos podataka ide, počevši od MSB-a (najznačajniji bit), u načinu "0".

Nakon inicijalizacije odabiremo slave uređaj stavljajući odgovarajući SS pin u LOW stanje.

Zatim podatke prenosimo na slave uređaj pomoću naredbe SPI.transfer ().

Nakon prijenosa vraćamo SS u VISOKO stanje.

Rad s protokolom završava naredbom SPI.endTransaction (). Poželjno je minimizirati vrijeme izvršenja prijenosa između uputa SPI.beginTransaction () i SPI.endTransaction (), tako da nema preklapanja ako drugi uređaj pokušava pokrenuti prijenos podataka pomoću različitih postavki.

SPI prijenos
SPI prijenos

4. korak

Razmotrimo praktičnu primjenu sučelja SPI. LED lampice ćemo upaliti upravljanjem 8-bitnog registra pomaka preko SPI sabirnice. Spojimo registar pomaka 74HC595 na Arduino. Na svaki od 8 izlaza spajamo se putem LED diode (kroz ograničavajući otpor). Dijagram je prikazan na slici.

Spajanje registara smjene 74HC595 na Arduino
Spajanje registara smjene 74HC595 na Arduino

Korak 5

Napišimo takvu skicu.

Prvo, spojimo SPI knjižnicu i inicijalizirajmo SPI sučelje. Definirajmo pin 8 kao slave odabir. Očistimo registar pomaka tako što ćemo mu poslati vrijednost "0". Inicijaliziramo serijski port.

Da biste osvijetlili određenu LED diodu pomoću registra pomaka, na njezin ulaz morate primijeniti 8-bitni broj. Primjerice, da bi se prva LED zasvijetlila, unosimo binarni broj 00000001, za drugu - 00000010, za treću - 00000100 itd. Ovi binarni brojevi u decimalnom zapisu tvore sljedeću sekvencu: 1, 2, 4, 8, 16, 32, 64, 128 i snage su dvoje od 0 do 7.

Sukladno tome, u petlji () prema broju LED-a preračunavamo od 0 do 7. Funkcija pow (baza, stupanj) podiže 2 na snagu brojača ciklusa. Mikrokontroleri ne rade vrlo precizno s brojevima tipa "double", pa za pretvaranje rezultata u cijeli broj koristimo funkciju round (). I dobiveni broj prenosimo u registar smjena. Radi jasnoće, monitor serijskog priključka prikazuje vrijednosti dobivene tijekom ove operacije: jedna prolazi kroz znamenke - LED diode svijetle u valu.

Skica za upravljanje registrom pomaka preko SPI sabirnice
Skica za upravljanje registrom pomaka preko SPI sabirnice

Korak 6

LED diode se redom pale, a mi promatramo putujući "val" svjetla. LED diode kontroliraju se pomoću pomičnog registra, na koji smo se spojili putem SPI sučelja. Kao rezultat, za pogon 8 LED dioda koriste se samo 3 Arduino pina.

Proučili smo najjednostavniji primjer kako Arduino radi sa SPI sabirnicom. Povezanost registara smjena detaljnije ćemo razmotriti u zasebnom članku.

Preporučeni: