Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

spi:arduino:start [Mon. 03.07.2017 09:13] (aktuell)
wikiadmin angelegt
Zeile 1: Zeile 1:
 +====== SPI mit Arduino ======
  
 +Für die Arduino-Plattform verwendet man am besten die [[https://​www.arduino.cc/​en/​Reference/​SPI|Arduino SPI library]]. Diese nutzt den in allen Arduino-Modellen vorhandenen SPI Hardware-Controller. Hierbei sind die Pins für die SPI-Signale wie folgt festgelegt:
 +
 +TODO
 +
 +Alternativ gibt es auch die Möglichkeit über [[http://​arduino.cc/​en/​Reference/​ShiftIn|shiftIn()]] und [[http://​arduino.cc/​en/​Reference/​ShiftOut|shiftOut()]] mit beliebigen IO-Pins zu arbeiten. Da dies aber alles rein auf Software basiert, ist diese Variante deutlich langsamer und belegt zusätzliche Ressourcen des Chips.
 +
 +==Selbst um CS kümmern==
 +
 +Beim Arduino Uno, Nano muss man sich noch selbst um die Steuerung der Slave-Select (SS) Signale kümmern.
 +
 +==SPI-Parameter einstellen==
 +
 +Mit dem Befehl [[https://​www.arduino.cc/​en/​Reference/​SPISettings|SPISettings()]]:​
 +
 +  SPISettings mySettting(speedMaximum,​ dataOrder, dataMode);
 +
 +oder direkt
 +
 +  SPI.beginTransaction(SPISettings(14000000,​ MSBFIRST, SPI_MODE0));​
 +
 +  * speedMaximum = Integer in Hz
 +  * dataOrder = ''​MSBFIRST''​ (default) oder ''​LSBFIRST''​
 +  * dataMode = ''​SPI_MODE0''​ (default) oder ''​SPI_MODE1,​ SPI_MODE2, SPI_MODE3''​
 +
 +==Schnittstelle initialisieren==
 +
 +<code c>
 +SPI.begin();​
 +</​code>​
 +
 +Der Befehl [[https://​www.arduino.cc/​en/​Reference/​SPIBegin|SPI.begin()]] initialisiert den SPI Bus indem die Pins für ''​SCK'',​ ''​MOSI''​ und ''​SS''​ als Ausgänge und ''​MISO''​ als Eingang konfiguriert. Zudem wird der Ausgangszustand für ''​SCK''​ und ''​MOSI''​ auf LOW, der für ''​SS''​ auf HIGH gesetzt.
 +
 +==Geschwindigkeit einstellen==
 +
 +Mit dem Befehl [[https://​www.arduino.cc/​en/​Reference/​SPISetClockDivider|setClockDivider()]] wird ein Teiler eingestellt. Er gibt an, durch wieviel der Arduino-Prozessortakt geteilt wird um den SCK zu erzeugen. Gültige Teiler sind:
 +
 +  2, 4, 8, 16, 32, 64, 128
 +
 +Für jeden dieser Werte ist eine "​sprechende"​ Konstante definiert:
 +
 +  SPI_CLOCK_DIV2,​ SPI_CLOCK_DIV4,​ ..., SPI_CLOCK_DIV128
 +
 +Auf Uno und Nano ist der Defaultwert ist ''​4''​ ((Konstante ''​SPI_CLOCK_DIV4''​). Beim Due ist er 21, welches einem Takt von 4 MHz entspricht.
 +
 +==Interrupts verwenden==
 +
 +<code c>
 +SPI.usingInterrupt();​
 +</​code>​
 +
 +==Transaktionen durchführen==
 +
 +Unter einer Transaktion versteht man die Kommunikation mit einem bestimmten SPI-Slave. Dabei tauscht nur dieser mit dem Master Daten aus.
 +
 +<code c>
 +SPI.beginTransaction();​
 +...
 +SPI.endTransaction();​
 +</​code>​
 +
 +[[https://​www.arduino.cc/​en/​Tutorial/​SPITransaction|Beispiel einer SPI-Transaktion]]
 +
 +===== Links und Referenzen =====
 +
 +  * [[https://​www.allaboutcircuits.com/​projects/​arduino-spi-library-ltc1286-dac714/​]]
 +  * [[https://​www.arduino.cc/​en/​Reference/​SPIusingInterrupt|SPIusingInterrupt()]]
 +  * [[https://​www.arduino.cc/​en/​Reference/​SPIbeginTransaction|beginTransaction()]]