spi:arduino:start

no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


spi:arduino:start [Mon. 03.07.2017 10:13] (aktuell) – angelegt wikiadmin
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()]]
  • spi/arduino/start.txt
  • Zuletzt geändert: Mon. 03.07.2017 10:13
  • von wikiadmin