SPI- Und Arduino-Schnittstelle

Inhaltsverzeichnis:

SPI- Und Arduino-Schnittstelle
SPI- Und Arduino-Schnittstelle

Video: SPI- Und Arduino-Schnittstelle

Video: SPI- Und Arduino-Schnittstelle
Video: Arduino Workshop - Chapter 5 - Using SPI 2024, April
Anonim

Wir untersuchen die SPI-Schnittstelle und verbinden ein Schieberegister mit dem Arduino, auf das wir mit diesem Protokoll zugreifen, um die LEDs zu steuern.

SPI-Schnittstelle
SPI-Schnittstelle

Notwendig

  • -Arduino;
  • - Schieberegister 74HC595;
  • - 8 LEDs;
  • - 8 Widerstände von 220 Ohm.

Anweisungen

Schritt 1

SPI - Serial Peripheral Interface oder "Serial Peripheral Interface" ist ein synchrones Datenübertragungsprotokoll zum Verbinden eines Master-Geräts mit Peripheriegeräten (Slave). Der Master ist oft ein Mikrocontroller. Die Kommunikation zwischen den Geräten erfolgt über vier Drähte, weshalb SPI manchmal auch als "Vier-Draht-Schnittstelle" bezeichnet wird. Diese Reifen sind:

MOSI (Master Out Slave In) - Datenübertragungsleitung vom Master zu den Slave-Geräten;

MISO (Master In Slave Out) – Übertragungsleitung vom Slave zum Master;

SCLK (Serial Clock) – vom Master erzeugte Synchronisationstaktimpulse;

SS (Slave Select) - Slave-Geräteauswahlleitung; wenn auf Leitung "0", "versteht" der Slave, dass auf ihn zugegriffen wird.

Es gibt vier Datenübertragungsmodi (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), aufgrund der Kombination von Taktpolarität (wir arbeiten auf HIGH- oder LOW-Pegel), Taktpolarität, CPOL und der Phase der Taktpulse (Synchronisation an der steigenden oder fallenden Flanke des Taktimpulses), Taktphase, CPHA.

Die Abbildung zeigt zwei Möglichkeiten zum Anschluss von Geräten über das SPI-Protokoll: unabhängig und kaskadiert. Bei unabhängiger Verbindung mit dem SPI-Bus kommuniziert der Master mit jedem Slave einzeln. Bei einer Kaskade - Slave-Geräte werden abwechselnd in einer Kaskade getriggert.

Arten von SPI-Verbindungen
Arten von SPI-Verbindungen

Schritt 2

Im Arduino befinden sich die SPI-Busse an bestimmten Ports. Jedes Board hat seine eigene Pinbelegung. Der Einfachheit halber sind die Pins dupliziert und auf einem separaten ICSP-Anschluss (In Circuit Serial Programming) platziert. Bitte beachten Sie, dass am ICSP-Anschluss - SS kein Slave-Select-Pin vorhanden ist, da Es wird davon ausgegangen, dass der Arduino als Master im Netzwerk verwendet wird. Bei Bedarf können Sie jedoch einen beliebigen digitalen Pin des Arduino als SS zuweisen.

Die Abbildung zeigt die Standardbelegung der Pins zu den SPI-Bussen für Arduino UNO und Nano.

SPI-Implementierung in Arduino
SPI-Implementierung in Arduino

Schritt 3

Für Arduino wurde eine spezielle Bibliothek geschrieben, die das SPI-Protokoll implementiert. Es ist so verbunden: Fügen Sie am Anfang des Programms #include SPI.h. hinzu

Um mit dem SPI-Protokoll zu arbeiten, müssen Sie die Einstellungen vornehmen und dann das Protokoll mit der Prozedur SPI.beginTransaction() initialisieren. Dies können Sie mit einer Anweisung tun: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Das heißt, wir initialisieren das SPI-Protokoll mit einer Frequenz von 14 MHz, die Datenübertragung geht ab MSB (höchstwertiges Bit) in den "0"-Modus.

Nach der Initialisierung wählen wir das Slave-Gerät aus, indem wir den entsprechenden SS-Pin in den LOW-Zustand versetzen.

Anschließend übertragen wir die Daten mit dem Befehl SPI.transfer() an das Slave-Gerät.

Nach der Übertragung bringen wir SS in den HIGH-Zustand zurück.

Die Arbeit mit dem Protokoll endet mit dem Befehl SPI.endTransaction(). Es ist wünschenswert, die Ausführungszeit der Übertragung zwischen den Anweisungen SPI.beginTransaction() und SPI.endTransaction() zu minimieren, damit es keine Überschneidungen gibt, wenn ein anderes Gerät versucht, die Datenübertragung mit anderen Einstellungen zu initialisieren.

SPI-Übertragung
SPI-Übertragung

Schritt 4

Betrachten wir die praktische Anwendung der SPI-Schnittstelle. Wir werden die LEDs beleuchten, indem wir das 8-Bit-Schieberegister über den SPI-Bus steuern. Verbinden wir das Schieberegister 74HC595 mit dem Arduino. Wir verbinden mit jedem der 8 Ausgänge über eine LED (über einen Begrenzungswiderstand). Das Diagramm ist in der Abbildung dargestellt.

Verbinden des Schieberegisters 74HC595 mit Arduino
Verbinden des Schieberegisters 74HC595 mit Arduino

Schritt 5

Schreiben wir eine solche Skizze.

Zuerst verbinden wir die SPI-Bibliothek und initialisieren die SPI-Schnittstelle. Lassen Sie uns Pin 8 als Slave-Auswahl-Pin definieren. Lassen Sie uns das Schieberegister löschen, indem wir ihm den Wert "0" senden. Wir initialisieren die serielle Schnittstelle.

Um eine bestimmte LED mit einem Schieberegister zum Leuchten zu bringen, müssen Sie eine 8-Bit-Zahl an ihren Eingang anlegen. Damit zum Beispiel die erste LED aufleuchtet, füttern wir die Binärzahl 00000001 für die zweite - 00000010, für die dritte - 00000100 usw. Diese Binärzahlen in dezimaler Schreibweise bilden die folgende Folge: 1, 2, 4, 8, 16, 32, 64, 128 und sind Zweierpotenzen von 0 bis 7.

Dementsprechend berechnen wir in der Schleife () nach der Anzahl der LEDs von 0 bis 7. Die Funktion pow (Basis, Grad) erhöht 2 hoch des Zykluszählers. Mikrocontroller arbeiten mit Zahlen vom Typ "double" nicht sehr genau. Um das Ergebnis in eine ganze Zahl umzuwandeln, verwenden wir die Funktion round(). Und wir übertragen die resultierende Zahl in das Schieberegister. Der Übersichtlichkeit halber zeigt der Monitor der seriellen Schnittstelle die Werte an, die bei diesem Vorgang erhalten werden: Man läuft durch die Ziffern - die LEDs leuchten in einer Welle auf.

Skizze zur Ansteuerung des Schieberegisters über den SPI-Bus
Skizze zur Ansteuerung des Schieberegisters über den SPI-Bus

Schritt 6

Die LEDs leuchten abwechselnd auf und wir beobachten eine wandernde "Welle" von Lichtern. Die LEDs werden über ein Schieberegister angesteuert, an das wir über die SPI-Schnittstelle angeschlossen haben. Als Ergebnis werden nur 3 Arduino-Pins verwendet, um 8 LEDs anzusteuern.

Wir haben das einfachste Beispiel dafür studiert, wie ein Arduino mit einem SPI-Bus funktioniert. Auf den Anschluss von Schieberegistern gehen wir in einem separaten Artikel genauer ein.

Empfohlen: