取得したアナログデータは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を有効にする
Serial pc(USBTX, USBRX); // tx, rx Set BaudRate = 115200 in main()
//Initialize modules-----------------------------------------------------------------------
MCUGear AD12M(PTE0, PTE1, N_SCL_SCL_VSS,4); //AD(MCP3202) 12bit Module : Set number of module pin
//p28,p27はI2C通信バスです。I2Cでデジタルスイッチ群を操作し配線を再構築しています
//N_SCL_SCL_VSSはモジュール基板裏面に設定したアドレスです
//SPI通信をするので4ピン再構築します
//ここでは任意の名前「AD12M」という名前で登録しています
//-----------------------------------------------------------------------------------------
//Sample setting-----------------------------------------------------------------------
SPI spi(PTD2,PTD3,PTD1); // mosi, miso, sclk
DigitalOut cs(PTD0); //for SPI communications
void IOSimpleSPI(MCUGear *mcugear); //IO setting for Simple SPI module
int read12bitAD(MCUGear *mcugear, char ch); //simple ADC
//***************************************************************************************
int main() {
initBase(); //initialize Baseboard//ベースボードの初期化
//Set IO --------------------------------------------------------------
IOSimpleSPI(&AD12M);
//IOの配線情報を保存しmbedのどの端子をモジュールのどの端子に当てはめるかを決めます
//---------------------------------------------------------------------
wait(1);
int data1[2];
while(1) {
//12bit AD Mobdule-------------------------------------------------
cs = 1; //reset CS pin
AD12M.connectModule(); //connect---//配線情報を基にモジュールとマイコン端子との配線を再構築します
data1[0] = read12bitAD(&AD12M, 0);//AD 0chの値を取得します
data1[1] = read12bitAD(&AD12M, 1);//AD 1chの値を取得します
AD12M.disconnectModule(); //disconnect---//マイコンとモジュールの配線を切断します
//12bit 2ch AD
pc.printf("0ch%d, 1ch%d, ",data1[0],data1[1]);//PCに送ります
pc.printf("\r\n");
}
}
//モジュールに搭載されているMCP3202のデバイスを動かすための関数です
//Sample functions
//----------------------------------------------------------------------------------
//Simple read 12bit 2ch AD module
//----------------------------------------------------------------------------------
int read12bitAD(MCUGear *mcugear, char ch){
char sendData;
int whoami[3];
spi.frequency(2000000); //1MHz for KL25Z
if(ch == 0){
sendData = 0x80;
}else if(ch == 1){
sendData = 0xC0;
}else{
return -1;
}
//12bit AD Mobdule----------------
// cs = 1; //reset CS pin
// mcugear->connectModule(); //connect---
cs = 0;
//FRDM KL25Z is 8-bit format.
whoami[2] = spi.write(0x01);//0000 0001
whoami[2] = spi.write(sendData);
whoami[0] = whoami[2]<<8;
whoami[0] = whoami[0] + spi.write(0x00) - 0xE000;//0000 0000
// whoami[2] = 0;//clear buffer
cs = 1;
// mcugear->disconnectModule(); //disconnect---
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 件のコメント:
コメントを投稿