NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(SPI: end関数の使い方)

■SPI: end関数
 SPI: end関数は、SPI*1バスを無効にします(ピンモードは変更しません)。

■使用例
 ArduinoIDEで使用するSPI: end関数の使い方は以下の通りです。
 試しにこのプログラムをコチラのデジタルポテンショメーターを使った実験回路に接続したArduinoUNOで実行すると、最初にSPI.begin関数でSPI通信を初期化します。
 次にdigitalPotWrite関数中のSPI.transfer関数でデジタルポテンショメータIC中に6個内蔵されているRDAC*2の中から使用する「address」と設定値「value」を出力します。
 最後にSPI.end関数を実行しSPI通信を終了します。

/*デジタルポットコントロール
   この例では、Analog Devices AD5206デジタルポテンショメータを制御します。
   AD5206は6個のポテンショメータ・チャンネルを備えています。各チャンネルのピンにはラベルが付けられています
   A   - 電源に接続
   W   - ワイパーで抵抗の中間に接続
   B   - GNDに接続

   AD5206はSPIと互換性があり、コマンドには2バイトを送信し、
   1つはチャンネル番号(0~5)で、1つはチャンネル番号
   チャネル(0~255)。

   回路:
     AD5280BRUZ20のAピンは+ 5Vに接続
     AD5280BRUZ20のBピンはGNDに接続
   各Wピンからグランドに接続されたLEDと220Ω抵抗器
     CS   - デジタルピン10(SSピン)
     SDI   - デジタルピン11(MOSIピン)
     CLK   - デジタル・ピン13(SCKピン)
*/

// SPIライブラリには含まれていません。
#include <SPI.h>

// ピン10をデジタルポットのスレーブセレクトとして設定します。
const int slaveSelectPin = 10;

void setup() {
   // slaveSelectPinを出力として設定します。
   pinMode(slaveSelectPin, OUTPUT);
   // initialize SPI:
   SPI.begin();
}

void loop() {
   // デジタルポットの6つのチャンネルを通過します。
   for (int channel = 0; channel < 6; channel++) {
       // このチャンネルの抵抗値をminからmaxに変更します。
       for (int level = 0; level < 255; level++) {
           digitalPotWrite(channel, level);
           delay(10);
       }
       // 2秒待つ
       delay(100);
       // このチャンネルの抵抗をmaxからminに変更します。
       for (int level = 0; level < 255; level++) {
           digitalPotWrite(channel, 255 - level);
           delay(10);
       }
       SPI.end();// SPIバスを無効にします。各ピンの設定は変更されません。
   }
}

void digitalPotWrite(int address, int value) {
   // SSピンをローにしてチップを選択します。
   digitalWrite(slaveSelectPin, LOW);
   //   SPIを介してアドレスと値を送信します。
   SPI.transfer(address);
   SPI.transfer(value);
   // SSピンをハイレベルにしてチップの選択を解除します。
   digitalWrite(slaveSelectPin, HIGH);
}
イメージ 1
図1:プログラム例

■構文
 SPI.end()

■パラメータ
 有りません。

■戻り値
 有りません。 

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る 


 

*1:SPI(英:Serial Peripheral Interface)とは、コンピュータ内部で使われるデバイス同士を接続するバスの事。パラレルバスに比べて接続端子数が少なくて済むシリアルバスの一種で、比較的低速なデータ転送を行うデバイスに利用される。
※SCK(英:Serial Clock)とは、マスタによって生成されたデータ送信を同期させるクロックパルスの事。
※MOSI(英:Master In Slave Out)とは、周辺機器にデータを送信するためのマスターラインの事。
※MISO(英:Master In Slave Out)とは、マスターにデータを送信するためのスレーブラインの事。
※SS(英:Slave Select)とは、マスタが特定のデバイスを有効または無効にするために使用できる各デバイスのピンの事。デバイスのスレーブ選択ピンがLowの時スレーブはマスタと通信し、それがHighになるとマスターを無視します。これにより、同じMISO、MOSI、およびCLKラインを共有する複数のSPIデバイスを持つことが出来る。

*2:RDACとは、Resistor Digital-Analog Conversionの頭文字をとった略称で、デジタルポテンショメータ(デジタル信号で抵抗値を可変させるIC)の事。