Arduino – SPI

in deze bibliotheek kunt u communiceren met SPI-apparaten, met de Arduino als master-apparaat.
Om deze bibliotheek te gebruiken
#include <SPI.h>

een korte introductie tot de Serial Peripheral Interface (SPI)

Serial Peripheral Interface (SPI) is een synchrone seriële data protocol gebruikt door microcontrollers voor het snel communiceren met een of meer randapparatuur over korte afstanden. Het kan ook worden gebruikt voor communicatie tussen twee microcontrollers.,

bij een SPI-verbinding is er altijd één hoofdapparaat (meestal een microcontroller) dat de randapparatuur bestuurt., Gewoonlijk zijn er drie regels gemeenschappelijk voor alle apparaten:

  • MISO (Master in Slave Out) – De Slave – regel voor het verzenden van gegevens naar de master,
  • MOSI (Master Out Slave In) – de Master – regel voor het verzenden van gegevens naar de randapparatuur,
  • SCK (seriële klok) – de klokpulsen die de door de master gegenereerde gegevensoverdracht synchroniseren

en één regel specifiek voor elk apparaat:

  • SS (Slave select) – de pin op elk apparaat dat de master kan gebruiken om specifieke apparaten in-en uit te schakelen.,

wanneer de Slave Select pin van een apparaat laag is, communiceert het met de master. Als het hoog is, negeert het de meester. Hierdoor kunt u meerdere SPI-apparaten delen dezelfde MISO, MOSI, en CLK lijnen.

om code te schrijven voor een nieuw SPI-apparaat moet u een paar dingen noteren:

  • Wat is de maximale SPI-snelheid die uw apparaat kan gebruiken? Dit wordt gecontroleerd door de eerste parameter in SPISettings. Als u een chip gebruikt met een waarde van 15 MHz, gebruik dan 15000000. Arduino zal automatisch de beste snelheid gebruiken die gelijk is aan of kleiner is dan het nummer dat u gebruikt met SPISettings.,
  • worden gegevens eerst verplaatst in het meest significante Bit (MSB) of het minst significante Bit (LSB)? Dit wordt gecontroleerd door tweede spisettings parameter, of MSBFIRST of LSBFIRST. De meeste SPI-chips gebruiken MSB eerste gegevensvolgorde.
  • is de dataklok inactief wanneer hoog of laag? Zijn monsters op de stijgende of dalende rand van klokpulsen? Deze modi worden gecontroleerd door de derde parameter in SPISettings.

de SPI-standaard is los en elk apparaat implementeert het een beetje anders. Dit betekent dat u speciale aandacht moet besteden aan het datasheet van het apparaat bij het schrijven van uw code.,

over het algemeen zijn er vier wijzen van transmissie. Deze modi bepalen of gegevens worden verschoven in en uit op de stijgende of dalende rand van het datakloksignaal (de klokfase genoemd), en of de klok inactief is wanneer hoog of laag (de klokpolariteit genoemd).,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.,starttransaction () om de SPI-poort te gebruiken. De SPI-poort wordt geconfigureerd met al uw instellingen. De eenvoudigste en meest efficiënte manier om SPISettings te gebruiken is direct binnen SPI.beginTransaction().Bijvoorbeeld:

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

als andere bibliotheken SPI van interrupts gebruiken, zullen ze geen toegang krijgen tot SPI totdat u SPI.endTransaction()aanroept. De SPI-instellingen worden toegepast aan het begin van de transactie en SPI.endTransaction() verandert de SPI-instellingen niet., Tenzij u, of een bibliotheek, aanroepen starttransaction een tweede keer, de instelling wordt gehandhaafd. Je moet proberen de tijd tussen voordat je SPI.endTransaction() aanroept te minimaliseren, voor de beste compatibiliteit als je programma wordt gebruikt samen met andere bibliotheken die SPI gebruiken.

met de meeste SPI apparaten, na SPI.beginTransaction(), schrijf je de slave select PIN LOW, call SPI.transfer() een aantal keren om gegevens over te dragen, schrijf dan de SS pin HIGH, en tenslotte call je SPI.endTransaction().

voor meer informatie over SPI, zie Wikipedia ‘ s pagina over SPI.,

verbindingen

de volgende tabelweergave waarop de SPI-lijnen op de verschillende Arduino-borden worden uitgedeeld:

merk op dat MISO, MOSI en SCK beschikbaar zijn op een consistente fysieke locatie op de ICSP-header; dit is bijvoorbeeld nuttig bij het ontwerpen van een shield dat op elk bord werkt.

Note about Slave Select (SS) pin on AVR based boards

alle AVR based boards hebben een SS pin die nuttig is wanneer ze fungeren als een slave gecontroleerd door een externe master., Omdat deze bibliotheek alleen master mode ondersteunt, moet deze pin altijd als OUTPUT worden ingesteld, anders kan de spi interface automatisch in slave mode worden gezet door hardware, waardoor de bibliotheek buiten werking wordt gesteld.

het is echter mogelijk om elke pin te gebruiken als Slave Select (SS) voor de apparaten. Het Arduino Ethernet shield gebruikt bijvoorbeeld pin 4 om de SPI-verbinding met de SD-kaart aan boord te regelen, en pin 10 om de verbinding met de Ethernetcontroller te regelen.

voorbeelden

  • Barometerdruksensor: lees luchtdruk en temperatuur van een sensor met behulp van het SPI-protocol.,
  • digitale potentiometer: bestuur een digitale potentiometer AD5206 met behulp van het SPI-protocol.

laatste herziening 2019/12/24 door SM

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *