2013年10月24日木曜日

mbed LPC1768 で AD 12bit 2chモジュールを使う

mbedでAD 12bit 2chモジュールを使う場合の説明です。
取得したアナログデータは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 AD12M(p28, p27, 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(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
int read12bitAD(MCUGear *mcugear, char ch);     //simple ADC 
//----------------------------------------------------------------------------

//***************************************************************************************

int main() {
    
    initBase(); //initialize Baseboard//ベースボードの初期化

   //Set IO --------------------------------------------------------------

    IOSimpleSPI(&AD12M);
   //IOの配線情報を保存しmbedのどの端子をモジュールのどの端子に当てはめるかを決めます
   //--------------------------
    int whoami[4];
    while(1) {
       //12bit AD Mobdule-------------------------------------------------

       AD12M.connectModule();   //connect---//配線情報を基にモジュールとマイコン端子との配線を再構築します

       data1[0] = read12bitAD(&AD12M, 0);//AD 0chの値を取得します
       data1[1] = read12bitAD(&AD12M, 1);//AD 1chの値を取得します
       AD12M.disconnectModule();   //disconnect---//マイコンとモジュールの配線を切断します

       pc.printf("AD 0ch = %d  1ch = %d\n",whoami[0],whoami[1]);//PCに送ります

       wait(0.5);

    }    

}
//***************************************************************************************


//モジュールに搭載されているMCP3202のデバイスを動かすための関数です

//Sample functions
//----------------------------------------------------------------------------------
//Simple read 12bit 2ch AD module
//----------------------------------------------------------------------------------
int read12bitAD(MCUGear *mcugear, char ch){

    char sendData;

    int whoami[3];
    
    spi.frequency(1000000);//1MHz
    if(ch == 0){
        sendData = 0x06;
    }else if(ch == 1){
        sendData = 0x07;
    }else{
        return -1;
    }
    //12bit AD Mobdule----------------
    cs = 1; //reset CS pin
    mcugear->connectModule();   //connect---
    spi.format(14,0);    //Change SPI format mbed only
    cs = 0;
    spi.write(sendData);
    wait_us(1);
    whoami[0] = spi.write(0x2000)-0x2000;   //get data from AD device
    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(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 件のコメント:

コメントを投稿