SPI Og Arduino Interface

Indholdsfortegnelse:

SPI Og Arduino Interface
SPI Og Arduino Interface

Video: SPI Og Arduino Interface

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

Vi studerer SPI-grænsefladen og forbinder et skiftregister til Arduino, som vi får adgang til ved hjælp af denne protokol til at styre lysdioderne.

SPI interface
SPI interface

Nødvendig

  • - Arduino;
  • - skiftregister 74HC595;
  • - 8 lysdioder;
  • - 8 modstande på 220 Ohm.

Instruktioner

Trin 1

SPI - Serial Peripheral Interface eller "Serial Peripheral Interface" er en synkron dataoverførselsprotokol til grænseflade mellem en masterenhed og perifere enheder (slave). Mesteren er ofte en mikrocontroller. Kommunikation mellem enheder udføres over fire ledninger, hvorfor SPI undertiden kaldes en "firetrådsgrænseflade". Disse dæk er:

MOSI (Master Out Slave In) - datatransmissionslinje fra master til slaveenheder;

MISO (Master In Slave Out) - transmissionslinje fra slave til master;

SCLK (Serial Clock) - synkroniseringsurimpulser genereret af masteren;

SS (Slave Select) - linje til valg af slaveenhed; når på linjen "0", "forstår" slaven, at den bliver adgang.

Der er fire tilstande til dataoverførsel (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) på grund af kombinationen af urpuls polaritet (vi arbejder på HIGH eller LOW niveau), Clock Polarity, CPOL og fasen af urimpulser (synkronisering på den stigende eller faldende kant af urimpulsen), Urfase, CPHA.

Figuren viser to muligheder for tilslutning af enheder ved hjælp af SPI-protokollen: uafhængig og cascading. Ved uafhængig forbindelse til SPI-bussen kommunikerer masteren individuelt med hver slave. Med en kaskade - slaveenheder udløses skiftevis i en kaskade.

Typer af SPI-forbindelser
Typer af SPI-forbindelser

Trin 2

I Arduino er SPI-busser i specifikke porte. Hver tavle har sin egen pin-tildeling. For nemheds skyld duplikeres stifterne og placeres på et separat ICSP-stik (In Circuit Serial Programming). Bemærk, at der ikke er nogen slave-valgstift på ICSP-stikket - SS, da det antages, at Arduino vil blive brugt som master på netværket. Men hvis det er nødvendigt, kan du tildele enhver digital pin fra Arduino som en SS.

Figuren viser standard tildelingen af stifterne til SPI-busser til Arduino UNO og Nano.

SPI-implementering i Arduino
SPI-implementering i Arduino

Trin 3

Der er skrevet et specielt bibliotek til Arduino, der implementerer SPI-protokollen. Det er forbundet således: I starten af programmet skal du tilføje #include SPI.h

For at begynde at arbejde med SPI-protokollen skal du indstille indstillingerne og derefter initialisere protokollen ved hjælp af SPI.beginTransaction () -proceduren. Du kan gøre dette med en instruktion: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Dette betyder, at vi initialiserer SPI-protokollen med en frekvens på 14 MHz, dataoverførsel går, startende fra MSB (mest signifikant bit), i "0" -tilstand.

Efter initialisering vælger vi slaveenheden ved at sætte den tilsvarende SS-pin i LAV tilstand.

Derefter overfører vi dataene til slaveenheden med kommandoen SPI.transfer ().

Efter transmission returnerer vi SS til HIGH-tilstand.

Arbejde med protokollen slutter med kommandoen SPI.endTransaction (). Det er ønskeligt at minimere udførelsestiden for overførslen mellem SPI.beginTransaction () og SPI.endTransaction () instruktionerne, så der ikke er nogen overlapning, hvis en anden enhed forsøger at initialisere dataoverførsel ved hjælp af forskellige indstillinger.

SPI transmission
SPI transmission

Trin 4

Lad os overveje den praktiske anvendelse af SPI-grænsefladen. Vi tænder lysdioderne ved at styre 8-bit skifteregistret via SPI-bussen. Lad os forbinde 74HC595 skiftregisteret til Arduino. Vi forbinder til hver af de 8 udgange via en LED (gennem en begrænsende modstand). Diagrammet er vist i figuren.

Forbinder skiftregister 74HC595 til Arduino
Forbinder skiftregister 74HC595 til Arduino

Trin 5

Lad os skrive sådan en skitse.

Lad os først forbinde SPI-biblioteket og initialisere SPI-grænsefladen. Lad os definere pin 8 som slave-valg pin. Lad os rydde skiftregisteret ved at sende værdien "0" til det. Vi initialiserer den serielle port.

For at tænde en bestemt LED ved hjælp af et skiftregister skal du anvende et 8-bit nummer på dets input. For eksempel, for at den første LED skal lyse, fodrer vi det binære tal 00000001, for den anden - 00000010, for den tredje - 00000100 osv. Disse binære tal i decimalnotation danner følgende rækkefølge: 1, 2, 4, 8, 16, 32, 64, 128 og er kræfter på to fra 0 til 7.

Følgelig genberegner vi i sløjfen () med antallet af lysdioder fra 0 til 7. Pow (base, grad) -funktionen hæver 2 til cyklustællerens effekt. Microcontrollers fungerer ikke meget nøjagtigt med tal af "dobbelt" type, så for at konvertere resultatet til et heltal bruger vi funktionen round (). Og vi overfører det resulterende nummer til skiftregisteret. For at gøre klarheden viser den serielle portmonitor de værdier, der opnås under denne operation: man løber gennem cifrene - LED'erne lyser i en bølge.

Skitse til styring af skiftregisteret via SPI-bussen
Skitse til styring af skiftregisteret via SPI-bussen

Trin 6

Lysdioderne lyser op igen, og vi ser en vandrende "bølge" af lys. Lysdioderne styres ved hjælp af et skifteregister, som vi tilsluttede via SPI-grænsefladen. Som et resultat bruges kun 3 Arduino-ben til at drive 8 lysdioder.

Vi har studeret det enkleste eksempel på, hvordan en Arduino fungerer med en SPI-bus. Vi vil overveje forbindelsen af skiftregistre mere detaljeret i en separat artikel.

Anbefalede: