INHALT
Arduino SPI (Serial Peripheral Interface) bedeutet übersetzt Serielle Peripherie-Schnittstelle und ist ein serielles Kommunikationsprotokoll. Arduino-Mikrocontroller verwenden viele Protokolle für die Kommunikation mit Sensoren und Geräten. Ein häufig verwendetes Protokoll ist die SPI-Schnittstelle. In diesem Artikel befassen wir uns mit dieser Schnittstelle und wie man sie für den Anschluss mehrerer Geräte verwendet.
Bestandteile:
- Arduino Uno / Arduino Nano / Arduino Mega
- Widerstände
- Knöpfen
- Breadboard
- Dupont-Kabel
- Bibliothek SPI.h
Die Arduino SPI – serielle Kommunikation (Serial Peripheral Interface) ist voll duplex – Daten vom Gerät zum Mikrocontroller werden gleichzeitig über die Drähte gesendet und empfangen. Das Master-Gerät sendet Daten an den Slave, und der Slave kann gleichzeitig Daten an den Master senden (normalerweise übernimmt der Arduino-Mikrocontroller diese Rolle). Die serielle Schnittstelle wurde 1970 von Motorola entwickelt.
SPI Kommunikation Arduino Nano: Beschreibung, Beispiel
- MISO (Master in Slave Out) ist die Leitung zum Senden von Daten an den Master
- MOSI (Master Out Slave In) – Datenleitung zum Slave
- CLK (Serial Clock) – Synchronisationsleitung vom Master-Gerät
- SS (Slave Select) – Leitung zur Aktivierung/Deaktivierung von Slave-Geräten
Der Arduino verwendet 4 Leitungen (Drähte), um mit dem SPI-Protokoll zu arbeiten. Bei dieser Schnittstelle gibt es immer ein Master-Gerät (normalerweise ein Arduino-Mikrocontroller) und mehrere Slaves (Sensoren, Displays oder andere Mikrocontroller können Slave-Geräte sein). Das Bild oben zeigt, wie die SPI-Schnittstelle des Arduino Nano (Serial Peripheral Interface Arduino) mit einem oder mehreren Slaves funktioniert.
Implementierung der SPI-Bus auf dem Arduino Mega / Uno
pins | Arduino Uno SPI | Arduino Nano SPI | Arduino Mega SPI |
MISO | 12 | 12 | 50 |
MOSI | 11 | 11 | 51 |
SCK | 13 | 13 | 52 |
SC | 10 | 10 | 53 |
Der Pin des Slave-Geräts (SS) muss auf „low“ gesetzt werden, um die Kommunikation einzuleiten; wenn der Pin auf „high“ gesetzt wird, ignoriert das Slave-Gerät das Master-Gerät. Das vorstehende Bild zeigt das Verbindungsdiagramm der drei Geräte über die Spi-Schnittstelle, wobei die SCLK-, MISO- und MOSI-Leitungen gemeinsam sind und die SS-Leitungen der Geräte an separate Pins (SS1, SS2, SS3) angeschlossen sind.
Wie man zwei Arduino-Boards über den SPI-Bus verbindet
Der Schaltplan der beiden Arduino-Platinen ist in der Abbildung oben dargestellt. Für das Projekt müssen zwei Programme heruntergeladen werden: das erste Programm ist für die Master-Platine und das zweite Programm für die Slave-Platine. Wenn Sie die Taste auf dem Master-Board drücken, leuchtet die mit dem Slave-Board verbundene LED auf. Wenn Sie den Knopf auf dem Arduino-Slave drücken, leuchtet die LED auf dem Arduino-Master.
Programm für Masterplatine Arduino Uno (Master)
#include "SPI.h" #define LED 13 #define ipbutton 2 int buttonvalue; int x; void setup () { pinMode(ipbutton, INPUT); pinMode(LED, OUTPUT); SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV8); digitalWrite(SS, HIGH); } void loop() { byte Mastersend, Mastereceive; buttonvalue = digitalRead(ipbutton); if(buttonvalue == HIGH) { x = 1; } else { x = 0; } digitalWrite(SS, LOW); Mastersend = x; Mastereceive = SPI.transfer(Mastersend); if(Mastereceive == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(100); }
- Die Software bietet einen Ein/Aus-Schalter für die integrierte LED.
Programm für Slaveplatine Arduino Uno (Slave)
#include "SPI.h" #define LEDpin 13 #define buttonpin 2 volatile boolean received; volatile byte Slavereceived,Slavesend; int buttonvalue; int x; void setup() { pinMode(buttonpin, INPUT); pinMode(LEDpin, OUTPUT); pinMode(MISO, OUTPUT); SPCR |= _BV(SPE); received = false; SPI.attachInterrupt(); } ISR (SPI_STC_vect) { Slavereceived = SPDR; received = true; } void loop() { if(received) { if (Slavereceived==1) { digitalWrite(LEDpin, HIGH); } else { digitalWrite(LEDpin, LOW); } buttonvalue = digitalRead(buttonpin); if (buttonvalue == HIGH) { x=1; } else { x=0; } Slavesend=x; SPDR = Slavesend; delay(100); } }
- Die SPI-Schnittstelle verwendet 4 Leitungen – MISO, MOSI, SCLK und SS.
Arduino SPI.h Bibliothek: Befehle, Beschreibung
#include „SPI.h“ – verbindet die Verwendung der Bibliothek im Programm.
SPI.begin() – initialisiert den SPI-Bus durch Einstellen der Modi SCK, MOSI und SS für die Datenausgabe, wobei die Pins SCK und MOSI mit niedriger Spannung (low) und der Pin SS mit hoher Spannung (high) versorgt werden.
SPI.setClockDivider(divider) – legt den Teilungsfaktor für das SPI-Taktsignal im Verhältnis zur Taktfrequenz des Arduino-Mikrocontrollers fest. Sie können Teiler von 2, 4, 8, 16, 32, 64 oder 128 verwenden.
SPI.attachInterrupt(handler) – aktiviert den Interrupt-Modus im Slave-Gerät. Ein Interrupt wird jedes Mal ausgelöst, wenn das Slave-Gerät Daten vom Master-Gerät empfängt.
SPI.transfer(val) – Die Funktion wird verwendet, um Daten zwischen Master und Slave gleichzeitig zu empfangen und zu übertragen.
Schlussfolgerung. SPI Arduino Mega / Nano ist eine der wichtigsten Schnittstellen für die Kommunikation zwischen Arduino und Geräten. SPI-, IIC- und UART-Protokolle werden häufig verwendet, um Peripheriegeräte anzuschließen, und die Kenntnis der Prinzipien von SPI ist für jeden nützlich. In diesem Artikel werfen wir einen kurzen Blick auf die SPI.h-Bibliothek und den Anschluss von Sensoren über die SPI-Schnittstelle.
Schreibe einen Kommentar