Arduino-SPI

Mit dieser Bibliothek können Sie mit SPI-Geräten kommunizieren, mit dem Arduino als Master-Gerät.
Zur Verwendung dieser Bibliothek
#include <SPI.h>

Eine kurze Einführung in die serielle Peripherieschnittstelle (SPI)

Serielle Peripherieschnittstelle (SPI) ist ein synchrones serielles Datenprotokoll, das von Mikrocontrollern zur schnellen Kommunikation mit einem oder mehreren Peripheriegeräten über kurze Entfernungen verwendet wird. Es kann auch für die Kommunikation zwischen zwei Mikrocontrollern verwendet werden.,

Bei einer SPI-Verbindung gibt es immer ein Master-Gerät (normalerweise einen Mikrocontroller), das die Peripheriegeräte steuert., Typischerweise sind allen Geräten drei Leitungen gemeinsam:

  • MISO (Master In Slave Out) – Die Slave – Leitung zum Senden von Daten an den Master,
  • MOSI (Master Out Slave In) – Die Master – Leitung zum Senden von Daten an die Peripheriegeräte,
  • SCK (Serielle Uhr) – Die Taktpulse, die die vom Master erzeugte Datenübertragung synchronisieren

und eine für jedes Gerät spezifische Leitung:

  • SS (Slave Select) – die Pin auf jedem Gerät, mit der der Master bestimmte Geräte aktivieren und deaktivieren kann.,

Wenn der Slave-Select-Pin eines Geräts niedrig ist, kommuniziert es mit dem Master. Wenn es hoch ist, ignoriert es den Meister. Auf diese Weise können Sie mehrere SPI-Geräte mit denselben MISO -, MOSI-und CLK-Leitungen verwenden.

Um Code für ein neues SPI-Gerät zu schreiben, müssen Sie einige Dinge beachten:

  • Was ist die maximale SPI-Geschwindigkeit, die Ihr Gerät verwenden kann? Dies wird durch den ersten Parameter in SPISettings gesteuert. Wenn Sie einen Chip mit 15 MHz verwenden, verwenden Sie 15000000. Arduino verwendet automatisch die beste Geschwindigkeit, die gleich oder kleiner als die Anzahl ist, die Sie mit SPISettings verwenden.,
  • Werden Daten zuerst im höchstwertigen Bit (MSB) oder im niedrigstwertigen Bit (LSB) verschoben? Dies wird durch den zweiten SPISettings-Parameter gesteuert, entweder MSBFIRST oder LSBFIRST. Die meisten SPI-Chips verwenden MSB erste Datenreihenfolge.
  • Ist die Datenuhr im Leerlauf, wenn hoch oder niedrig? Befinden sich Samples an der steigenden oder fallenden Kante von Taktpulsen? Diese Modi werden durch den dritten Parameter in SPISettings gesteuert.

Der SPI-Standard ist locker und jedes Gerät implementiert ihn etwas anders. Dies bedeutet, dass Sie beim Schreiben Ihres Codes besonders auf das Datenblatt des Geräts achten müssen.,

Im Allgemeinen gibt es vier Übertragungsarten. Diese Modi steuern, ob Daten an der steigenden oder fallenden Kante des Datentaktsignals (Taktphase genannt) ein-und ausgeschaltet werden und ob die Uhr im Leerlauf ist, wenn sie hoch oder niedrig ist (Taktpolarität genannt).,se according to this table:

Mode Clock Polarity (CPOL) Clock Phase (CPHA) Output Edge Data Capture
SPI_MODE0 0 0 Falling Rising
SPI_MODE1 0 1 Rising Falling
SPI_MODE2 1 0 Rising Falling
SPI_MODE3 1 1 Falling Rising

Once you have your SPI parameters, use SPI.,BeginTransaction (), um den SPI-Port zu verwenden. Der SPI-Port wird mit all Ihren Einstellungen konfiguriert. Die einfachste und effizienteste Möglichkeit, SPISettings zu verwenden, befindet sich direkt in SPI.beginTransaction().Beispiel:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

Wenn andere Bibliotheken SPI von Interrupts verwenden, wird verhindert, dass sie auf SPI zugreifen, bis Sie SPI.endTransaction(). Die SPI-Einstellungen werden zu Beginn der Transaktion angewendet und SPI.endTransaction() ändert die SPI-Einstellungen nicht., Wenn Sie oder eine Bibliothek BeginTransaction nicht ein zweites Mal aufrufen, wird die Einstellung beibehalten. Sie sollten versuchen, die Zeit zwischen dem Aufruf von SPI.endTransaction() zu minimieren, um die beste Kompatibilität zu gewährleisten, wenn Ihr Programm zusammen mit anderen Bibliotheken verwendet wird, die SPI verwenden.

Bei den meisten SPI-Geräten schreiben Sie nach SPI.beginTransaction() den Slave select pin LOW, rufen SPI.transfer() beliebig oft auf, um Daten zu übertragen, schreiben dann den SS-Pin HIGH und rufen schließlich SPI.endTransaction()auf.

Weitere Informationen zu SPI finden Sie auf der Wikipedia-Seite zu SPI.,

Verbindungen

In der folgenden Tabelle wird angezeigt, an welchen Pins die SPI-Leitungen auf den verschiedenen Arduino-Boards ausgebrochen sind:

Beachten Sie, dass MISO, MOSI und SCK an einer konsistenten physischen Stelle im ICSP-Header verfügbar sind.

Hinweis zum Slave Select (SS) Pin auf AVR-basierten Boards

Alle AVR-basierten Boards verfügen über einen SS-Pin, der nützlich ist, wenn sie als Slave fungieren, der von einem externen Master gesteuert wird., Da diese Bibliothek nur den Master-Modus unterstützt, sollte dieser Pin immer als AUSGABE festgelegt werden, da sonst die SPI-Schnittstelle von der Hardware automatisch in den Slave-Modus versetzt werden könnte, wodurch die Bibliothek funktionsunfähig wird.

Es ist jedoch möglich, eine beliebige Pin als Slave Select (SS) für die Geräte zu verwenden. Beispielsweise verwendet das Arduino Ethernet Shield Pin 4 zur Steuerung der SPI-Verbindung zur integrierten SD-Karte und Pin 10 zur Steuerung der Verbindung zum Ethernet-Controller.

Beispiele

  • Luftdrucksensor: Lesen Sie Luftdruck und Temperatur von einem Sensor mit dem SPI-Protokoll.,
  • Digitale Pot Control: Control eine AD5206 digitale potentiometer mit die SPI protokoll.

Letzte Änderung 2019/12/24 von SM

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.