取得したアナログデータは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(p28, p27, 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(p5, p6, p7); // mosi, miso, sclk
DigitalOut cs(p8); //for SPI communications
Serial pc(USBTX, USBRX); // tx, rx
//-------------------------------------------------------------------------------------
//sample functions------------------------------------------------------------
void IOSimpleSPI(MCUGear *mcugear); //IO setting for Simple SPI module
MCUGear AD8ch12M(PTE0, PTE1, N_SDA_SDA_SDA,4); //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];
if(ch < 8){
sendData = 0x18+ch; //0001 1000
}else{
return -1;
}
//12bit AD Mobdule----------------
spi.frequency(1000000); //1MHz
spi.format(14,0); //Change SPI format mbed only
cs = 0;
spi.write(sendData);
whoami[0] = spi.write(0x0000)-0x2000; //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(p6),mosi(p5),sck(p7),cs(p8)
mcugear->savePinSetting(0, IO_MBED_P6, IO_REG_IN_DIR, fio[0]);//モジュールの0番端子にMISO:IN
mcugear->savePinSetting(1, IO_MBED_P5, IO_REG_OUT_DIR, fio[1]);//モジュールの1番端子にMOSI:OUT
mcugear->savePinSetting(2, IO_MBED_P7, IO_REG_OUT_DIR, fio[2]);//モジュールの2番端子にSCK:OUT
mcugear->savePinSetting(3, IO_MBED_P8, IO_REG_OUT_DIR, fio[3]);//モジュールの3番端子にCS:OUT
#ifdef BOOST_MODE
mcugear->makeCircuit();//これは再構築をショートカットするためにベースボードに配線情報を保存する関数です。
#endif
}
//end of sample functions----------------------------------------------------
0 件のコメント:
コメントを投稿