Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

MARY-DUINOにSPI1クラスを追加

Duino-XはLPC1114F/LPC1114Lの48ピンLQFPデバイスを搭載予定です。*1
この48pinデバイスのみユニークで独立なSPI/SSP2ch搭載されています。Duino-Xも本家Arduino FIOにくらべてここに強みが有ったり…

で、GitHubにもこの変更を反映しました。

http://github.com/lynxeyed-atsu/MARY-DUINO
■概要
LPC1114ではSPIが2chあるため、SPIクラス(Arduino API互換)に加えてSPI1クラス(MARY-DUINOオリジナルクラス)を追加した。

■制限
48ピンのLPC1114限定です。MARYでは使うことができません。LPCXpresso LPC1114では使えます

■使い方
基本的にSPIクラスと同じですが
まず始めに

#include   <SPI1.h>

を追加して

SPI1.begin();
SPI1.transfer(0xff);

のように使います。
なお、SPI1(SSP1)で使うピンは

P2_0      (SSEL1)
P2_1      (SCLK1)
P2_2      (MISO1)
P2_3      (MOSI1)

です。
■動作確認
LPCXpresso LPC1114で動作確認を行いました。サンプルコードは前回カラーセンサーS9706の動作テストをしたコードを変更したものです。
SPI1でS9706のデータを読み出しUARTで結果を出力します。写真ではXBee Series2経由ですが、単なる透過モードですのでUSB-UART変換があればそちらの方が便利かもしれません。
f:id:Lynx-EyED:20111229230610j:image
コード:こちらをuser_application.cppに記述します。

#include <libmary.h>
#include <stdlib.h>
#include <SPI1.h>

#define S9706_GATE	P2_0		//Low->High:光量の積算。S9706の6番->(P2_0に接続)
#define S9706_RANGE	P0_7		//受光感度調整。S9706の4番->(P0_7)に接続。

//     PIO2_1	: SCLK -> S9706の5番(CK)
//     PIO2_2	: MISO -> S9706の1番(Dout)

void setup()
{
	pinMode(S9706_GATE,OUTPUT);
	pinMode(S9706_RANGE,OUTPUT);
	Serial.begin(9600);
	SPI1.setBitLength(12);		//12bit ADC
	SPI1.setDataMode(SPI_MODE2);
	SPI1.begin();
	Serial.println("Start");
}

int r,g,b;

void loop()
{
	digitalWrite(S9706_GATE,LOW);
	digitalWrite(S9706_RANGE,HIGH);

	Serial.println("積算を開始");
	digitalWrite(S9706_GATE,HIGH);
	delay(4);


	Serial.println("積算を終了");
	Serial.println("データリード開始");

	digitalWrite(S9706_GATE,LOW);

	r = SPI1.transfer(0xfff);
	g = SPI1.transfer(0xfff);
	b = SPI1.transfer(0xfff);

	Serial.print("r = ");
	Serial.println(r,DEC);
	Serial.print("g = ");
	Serial.println(g,DEC);
	Serial.print("b = ");
	Serial.println(b,DEC);

	delay(1000);

}

おしまい。

*1:いまこの記事を書いてる時点でDuino-X基板はDHLの飛行機の中みたいです