Tutorial: Arduino a SPI sběrnice

Toto je první ze dvou kapitol, ve kterých budeme vyšetřovat SPI sběrnice, a jak můžeme ovládat zařízení pomocí to s naším Arduino systémy.

sběrnice SPI se může zdát složitým rozhraním pro zvládnutí, ale s krátkým studiem tohoto vysvětlení a praktickými příklady se brzy stanete mistrem sběrnice! K tomu se naučíme potřebnou teorii a poté ji aplikujeme ovládáním různých zařízení. V tomto tutoriálu budou věci co nejjednodušší.

ale především, co to je? A nějaká teorie…

SPI je zkratka pro „sériové periferní rozhraní“. Jedná se o synchronní sériovou datovou sběrnici-data mohou cestovat oběma směry současně, na rozdíl od (například) sběrnice I2C, která tak nemůže učinit. Pro umožnění synchronního přenosu dat používá sběrnice SPI čtyři vodiče. Jsou nazývány:

  • MOSI-Master-out, Slave-in. Tato linka přenáší data z našeho Arduina do zařízení(zařízení) řízených SPI;
  • MISO-Master-in, Slave out. Tato linka přenáší data ze zařízení řízených SPI zpět do Arduina;
  • SS-Slave-select. Tento řádek říká zařízení na sběrnici, s nímž chceme komunikovat. Každé zařízení SPI potřebuje jedinečnou linku SS zpět do Arduina;
  • sck – sériové hodiny.

v rámci těchto tutoriálů považujeme desku Arduino za master a zařízení SPI za otroky. Na našich Arduino Uno a kompatibilních deskách jsou použité kolíky:

  • SS-digital 10. Můžete použít jiné digitální piny, ale 10 je obecně výchozí, protože je vedle ostatních SPI pinů;
  • MOSI-digital 11;
  • MISO-digital 12;
  • SCK-digital 13;

Uživatelé Arduino Mega-MISO je 50, MOSI je 51, SCK je 52 a SS je obvykle 53. Pokud používáte Arduino Leonardo, kolíky SPI jsou na kolících záhlaví ICSP. Více informací naleznete zde. Pomocí sběrnice SPI můžete ovládat jedno nebo více zařízení. Například pro jedno zařízení, kabeláž by byla:

sspiss1

Data se pohybuje tam a zpět podél MOSI a MISO linky mezi naše Arduino a SPI zařízení. To se může stát pouze tehdy, když je linka SS nastavena na nízkou hodnotu. Jinými slovy, pro komunikaci s konkrétním zařízením SPI na sběrnici nastavíme linku SS na toto zařízení na nízkou, pak s ní komunikujeme a pak nastavíme linku zpět na vysokou. Máme-li dva nebo více SPI zařízení na sběrnici, kabeláž by vypadat takto:

sspiss2

Všimněte si, jak jsou tam dva SS linie – budeme potřebovat jeden pro každou SPI zařízení na sběrnici. Můžete použít libovolný volný digitální výstupní pin na Arduino jako SS linku. Nezapomeňte mít všechny řádky SS vysoké, s výjimkou linky připojené k zařízení SPI, které chcete v té době používat.

Data jsou odesílána do zařízení SPI ve formě bajtů. Nyní byste měli vědět, že osm bitů tvoří jeden bajt, což představuje binární číslo s hodnotou mezi nulou a 255.

při komunikaci s našimi zařízeními SPI musíme vědět, jakým způsobem zařízení jedná s daty – MSB nebo LSB jako první. MSB (nejvýznamnější bit) je levá strana binárního čísla a LSB (nejméně významný bit) je pravá strana čísla. To je:

binnum

Kromě posílání numerických hodnot po SPI sběrnici, binární čísla mohou také představují příkazy. Můžete reprezentovat osm nastavení Zapnutí / vypnutí pomocí jednoho bajtu dat, takže parametry zařízení lze nastavit zasláním bajtu dat. Tyto parametry se budou u každého zařízení lišit a měly by být znázorněny v datovém listu konkrétního zařízení. Například digitální potenciometr IC s šesti hrnce:

sdata1

