取得したアナログデータはUSBを通してPCで表示できます。TeraTermなどで確認してみてください。
MCU Gearの各プログラムをダウンロードしてmain.cppに以下のように記述すれば動きます。
#include "mbed.h"
#include "MCUGearBase.h"
#include "MCUGear.h"
#include "common.h"//このファイルの中にある#define LPC1768_mbedを有効、//#define FS_KL25Zを無効にする
//Initialize modules-----------------------------------------------------------------------
MCUGear AD8ch12M(PTE0, PTE1, N_SDA_SDA_SDA,4); //AD(MCP3208) 12bit 8ch Module
//p28,p27はI2C通信バスです。I2Cでデジタルスイッチ群を操作し配線を再構築しています
//N_SCL_SCL_VSSはモジュール基板裏面に設定したアドレスです
//SPI通信をするので4ピン再構築します
//ここでは任意の名前「AD8ch12M」という名前で登録しています
//-----------------------------------------------------------------------------------------
//Sample setting-----------------------------------------------------------------------
SPI spi(PTD2,PTD3,PTD1); // mosi, miso, sclk
DigitalOut cs(PTD0); //for SPI communications
Serial pc(USBTX, USBRX); // tx, rx
//-------------------------------------------------------------------------------------
//sample functions------------------------------------------------------------
void IOSimpleSPI(MCUGear *mcugear); //IO setting for Simple SPI module
int read12bit8chAD(MCUGear *mcugear, char ch); //simple ADC 8ch //I2C端子と、モジュール基板の裏にアドレスを設定、4つの信号端子を使う
//----------------------------------------------------------------------------
//***************************************************************************************
int main() {
initBase(); //initialize Baseboard//ベースボードの初期化
//Set IO --------------------------------------------------------------
IOSimpleSPI(&AD8ch12M);
//IOの配線情報を保存しmbedのどの端子をモジュールのどの端子に当てはめるかを決めます
//--------------------------
int data2[8];
while(1) {
//12bit AD Mobdule-------------------------------------------------
cs = 1; //reset CS pin
AD8ch12M.connectModule(); //connect---//配線情報を基にモジュールとマイコン端子との配線を再構築します
//一度構築すると普通のデジタル回路と同じように扱えます
data2[0] = read12bit8chAD(&AD8ch12M, 0); //0ch//AD 0chの値を取得します
data2[1] = read12bit8chAD(&AD8ch12M, 1); //1ch
data2[2] = read12bit8chAD(&AD8ch12M, 2); //2ch
data2[3] = read12bit8chAD(&AD8ch12M, 3); //3ch
data2[4] = read12bit8chAD(&AD8ch12M, 4); //4ch
data2[5] = read12bit8chAD(&AD8ch12M, 5); //5ch
data2[6] = read12bit8chAD(&AD8ch12M, 6); //6ch
data2[7] = read12bit8chAD(&AD8ch12M, 7); //7ch
AD8ch12M.disconnectModule(); //disconnect---//マイコンとモジュールの配線を切断します
pc.printf("AD 0ch = %d 1ch = %d\n",whoami[0],whoami[1]);//PCに送ります
wait(0.5);
}
}
//***************************************************************************************
//モジュールに搭載されているMCP3202のデバイスを動かすための関数です
//----------------------------------------------------------------------------------
//Simple write for 12bit 8ch AD module
//----------------------------------------------------------------------------------
int read12bit8chAD(MCUGear *mcugear, char ch){
char sendData;
int whoami[3];
char sendData2;
//0000 0000 0110 00 00 [0000 0000 0000]
if(ch < 8){
sendData = 0x18+ch; //0001 1000
sendData2 = sendData >> 2;
sendData = sendData << 6;
}else{
return -1;
}
//12bit AD Mobdule----------------
spi.frequency(2000000); //1MHz for KL25Z
cs = 0;
spi.write(sendData2);
whoami[2] = spi.write(sendData);
whoami[0] = whoami[2]<<8;
whoami[0] = whoami[0] + spi.write(0x00)-0xE000; //get data from AD device
cs = 1;
return whoami[0];
//マイコンとモジュールの配線情報を保存します。
//----------------------------------------------------------------------------------
//IO setting for Multifunction module
//----------------------------------------------------------------------------------
void IOSimpleSPI(MCUGear *mcugear){
uint8_t fio[12];
mcugear->detect_module(fio);//指定したモジュールがベースボードのどこに接続されているかを探してきます
//miso(PTD3),mosi(PTD2),sck(PTD1),cs(PTD0)
mcugear->savePinSetting(0, IO_MBED_PTD3, IO_REG_IN_DIR, fio[0]);//モジュールの0番端子にMISO:IN
mcugear->savePinSetting(1, IO_MBED_PTD2, IO_REG_OUT_DIR, fio[1]);//モジュールの1番端子にMOSI:OUT
mcugear->savePinSetting(2, IO_MBED_PTD1, IO_REG_OUT_DIR, fio[2]);//モジュールの2番端子にSCK:OUT
mcugear->savePinSetting(3, IO_MBED_PTD0, IO_REG_OUT_DIR, fio[3]);//モジュールの3番端子にCS:OUT
#ifdef BOOST_MODE
mcugear->makeCircuit();//これは再構築をショートカットするためにベースボードに配線情報を保存する関数です。
//速度を上げたいときに使えますが、自動的に行われるのでモジュールの積層方法によってタイミングがずれます。
#endif
}
0 件のコメント:
コメントを投稿