Interface SPI Et Arduino

Table des matières:

Interface SPI Et Arduino
Interface SPI Et Arduino

Vidéo: Interface SPI Et Arduino

Vidéo: Interface SPI Et Arduino
Vidéo: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Avril
Anonim

Nous étudions l'interface SPI et connectons un registre à décalage à l'Arduino, auquel nous accéderons en utilisant ce protocole pour contrôler les LED.

Interface SPI
Interface SPI

Nécessaire

  • -Arduino;
  • - registre à décalage 74HC595;
  • - 8 LED;
  • - 8 résistances de 220 Ohm.

Instructions

Étape 1

SPI - Serial Peripheral Interface ou "Serial Peripheral Interface" est un protocole de transfert de données synchrone permettant d'interfacer un périphérique maître avec des périphériques (esclaves). Le maître est souvent un microcontrôleur. La communication entre les appareils s'effectue sur quatre fils, c'est pourquoi SPI est parfois appelé "interface à quatre fils". Ces pneus sont:

MOSI (Master Out Slave In) - ligne de transmission de données du maître aux appareils esclaves;

MISO (Master In Slave Out) - ligne de transmission de l'esclave au maître;

SCLK (Serial Clock) - impulsions d'horloge de synchronisation générées par le maître;

SS (Slave Select) - ligne de sélection de l'appareil esclave; lorsqu'il est sur la ligne "0", l'esclave "comprend" qu'il est en cours d'accès.

Il existe quatre modes de transfert de données (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), en raison de la combinaison de la polarité des impulsions d'horloge (nous travaillons au niveau HAUT ou BAS), de la polarité de l'horloge, du CPOL et de la phase des impulsions d'horloge (synchronisation sur le front montant ou descendant de l'impulsion d'horloge), Clock Phase, CPHA.

La figure montre deux options pour connecter des appareils utilisant le protocole SPI: indépendant et en cascade. Lorsqu'il est connecté indépendamment au bus SPI, le maître communique avec chaque esclave individuellement. Avec une cascade - les appareils esclaves sont déclenchés alternativement, en cascade.

Types de connexions SPI
Types de connexions SPI

Étape 2

Dans l'Arduino, les bus SPI sont sur des ports spécifiques. Chaque carte a sa propre affectation de broches. Pour plus de commodité, les broches sont dupliquées et placées sur un connecteur ICSP (In Circuit Serial Programming) séparé. Veuillez noter qu'il n'y a pas de broche de sélection d'esclave sur le connecteur ICSP - SS, car il est supposé que l'Arduino sera utilisé comme maître sur le réseau. Mais si nécessaire, vous pouvez affecter n'importe quelle broche numérique de l'Arduino en tant que SS.

La figure montre l'affectation standard des broches aux bus SPI pour Arduino UNO et Nano.

Implémentation SPI dans Arduino
Implémentation SPI dans Arduino

Étape 3

Une bibliothèque spéciale a été écrite pour Arduino qui implémente le protocole SPI. Il est connecté comme ceci: au début du programme, ajoutez #include SPI.h

Pour commencer à travailler avec le protocole SPI, vous devez définir les paramètres, puis initialiser le protocole à l'aide de la procédure SPI.beginTransaction (). Vous pouvez le faire avec une seule instruction: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Cela signifie que nous initialisons le protocole SPI à une fréquence de 14 MHz, le transfert de données passe, à partir du MSB (bit le plus significatif), en mode "0".

Après l'initialisation, nous sélectionnons le périphérique esclave en mettant la broche SS correspondante à l'état BAS.

Ensuite, nous transférons les données vers l'appareil esclave avec la commande SPI.transfer().

Après transmission, on remet SS à l'état HAUT.

Le travail avec le protocole se termine par la commande SPI.endTransaction (). Il est souhaitable de minimiser le temps d'exécution du transfert entre les instructions SPI.beginTransaction() et SPI.endTransaction() afin qu'il n'y ait pas de chevauchement si un autre appareil essaie d'initialiser le transfert de données en utilisant des paramètres différents.

Transmission SPI
Transmission SPI

Étape 4

Considérons l'application pratique de l'interface SPI. Nous allons allumer les LED en contrôlant le registre à décalage 8 bits via le bus SPI. Connectons le registre à décalage 74HC595 à l'Arduino. On se connecte à chacune des 8 sorties via une LED (via une résistance de limitation). Le schéma est représenté sur la figure.

Connexion du registre à décalage 74HC595 à Arduino
Connexion du registre à décalage 74HC595 à Arduino

Étape 5

Écrivons un tel croquis.

Tout d'abord, connectons la bibliothèque SPI et initialisons l'interface SPI. Définissons la broche 8 comme broche de sélection esclave. Effacons le registre à décalage en lui envoyant la valeur "0". Nous initialisons le port série.

Pour allumer une LED spécifique à l'aide d'un registre à décalage, vous devez appliquer un nombre de 8 bits à son entrée. Par exemple, pour que la première LED s'allume, nous alimentons le nombre binaire 00000001, pour le deuxième - 0000010, pour le troisième - 00000100, etc. Ces nombres binaires en notation décimale forment la séquence suivante: 1, 2, 4, 8, 16, 32, 64, 128 et sont des puissances de deux de 0 à 7.

En conséquence, dans la boucle () par le nombre de LED, on recalcule de 0 à 7. La fonction pow (base, degré) élève 2 à la puissance du compteur de cycle. Les microcontrôleurs ne fonctionnent pas très précisément avec des nombres de type "double", donc pour convertir le résultat en un entier, on utilise la fonction round(). Et nous transférons le nombre résultant dans le registre à décalage. Pour plus de clarté, le moniteur du port série affiche les valeurs qui sont obtenues lors de cette opération: on parcourt les chiffres - les leds s'allument en vague.

Schéma de pilotage du registre à décalage via le bus SPI
Schéma de pilotage du registre à décalage via le bus SPI

Étape 6

Les LED s'allument à tour de rôle, et nous observons une "vague" de lumières en mouvement. Les LED sont contrôlées à l'aide d'un registre à décalage, auquel nous nous sommes connectés via l'interface SPI. En conséquence, seules 3 broches Arduino sont utilisées pour piloter 8 LED.

Nous avons étudié l'exemple le plus simple du fonctionnement d'un Arduino avec un bus SPI. Nous examinerons plus en détail la connexion des registres à décalage dans un article séparé.

Conseillé: