MARY-DUINOにSPI1クラスを追加
Duino-XはLPC1114F/LPC1114Lの48ピンLQFPデバイスを搭載予定です。*1
この48pinデバイスのみユニークで独立なSPI/SSPが2ch搭載されています。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変換があればそちらの方が便利かもしれません。
コード:こちらを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の飛行機の中みたいです