Toto zařízení vyžaduje dva bajty dat. Bajt ADDR říká zařízení, které ze šesti potenciometrů má ovládat (číslováno 0 až 5), a datový bajt je hodnota potenciometru (0~255). K reprezentaci těchto dvou hodnot můžeme použít celá čísla. Například pro nastavení potenciometru číslo dvě na 125 bychom do zařízení poslali 2 pak 125.

Jak odesíláme data do zařízení SPI v našich náčrtcích?

nejprve musíme použít knihovnu SPI. Je součástí výchozí instalace Arduino IDE, takže na začátek náčrtu vložte následující:

#include "SPI.h"

Další, v void.setup() deklarovat, které pin (y) budou použity pro SS a nastavit je jako výstup. Například

pinMode(ss, OUTPUT);

kde ss bylo dříve deklarováno jako celé číslo hodnoty ten. Nyní, chcete-li aktivovat SPI sběrnice:

SPI.begin();

a konečně musíme říct, skici, který způsob, jak poslat data, MSB nebo LSB první pomocí

SPI.setBitOrder(MSBFIRST);

nebo

SPI.setBitOrder(LSBFIRST);

Když je čas pro odeslání dat po SPI sběrnici do našeho zařízení, tři věci, které potřebují, aby se stalo. Nejprve nastavte digitální pin pomocí SS na nízkou hodnotu:

digitalWrite(SS, LOW);

Pak odeslat data v bajtech, jeden bajt současně pomocí:

SPI.transfer(value);

Hodnota může být celé číslo/byte mezi nulou a 255. Nakonec po dokončení odesílání dat do zařízení ukončete přenos nastavením SS high:

digitalWrite(ss, HIGH);

odesílání dat je poměrně jednoduché. Obecně nejobtížnější částí pro lidi je interpretace datového listu zařízení, aby pochopili, jak je třeba strukturovat příkazy a data pro přenos. Ale s nějakou praxí lze tyto malé překážky překonat.

nyní několik praktických příkladů!

čas se dostat na sběrnici SPI a ovládat některá zařízení. Podle níže uvedených příkladů byste měli získat praktické pochopení toho, jak lze sběrnici SPI a zařízení používat s našimi deskami Arduino.

MCP4162 příklad

náš první příklad bude používat jednoduchou, ale zajímavou část-digitální potenciometr (jeden jsme použili také v tutoriálu I2C). Tentokrát máme Mikročip MCP4162-series 10k odporem:

digipotss

Zde je list pro vaše zjištění. K jeho ovládání potřebujeme poslat dva bajty dat-první bajt je kontrolní Bajt a naštěstí pro tento příklad je vždy nulový (protože Adresa pro hodnotu stěrače je 00h ). Druhý bajt je hodnota pro nastavení stěrače, který řídí odpor. Takže nastavit stěrače musíme udělat tři věci v naší skici…

za Prvé, nastavit SS (slave select) linka nízká:

digitalWrite(10, LOW);

Pak odeslat dva byes dat:

SPI.transfer(0); // command byteSPI.transfer(value); // wiper value

Konečně nastavit SS-line zpět na střední:

digitalWrite(10, HIGH);

Snadno provést. Připojení na náš Arduino deska je velmi jednoduchá – za MCP4162 vývodů:

mcp4162pinout

Vdd připojí k 5V, Vss na GND, CS digitální 10, SCK na digitální 13, SDI digitální 11 a SDO na digitální 12. Nyní projdeme dostupné hodnoty MCP4162 v následujícím náčrtu:

/* SPI bus demo using a Microchip MCP4162 digital potentiometer */#include "SPI.h" // necessary libraryint ss=10; // using digital pin 10 for SPI slave selectint del=200; // used for various delaysvoid setup(){ pinMode(ss, OUTPUT); // we use this for SS pin SPI.begin(); // wake up the SPI bus. SPI.setBitOrder(MSBFIRST); // our MCP4162 requires data to be sent MSB (most significant byte) first}void setValue(int value){ digitalWrite(ss, LOW); SPI.transfer(0); // send command byte SPI.transfer(value); // send value (0~255) digitalWrite(ss, HIGH);}void loop(){ for (int a=0; a<256; a++) { setValue(a); delay(del); } for (int a=255; a>=0; --a) { setValue(a); delay(del); }}

a uvidíme výsledky náčrtu. V následujícím videoklipu projdeme rozsahem odporu a změříme hodnotu reostatu multimetrem:

před posunem vpřed, pokud jsou pro vás digitální potenciometry nové, zvažte přečtení této krátké příručky napsané mikročipem o rozdílech mezi mechanickými a digitálními potenciometry.

Další příklad:

v tomto příkladu použijeme čtyřkanálový digitální potenciometr analogových zařízení AD5204 (datový list.pdf). Obsahuje čtyři lineární potenciometry 10k ohm a každý potenciometr je nastavitelný na jednu z 256 pozic.

nastavení jsou volatilní, což znamená, že se při vypnutí napájení nepamatují. Proto při napájení jsou všechny potenciometry předem nastaveny do středu stupnice. Naším příkladem je příklad povrchové montáže SOIC-24, ale vyrábí se také ve formátu DIP.

ad5204ss

, Aby se život jednodušší, to může být připájeny na SOIC breakout board, který převádí to, aby se průchozí otvor balení:

ad5204boardss1

V tomto příkladu, budeme ovládat jas čtyři Led diody. Zapojení je velmi jednoduché. Pinouts jsou v datovém listu.

ex34p2schematic1

výstup:

#include <SPI.h> // necessary libraryint ss=10; // using digital pin 10 for SPI slave selectint del=5; // used for fading delayvoid setup(){ pinMode(ss, OUTPUT); // we use this for SS pin SPI.begin(); // wake up the SPI bus. SPI.setBitOrder(MSBFIRST); // our AD5204 requires data to be sent MSB (most significant byte) first. See data sheet page 5 allOff(); // we do this as pot memories are volatile}void allOff()// sets all potentiometers to minimum value{ for (int z=0; z<4; z++) { setPot(z,0); }}void allOn()// sets all potentiometers to maximum value{ for (int z=0; z<4; z++) { setPot(z,255); }}void setPot(int pot, int level)// sets potentiometer 'pot' to level 'level'{ digitalWrite(ss, LOW); SPI.transfer(pot); SPI.transfer(level); digitalWrite(ss, HIGH);}void blinkAll(int count){ for (int z=0; zvoid indFade(){ for (int a=0; a<4; a++) { for (int l=0; l<255; l++) { setPot(a,l); delay(del); } for (int l=255; l>=0; --l) { setPot(a,l); delay(del); } }}void allFade(int count){ for (int a=0; a<count; a++)="" {="" for="" (int="" l="0;" l<255;="" l++)="" setpot(0,l);="" setpot(1,l);="" setpot(2,l);="" setpot(3,l);="" delay(del);="" }="">=0; --l) { setPot(0,l); setPot(1,l); setPot(2,l); setPot(3,l); delay(del); } }}void loop(){ blinkAll(3); delay(1000); indFade(); allFade(3);}

funkce allOff() a allOn() slouží k nastavení potenciometrů pro minimální a maximální hodnoty. Na začátku náčrtu používáme allOff() k vypnutí LED. To je nutné, protože při zapnutí jsou stěrače obecně nastaveny na polovinu.

dále je používáme ve funkci blinkAll() k … blikání LED. Funkce setPot () přijímá číslo stěrače (0~3) a hodnotu pro nastavení stěrače (0~255). Konečně funkce indFade () dělá pěknou práci vyblednutí každé LED zapínání a vypínání v pořádku-způsobuje efekt velmi podobný modulaci šířky pulsu.

konečně, tady je v akci:

takže to máte-doufejme, že snadno pochopitelný úvod do světa sběrnice SPI a jak ovládat zařízení uvnitř. Jako vždy, teď je to na vás a vaší fantazii, najít něco řídit nebo dostat do jiné vylomeniny. V dalším článku SPI se podíváme na čtení a zápis dat přes sběrnici SPI.

tento příspěvek vám přináší pmdway.com-vše pro tvůrce a nadšence elektroniky, s bezplatnou dodávkou po celém světě.

Chcete-li mít aktuální informace o nových příspěvcích na tronixstuff.com, přihlaste se prosím do mailing listu v poli vpravo, nebo nás sledujte na Twitteru @tronixstuff.

Prosím, podělte se s ostatními:

Tisk

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *