当初、うっかり、アナログ入力端子4, 5 にSDAとSCLを接続していたんですが、eXodusino のデフォルトのI2C端子はArduino UNO R3等で 13pin, GND, AREF の先に拡張された SDA, SCL の部分に LPC1114 の P0.5/SDAとP0.4/SCL が接続されています。
以下、ソースですが、eXodusino に Wire.read() が無く、以前の Wire.receive() 関数になっています。LPCXpresso に eXodusino のプロジェクトをインポートして user_apploication.cpp を書き換えます。
//#define _ARDUINO
//#define _RXDUINO
#define _EXODUSINO
#ifdef _RXDUINO
#include <rxduino.h>
#endif
#ifdef _EXODUSINO
#include <libmary.h>
#include <stdio.h>
#endif
#ifdef _ARDUINO
#include <Arduino.h>
#endif
#include <Wire.h>
#define COMPASS_ADDRESS (0b0100001)
// グローバル変数。
const bool DEBUG_ON = true;
void setup()
{
// I2Cバス初期化。
Wire.begin();
// シリアルポート(USB)初期化。
Serial.begin(9600);
Serial.println("\r\nStart...");
// 待機。
delay(500);
}
void loop()
{
short buf[2];
unsigned short data;
// コンパスへのI2C通信開始。
Wire.beginTransmission(COMPASS_ADDRESS);
// Get Data コマンド送信。
Wire.write('A');
// キューの送信。
Wire.endTransmission();
// データ要求。
Wire.requestFrom(COMPASS_ADDRESS, 2);
// データ受信。
for (int i = 0; i < 2; i++)
{
while (Wire.available() == 0);
#ifdef _EXODUSINO
buf[i] = Wire.receive();
#else
buf[i] = Wire.read();
#endif
}
// データ変換。
data = (unsigned short)buf[0];
data = (data << 8) + (unsigned short)buf[1];
Serial.println(data, DEC);
delay(200);
}
おそらく、自分のプロジェクトの設定が間違っていると思うんですが、SWDIOとかSWCLKのポートの設定でLPC-Linkが使えない状態になるのではないかと思ってます。この場合は、 Flash Magic を使用して、改めて bootloader なり、他のプログラムを書き込めば復旧します。NeXtPino では LPC1114 の P0.1 がDigital_1(2ピン目)に出ているので、これをGNDに落とした状態でリセットをかけると USB経由で Flash Magic での書き込みができるはずです。自分は LPC1114 自体を引きぬいて、トラ技についていた MyARM 基板に差し替えて書き換えを行いました。


0 件のコメント:
コメントを投稿