Tutorial: Arduino and the SPI bus

Ez az első két fejezetből, amelyben elkezdjük vizsgálni az SPI adatbusz, és hogyan tudjuk irányítani eszközök segítségével azt a mi Arduino rendszerek.

az SPI busz bonyolult felületnek tűnhet a mester számára, azonban ennek a magyarázatnak és gyakorlati példáknak néhány rövid tanulmányozásával hamarosan buszmester lesz! Ehhez megtanuljuk a szükséges elméletet, majd különféle eszközök vezérlésével alkalmazzuk. Ebben a bemutatóban a dolgok a lehető legegyszerűbbek lesznek.

de először is, mi ez? Néhány elmélet …

az SPI a “Soros perifériás interfész”rövidítése. Ez egy szinkron soros adat busz-az adatok mindkét irányban egyidejűleg utazhatnak, szemben (például) az I2C busszal, amely erre nem képes. A szinkron adatátvitel lehetővé tétele érdekében az SPI busz négy vezetéket használ. Ezek a következők:

  • MOSI – Master-out, Slave-in. Ez a sor az Arduino-tól az SPI – vezérelt eszköz(ek) ig terjed;
  • MISO-Master-in, Slave out. Ez a sor az SPI-vezérelt eszköz(ek) adatait hordozza vissza az Arduino-ba;
  • SS-Slave-select. Ez a vonal azt mondja a buszon lévő eszköznek, amellyel kommunikálni akarunk vele. Minden SPI készüléknek egyedi SS vonalra van szüksége az Arduino-hoz;
  • SCK-Soros óra.

ezeken az oktatóanyagokon belül az Arduino táblát tartjuk a mesternek, az SPI eszközöket pedig rabszolgának. Az Arduino Uno és kompatibilis tábláinkon a használt csapok a következők:

  • SS-digital 10. Más digitális pineket is használhat, de a 10 általában az alapértelmezett, mivel a többi SPI PIN mellett található;
  • MOSI-digital 11;
  • MISO-digital 12;
  • SCK-digital 13;

Arduino Mega users – MISO 50, MOSI 51, SCK 52, SS pedig általában 53. Ha Arduino Leonardo-t használ, az SPI csapok az ICSP fejléccsapjain találhatók. További információért lásd itt. Egy vagy több eszközt vezérelhet az SPI busz segítségével. Például egy eszköz esetében a vezetékezés a következő lenne:

sspiss1

Az adatok oda-vissza haladnak az Arduino és az SPI közötti MOSI és MISO vonalak mentén. Ez csak akkor fordulhat elő, ha az SS vonal alacsonyra van állítva. Más szavakkal, hogy kommunikáljunk egy adott SPI eszközzel a buszon, az SS vonalat alacsonyra állítjuk, majd kommunikálunk vele, majd állítsuk vissza a vonalat magasra. Ha két vagy több SPI eszköz van a buszon, a huzalozás a következőkre hasonlít:

sspiss2

figyeljük meg, hogy van két SS vonal – szükségünk van egy-re minden SPI eszközhöz a buszon. Használhatja bármilyen ingyenes digitális kimeneti pin a Arduino, mint egy SS vonal. Ne felejtse el, hogy az összes SS vonal magas legyen, kivéve az akkor használni kívánt SPI eszközhöz csatlakoztatott vonalat.

az adatokat bájtos formában továbbítják az SPI eszközhöz. Mostanra már tudnia kell, hogy a nyolc bit egy bájtot alkot, tehát egy bináris számot képvisel, amelynek értéke nulla és 255 között van.

az SPI eszközökkel való kommunikáció során tudnunk kell, hogy az eszköz hogyan kezeli az adatokat – MSB vagy LSB először. Az MSB (legjelentősebb bit) a bináris szám bal oldala, az LSB (legkevésbé jelentős bit) pedig a szám jobb oldala. Ez az:

binnum

a numerikus értékek SPI busz mentén történő küldése mellett a bináris számok parancsokat is képviselhetnek. Nyolc Be/Ki beállítást jeleníthet meg egy bájtnyi adat felhasználásával, így az eszköz paraméterei beállíthatók egy bájtnyi adat elküldésével. Ezek a paraméterek az egyes eszközöktől függően változnak, és azokat az adott eszköz adatlapján kell szemléltetni. Például egy digitális potenciométer IC hat cserépben:

sdata1

Ez az eszköz két bájtnyi adatot igényel. Az ADDR bájt jelzi a készüléknek, hogy melyik hat potenciométerrel szabályozható (0-tól 5-ig számozva), az adat bájt pedig a potenciométer értéke (0~255). Egész számok segítségével reprezentálhatjuk ezt a két értéket. Például a kettes számú potenciométer 125-re történő beállításához 2-t, majd 125-öt küldünk a készülékre.

hogyan küldünk adatokat az SPI eszközöknek a vázlatainkban?

mindenekelőtt az SPI könyvtárat kell használnunk. Az alapértelmezett Arduino IDE telepítéshez tartozik, ezért tegye a következőket a vázlat elején:

#include "SPI.h"

következő, érvénytelen.setup() állapítsa meg, hogy melyik pin (EK) t fogja használni az SS-hez, majd állítsa be őket kimenetnek. Például:

pinMode(ss, OUTPUT);

ahol az ss-t korábban tízes érték egészének nyilvánították. Most, hogy aktiválja az SPI busz:

SPI.begin();

végül szólnunk kell a rajz, merre kell küldeni adatokat, MSB vagy LSB első segítségével

SPI.setBitOrder(MSBFIRST);

vagy

SPI.setBitOrder(LSBFIRST);

Amikor itt az ideje, hogy adatokat küldjön le az SPI busz a készülék, három dolgot kell tennünk. Először állítsa alacsonyra a digitális pin-kódot az SS-vel:

digitalWrite(SS, LOW);

majd küldje el az adatokat bájtban, egy bájttal egy időben:

SPI.transfer(value);

érték lehet egész/bájt nulla és 255 között. Végül, amikor befejezte az adatok küldését a készülékre, fejezze be az átvitelt az SS magas beállításával:

digitalWrite(ss, HIGH);

Az adatok küldése meglehetősen egyszerű. Általában az emberek számára a legnehezebb az eszköz adatlapjának értelmezése, hogy megértsék, hogyan kell a parancsokat és az adatokat strukturálni az átvitelhez. De néhány gyakorlattal ezek a kis akadályok leküzdhetők.

most néhány gyakorlati példát!

ideje felszállni az SPI buszra és irányítani néhány eszközt. Az alábbi példák követésével gyakorlati ismereteket kell szereznie arról, hogy az SPI busz és eszközök hogyan használhatók az Arduino tábláinkkal.

MCP4162 példa

első példánk egy egyszerű, mégis érdekes részt fog használni-egy digitális potenciométert – az I2C oktatóanyagban is használtunk). Ezúttal van egy Microchip MCP4162 sorozatú 10K reosztát:

digipotss

itt található a perusal adatlapja. Ennek vezérléséhez két bájtnyi adatot kell küldenünk – az első bájt a vezérlő bájt, szerencsére ebben a példában mindig nulla (mivel az ablaktörlő értéke 00h). A második bájt az ablaktörlő beállításának értéke, amely szabályozza az ellenállást. Tehát az ablaktörlő beállításához három dolgot kell tennünk vázlatunkban…

először állítsa az SS (slave select) Sort alacsonyra:

digitalWrite(10, LOW);

majd küldje el az adatok két bájtját:

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

végül állítsa vissza az SS Sort magasra:

digitalWrite(10, HIGH);

könnyen elvégezhető. Kapcsolat az Arduino board nagyon egyszerű – fontolja meg a MCP4162 bekötés:

mcp4162pinout

Vdd csatlakozik 5V, Vss, hogy a GND, CS digitális 10, BETEG digitális 13, SDI, hogy a digitális 11-SDO-digitális 12. Most futtassuk át az MCP4162 elérhető értékeit a következő vázlatban:

/* 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); }}

most a vázlat eredményeinek megtekintéséhez. A következő videoklipben az ellenállási tartományon keresztül futunk fel, majd multiméterrel mérjük meg a reosztát értékét:

mielőtt továbblépne, ha a digitális potenciométerek újak az Ön számára, fontolja meg a Microchip által írt rövid útmutató elolvasását a mechanikai és digitális potenciométerek közötti különbségekről.

egy másik példa:

ebben a példában az Ad5204 analóg eszközöket használjuk négycsatornás digitális potenciométer (adatlap.pdf). Négy 10K Ohm lineáris potenciométert tartalmaz,mindegyik potenciométer 256 pozíció egyikére állítható.

a Beállítások illékonyak, ami azt jelenti, hogy a tápellátás kikapcsolásakor nem emlékeznek rájuk. Ezért a teljesítmény alkalmazásakor a potenciométerek előre vannak beállítva a skála közepére. Példa erre a SOIC-24 felületre szerelhető példa, de DIP formátumban is gyártják.

ad5204ss

az élet megkönnyítése érdekében egy SOIC kitörési táblára lehet forrasztani, amely átalakítja egy átmenő lyukú csomaggá:

ad5204boardss1

ebben a példában négy fényerő fényerejét szabályozzuk LED-ek. A huzalozás nagyon egyszerű. Pinouts vannak az adatlapon.

ex34p2schematic1

és a vázlat:

#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);}

a függvény allOff() és allOn() a potenciométereket a minimumra, illetve a maximálisra állítjuk. A vázlat elején az allOff() funkciót használjuk a LED-ek kikapcsolásához. Erre azért van szükség, mert a bekapcsoláskor az ablaktörlők általában félúton vannak beállítva.

továbbá a blinkAll () funkcióban használjuk őket a LED-ek villogásához. A funkció setPot() elfogadja az ablaktörlő számát (0~3) és értékét az ablaktörlő beállításához (0~255). Végül az indFade () funkció szép munkát végez az egyes LED-ek be-és kikapcsolása érdekében-ami az impulzusszélesség-modulációhoz nagyon hasonló hatást eredményez.

Végül itt van a művelet:

tehát ott van – remélhetőleg egy könnyen érthető bevezetés az SPI busz világába, valamint az eszközök vezérlésének módja. Mint mindig, most már rajtad és a képzeleteden múlik, hogy talál-e valamit, amit irányíthat, vagy más svindlerekhez juthat. A következő SPI-cikkben az SPI-buszon keresztüli adatok olvasását és írását vizsgáljuk.

Ez a bejegyzés hozta neked pmdway.com-mindent a döntéshozók, elektronikai rajongók, ingyenes szállítás világszerte.

hogy naprakész legyen az új hozzászólásokkal tronixstuff.com kérjük, iratkozzon fel a levelezőlistára a jobb oldali mezőben, vagy kövessen minket a Twitteren @tronixstuff.

kérjük, ossza meg másokkal:

nyomtatás

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük