SPI En Arduino Koppelvlak

INHOUDSOPGAWE:

SPI En Arduino Koppelvlak
SPI En Arduino Koppelvlak

Video: SPI En Arduino Koppelvlak

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

Ons bestudeer die SPI-koppelvlak en koppel 'n skofregister aan die Arduino, waartoe ons toegang sal verkry met behulp van hierdie protokol om die LED's te beheer.

SPI koppelvlak
SPI koppelvlak

Nodig

  • - Arduino;
  • - skofregister 74HC595;
  • - 8 LED's;
  • - 8 weerstande van 220 Ohm.

Instruksies

Stap 1

SPI - Seriële perifere koppelvlak of "Seriële perifere koppelvlak" is 'n sinchrone data-oordragprotokol om 'n meestertoestel met randapparatuur (slaaf) te koppel. Die meester is dikwels 'n mikrobeheerder. Kommunikasie tussen toestelle word oor vier drade uitgevoer, en daarom word daar soms na SPI verwys as 'n vierdrad-koppelvlak. Hierdie bande is:

MOSI (Master Out Slave In) - data-oordraglyn van die meester na die slawe-toestelle;

MISO (Master In Slave Out) - transmissielyn van die slaaf na die meester;

SCLK (Serial Clock) - sinchronisasie-klokpulse wat deur die meester gegenereer word;

SS (Slave Select) - seleksielyn vir slawe-toestelle; as hy op lyn "0" is, "verstaan" die slaaf dat daar toegang tot hom is.

Daar is vier wyses van data-oordrag (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), as gevolg van die kombinasie van klokpol polariteit (ons werk op die HOOG- of LAAG-vlak), Klokpolariteit, CPOL en die fase van die klokpulse (sinchronisasie op die stygende of dalende rand van die klokpuls), Klokfase, CPHA.

Die figuur toon twee opsies vir die koppeling van toestelle met behulp van die SPI-protokol: onafhanklik en waterval. As hy onafhanklik van die SPI-bus gekoppel is, kommunikeer die meester individueel met elke slaaf. Met 'n kaskade - slawe-toestelle word afwisselend geaktiveer, in 'n kaskade.

Tipes SPI-verbindings
Tipes SPI-verbindings

Stap 2

In die Arduino is die SPI-busse in spesifieke hawens. Elke bord het sy eie penopdrag. Vir die gemak word die penne gedupliseer en op 'n aparte ICSP-aansluiting (In Circuit Serial Programming) geplaas. Let daarop dat daar geen slaaf-kiespen op die ICSP-aansluiting is nie - SS, aangesien daar word aanvaar dat die Arduino as die meester op die netwerk gebruik sal word. Maar indien nodig, kan u enige digitale pen van die Arduino as 'n SS toewys.

Die figuur toon die standaard toewysing van die penne aan die SPI-busse vir die Arduino UNO en Nano.

SPI implementering in Arduino
SPI implementering in Arduino

Stap 3

'N Spesiale biblioteek is vir Arduino geskryf wat die SPI-protokol implementeer. Dit is so gekoppel: voeg aan die begin van die program #include SPI.h by

Om met die SPI-protokol te begin werk, moet u die instellings instel en dan die protokol initialiseer met behulp van die SPI.beginTransaction () -prosedure. U kan dit doen met een instruksie: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Dit beteken dat ons die SPI-protokol met 'n frekwensie van 14 MHz inisialiseer. Data-oordrag gaan vanaf MSB (die belangrikste bietjie) in die "0" -modus.

Na die initialisering kies ons die slawe-toestel deur die ooreenstemmende SS-pen in die LAAG-toestand te plaas.

Dan dra ons die data oor na die slaafapparaat met die SPI.transfer () opdrag.

Na versending stuur ons SS terug na die HOË toestand.

Werk met die protokol eindig met die SPI.endTransaction () opdrag. Dit is wenslik om die uitvoeringstyd van die oordrag tussen die instruksies van SPI.beginTransaction () en SPI.endTransaction () te beperk, sodat daar geen oorvleueling is as 'n ander toestel data-oordrag met ander instellings probeer inisieer nie.

SPI-oordrag
SPI-oordrag

Stap 4

Kom ons kyk na die praktiese toepassing van die SPI-koppelvlak. Ons sal die LED's aansteek deur die 8-bis-skofregister via die SPI-bus te beheer. Kom ons koppel die 74HC595-skofregister aan die Arduino. Ons verbind met elk van die 8 uitsette via 'n LED (deur 'n beperkte weerstand). Die diagram word in die figuur getoon.

Koppel skofregister 74HC595 aan Arduino
Koppel skofregister 74HC595 aan Arduino

Stap 5

Kom ons skryf so 'n skets.

Laat ons eers die SPI-biblioteek koppel en die SPI-koppelvlak inisialiseer. Kom ons definieer pen 8 as die slawe-seleksiepen. Laat ons die skuifregister skoonmaak deur die waarde "0" daarheen te stuur. Ons initialiseer die reekspoort.

Om 'n spesifieke LED aan te steek met behulp van 'n skofregister, moet u 'n 8-bis-nommer op die invoer toepas. Om die eerste LED byvoorbeeld te laat brand, voer ons die binêre nommer 00000001 in, vir die tweede een - 00000010, vir die derde een - 00000100, ens. Hierdie binêre getalle in desimale notasies vorm die volgende ry: 1, 2, 4, 8, 16, 32, 64, 128 en is magte van twee van 0 tot 7.

Gevolglik herbereken ons in die lus () deur die aantal LED's van 0 tot 7. Die krag (basis, graad) verhoog 2 tot die krag van die siktteller. Mikrobeheerders werk nie baie akkuraat met getalle van die "dubbele" tipe nie. Om die resultaat na 'n heelgetal te omskep, gebruik ons die ronde () -funksie. En ons dra die gevolglike nommer oor na die skofregister. Vir die duidelikheid vertoon die seriële poortmonitor die waardes wat tydens hierdie bewerking verkry word: een loop deur die syfers - die LED's brand in 'n golf.

Skets vir die beheer van die skofregister via die SPI-bus
Skets vir die beheer van die skofregister via die SPI-bus

Stap 6

Die LED's brand op hul beurt en ons sien 'n bewegende "golf" van ligte. Die LED's word beheer met behulp van 'n skofregister, waarop ons via die SPI-koppelvlak gekoppel is. As gevolg hiervan word slegs 3 Arduino-penne gebruik om 8 LED's aan te dryf.

Ons het die eenvoudigste voorbeeld van hoe 'n Arduino met 'n SPI-bus werk bestudeer. Ons sal die verbinding van skofregisters in meer besonderhede in 'n aparte artikel bespreek.

Aanbeveel: