Interfície SPI I Arduino

Taula de continguts:

Interfície SPI I Arduino
Interfície SPI I Arduino

Vídeo: Interfície SPI I Arduino

Vídeo: Interfície SPI I Arduino
Vídeo: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Maig
Anonim

Estudiem la interfície SPI i connectem un registre de desplaçament a l’Arduino, al qual accedirem mitjançant aquest protocol per controlar els LED.

Interfície SPI
Interfície SPI

Necessari

  • - Arduino;
  • - registre de torns 74HC595;
  • - 8 LED;
  • - 8 resistències de 220 Ohm.

Instruccions

Pas 1

SPI - Interfície perifèrica en sèrie o "Interfície perifèrica en sèrie" és un protocol de transferència de dades síncrona per a la interfície d'un dispositiu mestre amb dispositius perifèrics (esclau). El mestre és sovint un microcontrolador. La comunicació entre dispositius es realitza a través de quatre cables, raó per la qual SPI de vegades es denomina "interfície de quatre fils". Aquests pneumàtics són:

MOSI (Master Out Slave In): línia de transmissió de dades des del dispositiu mestre fins als dispositius esclaus;

MISO (Master In Slave Out): línia de transmissió de l'esclau al mestre;

SCLK (Serial Clock): impulsos de rellotge de sincronització generats pel mestre;

SS (Slave Select): línia de selecció de dispositius esclaus; quan es troba a la línia "0", l'esclau "entén" que s'hi accedeix.

Hi ha quatre modes de transferència de dades (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), a causa de la combinació de la polaritat del pols del rellotge (treballem a nivell ALT o BAIX), Polaritat del rellotge, CPOL i la fase dels polsos del rellotge (sincronització a la vora ascendent o descendent del pols del rellotge), Clock Phase, CPHA.

La figura mostra dues opcions per connectar dispositius mitjançant el protocol SPI: independent i en cascada. Quan es connecta independentment al bus SPI, el mestre es comunica amb cada esclau individualment. Amb una cascada: els dispositius esclaus s’activen alternativament, en cascada.

Tipus de connexions SPI
Tipus de connexions SPI

Pas 2

A l’Arduino, els busos SPI es troben en ports específics. Cada tauler té la seva pròpia assignació de pins. Per comoditat, els pins es dupliquen i es col·loquen en un connector ICSP (In Circuit Serial Programming) independent. Tingueu en compte que ja no hi ha cap pin de selecció esclau al connector ICSP - SS se suposa que l'Arduino s'utilitzarà com a mestre a la xarxa. Però, si cal, podeu assignar qualsevol pin digital de l'Arduino com a SS.

La figura mostra l'assignació estàndard dels pins als busos SPI per a Arduino UNO i Nano.

Implementació de SPI a Arduino
Implementació de SPI a Arduino

Pas 3

S'ha escrit una biblioteca especial per a Arduino que implementa el protocol SPI. Està connectat així: al principi del programa, afegiu #include SPI.h

Per començar a treballar amb el protocol SPI, heu d’establir la configuració i inicialitzar el protocol mitjançant el procediment SPI.beginTransaction (). Podeu fer-ho amb una instrucció: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Això significa que inicialitzem el protocol SPI a una freqüència de 14 MHz; la transferència de dades va, a partir de MSB (bit més significatiu), en mode "0".

Després de la inicialització, seleccionem el dispositiu esclau posant el pin SS corresponent a l’estat BAIX.

A continuació, transferim les dades al dispositiu esclau amb l'ordre SPI.transfer ().

Després de la transmissió, tornem SS a l'estat HIGH.

Treballar amb el protocol acaba amb l’ordre SPI.endTransaction (). És desitjable minimitzar el temps d'execució de la transferència entre les instruccions SPI.beginTransaction () i SPI.endTransaction () de manera que no hi hagi cap superposició si un altre dispositiu intenta inicialitzar la transferència de dades mitjançant diferents paràmetres.

Transmissió SPI
Transmissió SPI

Pas 4

Considerem l'aplicació pràctica de la interfície SPI. Encendrem els LED controlant el registre de desplaçament de 8 bits mitjançant el bus SPI. Connectem el registre de desplaçament 74HC595 a l’Arduino. Ens connectem a cadascuna de les 8 sortides mitjançant un LED (mitjançant una resistència limitant). El diagrama es mostra a la figura.

Connexió del registre de desplaçament 74HC595 a Arduino
Connexió del registre de desplaçament 74HC595 a Arduino

Pas 5

Escrivim aquest esbós.

En primer lloc, connectem la biblioteca SPI i inicialitzem la interfície SPI. Definim el pin 8 com el pin de selecció d'esclaus. Esborrem el registre de desplaçaments enviant-hi el valor "0". Inicialitzem el port sèrie.

Per encendre un LED específic mitjançant un registre de desplaçament, heu d'aplicar un número de 8 bits a la seva entrada. Per exemple, perquè el primer LED s’encengui, alimentem el número binari 00000001, el segon - 00000010, el tercer - 00000100, etc. Aquests nombres binaris en notació decimal formen la següent seqüència: 1, 2, 4, 8, 16, 32, 64, 128 i són potències de dos de 0 a 7.

En conseqüència, al bucle () pel nombre de LEDs, tornem a calcular de 0 a 7. La funció pow (base, grau) augmenta 2 fins a la potència del comptador de cicles. Els microcontroladors no funcionen amb molta precisió amb números del tipus "doble", de manera que per convertir el resultat en un enter, fem servir la funció round (). I transferim el número resultant al registre de torns. Per a més claredat, el monitor de port sèrie mostra els valors que s’obtenen durant aquesta operació: un passa pels dígits: els LED s’encenen en una ona.

Esbós per controlar el registre de desplaçament a través del bus SPI
Esbós per controlar el registre de desplaçament a través del bus SPI

Pas 6

Els LED s’encenen al seu torn i observem una “ona” de llums viatjant. Els LED es controlen mitjançant un registre de desplaçament, al qual ens hem connectat a través de la interfície SPI. Com a resultat, només s’utilitzen 3 pins Arduino per accionar 8 LED.

Hem estudiat l'exemple més senzill de com funciona un Arduino amb un bus SPI. Considerarem la connexió dels registres de desplaçament amb més detall en un article separat.

Recomanat: