Home Page : http://www.mcugear.com/en/ MCU Gear manual mode (circuit quick changer!) You can save 8 schematic(bank 0-7) manually and change it quickly.

Dependents:   MCUGear_Ver2

Fork of MCUGear by mille feuille

This is a MCU Gear manual mode library.

(日本語は英語の次に書いてあります。)

MCU Gear is a digital wiring extension board.(A kind of dynamic circuit changer.)

It can change its wiring dynamically, without the need of rewiring your device.

Your MCU can be connected to a theoretical maximum of 120 devices.

detail : http://mcugear.com/en/

You can save 8 schematics (bank 0-7) on Baseboard.

/media/uploads/Info/bank_2.png

How to use it?

1,include library

1,include library

#include "mbed.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

2,Declare Module

(! You do not pile up each module if you want to open module gate simultaneously.)

2,Declare Module

MCUGear myModule1(p28, p27, N_***_***_***);
MCUGear myModule2(p28, p27, N_***_***_***);

myModule: Optional name for Module.

p28, p27, : I2C pins (KL25Z is "PTE0, PTE1")

N_*_*_* : Address. You can set it on the reverse side of the Module board.

3,Initialize baseboard

3,Initialize baseboard

initBase();

4,Make wiring data

4,Call wiring register

    startReg(bank);

    myModule1.setWire(IO_MBED_P9, IO_REG_IN_DIR, 5);
    myModule1.setWire(IO_MBED_P15, IO_REG_OUT_DIR, 2);
    myModule1.setWire(IO_MBED_P12, IO_REG_OUT_DIR, 0);

    myModule2.setWire(IO_MBED_P13, IO_REG_OUT_DIR, 1);
    myModule2.setWire(IO_MBED_P14, IO_REG_IN_DIR, 3);
    myModule2.setWire(IO_MBED_P16, IO_REG_IN_DIR, 4);


    endReg(bank);

see the reference on MCUGearBaseboard.h file.

4,Call wiring register

// CPU I/O
typedef enum {

#if defined TARGET_LPC1768
  IO_MBED_P15 = 0x80,
  IO_MBED_P13,
  IO_MBED_P16,
  IO_MBED_P12,
  IO_MBED_P5,
  IO_MBED_P11,
  IO_MBED_P23,
  IO_MBED_P22,
  IO_MBED_P26,
  IO_MBED_P10,
  IO_MBED_P21,
  IO_MBED_P9,
  IO_MBED_P6,
  IO_MBED_P7,
  IO_MBED_P8,
  IO_MBED_P14,
  IO_MBED_P24,
  IO_MBED_P25,
  IO_MBED_P28,
  IO_MBED_P27
#endif

#if defined TARGET_KL25Z

  IO_MBED_PTA5 = 0x80,
  IO_MBED_PTC8,
  IO_MBED_PTC9,
  IO_MBED_PTD5,
  IO_MBED_PTA13,
  IO_MBED_PTD2,
  IO_MBED_PTB1,
  IO_MBED_PTB2,
  IO_MBED_PTA2,
  IO_MBED_PTD4,
  IO_MBED_PTB3,
  IO_MBED_PTA12,
  IO_MBED_PTD0,
  IO_MBED_PTD3,
  IO_MBED_PTD1,
  IO_MBED_PTA4,
  IO_MBED_PTB0,
  IO_MBED_PTA1,
  IO_MBED_PTE0, //SDA
  IO_MBED_PTE1  //SCL
#endif
  
} en_cpu_io;

-

startReg function

void startReg(uint8_t bank);

uint8_t bank : The "bank" is schematic layer. You can select from 0 to 7 bank.

setWire function

uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);

setWire() is wiring data to connect pin of MCU to pin of Module.

uint8_t mcuIO : You can choose 18 IOs.

uint8_t direction: choose signal direction IO_REG_OUT_DIR : output from MCU IO_REG_IN_DIR : input to MCU

uint8_t moduleIO: You can select module pin.

endReg function

void endReg(uint8_t bank);

uint8_t bank : The "bank" is schematic layer. You can select from 0 to 7 bank. Must be same as "starReg()".

You can make other schematic(bank) as with the code 4,.

5,Change the schematic (bank)

5,Change the schematic (bank)

void changeBank(uint8_t bank);

You can select the schematic form 0 to 7.

6,Open or close the module gate

6,Open or close the module gate

   myModule1.connectModule();
   myModule2.connectModule();
   ...
   (same as normal mbed code)
   ...

   myModule1.disconnectModule();
   myModule2.disconnectModule();

Now, you can connect the many modules simultaneously with bank system!

Sample code 1

Universal Module and LCD module test program. This is show you that is possible to connect both modules simultaneously.

I set test function board like the below picture.(Universal module)

/media/uploads/Info/test2.png

Sample code 1


#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);


void setIOUni(MCUGear *mcugear);
void setIOLCD(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module
MCUGear LCDM(p28, p27, N_VDD_VSS_VSS);        //LCD Module

DigitalOut Dout1(p11);
DigitalOut Dout2(p12);
DigitalOut Dout3(p13);
DigitalOut Dout4(p14);
DigitalOut Dout5(p15);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    UniM.detectModule();    //save location data in MCUGear class.
    LCDM.detectModule();    //save location data in MCUGear class.
    
    startReg(0);
    setIOUni(&UniM);//make schematic Bank0
    setIOLCD(&LCDM);//make schematic Bank0
    endReg(0);
    
    changeBank(0);//select Bank
    
    
    LCDM.connectModule();
    TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
    lcd.cls();
    lcd.printf("Hello World!\n");
    wait(1);
    LCDM.disconnectModule();
    
    UniM.connectModule();//open the module gate
    LCDM.connectModule();//open the module gate
    while(1) {
        
        //UniM.connectModule();
        //LCDM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);
        
        lcd.printf(" ");    //set IO as a neutral position
        lcd.cls();   //clear LCD
        lcd.printf("sw1 = %d\nsw2 = %d",sw1,sw2);   //write LCD data
        wait_ms(10);    //delay for view the LCD

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
        
      
        //UniM.disconnectModule();//close the module gate
        //LCDM.disconnectModule();//close the module gate
        
        
    }
}


void setIOUni(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P11, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P12, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P13, IO_REG_OUT_DIR,4);
}

void setIOLCD(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR,0);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR,1);
    mcugear->setWire(IO_MBED_P23, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P24, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P25, IO_REG_OUT_DIR,4);
    mcugear->setWire(IO_MBED_P26, IO_REG_OUT_DIR,5);
}


Sample code 2

Universal Module test program. This is show you that is possible to change schematic(bank).

Sample code 2

#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);


void setIOBank0(MCUGear *mcugear);
void setIOBank1(MCUGear *mcugear);
void setIOBank2(MCUGear *mcugear);
void setIOBank3(MCUGear *mcugear);
void setIOBank4(MCUGear *mcugear);
void setIOBank5(MCUGear *mcugear);
void setIOBank6(MCUGear *mcugear);
void setIOBank7(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module

DigitalOut Dout1(p16);
DigitalOut Dout2(p21);
DigitalOut Dout3(p22);
DigitalOut Dout4(p23);
DigitalOut Dout5(p24);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    int location = UniM.detectModule();    //save location data in MCUGear class and you can check return data.Baseboard has 0-47 pin.
    printf("location = %d\n", &location);
    
    startReg(0);
    setIOBank0(&UniM);//make schematic Bank0
    endReg(0);
    
    
    startReg(1);
    setIOBank1(&UniM);//make schematic Bank1
    endReg(1);
    
    startReg(2);
    setIOBank2(&UniM);//make schematic Bank2
    endReg(2);
    
    startReg(3);
    setIOBank3(&UniM);//make schematic Bank3
    endReg(3);
    
    startReg(4);
    setIOBank4(&UniM);//make schematic Bank4
    endReg(4);
    
    startReg(5);
    setIOBank5(&UniM);//make schematic Bank5
    endReg(5);
    
    startReg(6);
    setIOBank6(&UniM);//make schematic Bank6
    endReg(6);
    
    startReg(7);
    setIOBank7(&UniM);//make schematic Bank7
    endReg(7);

    changeBank(0);//select Bank
    
    while(1) {
        
        UniM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
      
        UniM.disconnectModule();
        
        if(sw1==0){//chage Bank
            ++nowBank;
            if(nowBank >= 8){
                nowBank = 0;
            }
            changeBank(nowBank);
            printf("nowBank = %d\r\n",nowBank);
        }
        
        
    }
}


void setIOBank0(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
}

void setIOBank1(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
}

void setIOBank2(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank3(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank4(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}


void setIOBank5(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank6(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank7(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}


日本語説明

MCU Gearのマニュアルモードライブラリです。

detail : http://mcugear.com/en/ 8つの回路図(Bank 0~7 )をベースボードに保存できます。

/media/uploads/Info/bank_2.png

使い方

1,ライブラリをインクルード

1,include library

#include "mbed.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

2,モジュールを定義します。

(! 同じ回路図(Bank)で使うモジュールは積層しないでください。)

2,Declare Module

MCUGear myModule1(p28, p27, N_***_***_***);
MCUGear myModule2(p28, p27, N_***_***_***);

myModule: モジュールに好きな名前を付けてください。

p28, p27, : I2C pins (KL25Z is "PTE0, PTE1")

N_*_*_* : Address. モジュールの裏面に設定したアドレスです。

3,ベースボードの初期化

3,Initialize baseboard

initBase();

4,配線データの作成

4,Call wiring register

    startReg(bank);

    myModule1.setWire(IO_MBED_P9, IO_REG_IN_DIR, 5);
    myModule1.setWire(IO_MBED_P15, IO_REG_OUT_DIR, 2);
    myModule1.setWire(IO_MBED_P12, IO_REG_OUT_DIR, 0);

    myModule2.setWire(IO_MBED_P13, IO_REG_OUT_DIR, 1);
    myModule2.setWire(IO_MBED_P14, IO_REG_IN_DIR, 3);
    myModule2.setWire(IO_MBED_P16, IO_REG_IN_DIR, 4);


    endReg(bank);

IOの定義番号などは MCUGearBaseboard.h ファイルを参考にしてください。

4,Call wiring register

// CPU I/O
typedef enum {

#if defined TARGET_LPC1768
  IO_MBED_P15 = 0x80,
  IO_MBED_P13,
  IO_MBED_P16,
  IO_MBED_P12,
  IO_MBED_P5,
  IO_MBED_P11,
  IO_MBED_P23,
  IO_MBED_P22,
  IO_MBED_P26,
  IO_MBED_P10,
  IO_MBED_P21,
  IO_MBED_P9,
  IO_MBED_P6,
  IO_MBED_P7,
  IO_MBED_P8,
  IO_MBED_P14,
  IO_MBED_P24,
  IO_MBED_P25,
  IO_MBED_P28,
  IO_MBED_P27
#endif

#if defined TARGET_KL25Z

  IO_MBED_PTA5 = 0x80,
  IO_MBED_PTC8,
  IO_MBED_PTC9,
  IO_MBED_PTD5,
  IO_MBED_PTA13,
  IO_MBED_PTD2,
  IO_MBED_PTB1,
  IO_MBED_PTB2,
  IO_MBED_PTA2,
  IO_MBED_PTD4,
  IO_MBED_PTB3,
  IO_MBED_PTA12,
  IO_MBED_PTD0,
  IO_MBED_PTD3,
  IO_MBED_PTD1,
  IO_MBED_PTA4,
  IO_MBED_PTB0,
  IO_MBED_PTA1,
  IO_MBED_PTE0, //SDA
  IO_MBED_PTE1  //SCL
#endif
  
} en_cpu_io;

-

startReg function

void startReg(uint8_t bank);

uint8_t bank : bankは回路図の事で、0~7まで設定できます。動作中にも何度も書き換えも可能です。

setWire function

uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);

setWire()関数はmbedの端子とモジュールの端子の割り振り方を決める関数です。

uint8_t mcuIO : mbedの18端子がアダプターボード(MCUボード)を介してベースボードに接続されています。(残りの端子はアダプターボード(MCUボード)から端子が出ています。)

uint8_t direction: mbedから見て入力か出力かを設定します。 IO_REG_OUT_DIR : output from MCU IO_REG_IN_DIR : input to MCU

uint8_t moduleIO: モジュールの出口の端子をどれにするかを決めます。

endReg function

void endReg(uint8_t bank);

uint8_t bank : bankは回路図の事で、0~7まで設定できます。動作中にも何度も書き換えも可能です。必ず "starReg()"のBankと同じ値にしてください。

上記と同様に、他の回路図(Bank)も作ることができます。

5,回路図(Bank)の切替

5,Change the schematic (bank)

void changeBank(uint8_t bank);

回路図は上記の関数で、Bankの値を0~7を入れれば、すぐに切り替えることができます。 (実行前にモジュールのゲートは閉じておくと安全です。)

6,モジュールのゲート開閉

6,Open or close the module gate

   myModule1.connectModule();
   myModule2.connectModule();
   ...
   (same as normal mbed code)
   ...

   myModule1.disconnectModule();
   myModule2.disconnectModule();

モジュールのゲートを開けるにはconnectModule()関数、閉じるにはdisconnectModule()関数です。

回路図(Bank)を保存して、複数のモジュールゲートを開いたまま動作させることができます!

Sample code 1

ユニバーサルモジュールとLCDモジュールを同時に接続したまま使うテストプログラムです。

ユニバーサルモジュールは以下の図のように接続します。

/media/uploads/Info/test2.png

Sample code 1


#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBase.h"
#include "MCUGear.h"
#include "common.h"

Serial pc(USBTX, USBRX);


void setIOUni(MCUGear *mcugear);
void setIOLCD(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module
MCUGear LCDM(p28, p27, N_VDD_VSS_VSS);        //LCD Module

DigitalOut Dout1(p11);
DigitalOut Dout2(p12);
DigitalOut Dout3(p13);
DigitalOut Dout4(p14);
DigitalOut Dout5(p15);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    UniM.detectModule();    //save location data in MCUGear class.
    LCDM.detectModule();    //save location data in MCUGear class.
    
    startReg(0);
    setIOUni(&UniM);//make schematic Bank0
    setIOLCD(&LCDM);//make schematic Bank0
    endReg(0);
    
    changeBank(0);//select Bank
    
    
    LCDM.connectModule();
    TextLCD lcd(p21, p22, p23, p24, p25, p26, TextLCD::LCD16x2); // rs, e, d4-d7
    lcd.cls();
    lcd.printf("Hello World!\n");
    wait(1);
    LCDM.disconnectModule();
    
    UniM.connectModule();//open the module gate
    LCDM.connectModule();//open the module gate
    while(1) {
        
        //UniM.connectModule();
        //LCDM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);
        
        lcd.printf(" ");    //set IO as a neutral position
        lcd.cls();   //clear LCD
        lcd.printf("sw1 = %d\nsw2 = %d",sw1,sw2);   //write LCD data
        wait_ms(10);    //delay for view the LCD

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
        
      
        //UniM.disconnectModule();//close the module gate
        //LCDM.disconnectModule();//close the module gate
        
        
    }
}


void setIOUni(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P11, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P12, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P13, IO_REG_OUT_DIR,4);
}

void setIOLCD(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR,0);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR,1);
    mcugear->setWire(IO_MBED_P23, IO_REG_OUT_DIR,2);
    mcugear->setWire(IO_MBED_P24, IO_REG_OUT_DIR,3);
    mcugear->setWire(IO_MBED_P25, IO_REG_OUT_DIR,4);
    mcugear->setWire(IO_MBED_P26, IO_REG_OUT_DIR,5);
}


Sample code 2

ユニバーサルモジュールに、沢山の回路図(Bank)を設定して、スイッチ1(sw1)に当たる端子が押されたときにバンクを切り替えて動きます。

Sample code 2

#include "mbed.h"
#include "TextLCD.h"

#include "MCUGearBaseM.h"
#include "MCUGearM.h"
#include "commonM.h"

Serial pc(USBTX, USBRX);

void setIOBank0(MCUGear *mcugear);
void setIOBank1(MCUGear *mcugear);
void setIOBank2(MCUGear *mcugear);
void setIOBank3(MCUGear *mcugear);
void setIOBank4(MCUGear *mcugear);
void setIOBank5(MCUGear *mcugear);
void setIOBank6(MCUGear *mcugear);
void setIOBank7(MCUGear *mcugear);

DigitalOut myled(LED1);

MCUGear UniM(p28, p27, N_VDD_VDD_VDD);       //2 Connector Universal Module

DigitalOut Dout1(p16);
DigitalOut Dout2(p21);
DigitalOut Dout3(p22);
DigitalOut Dout4(p23);
DigitalOut Dout5(p24);

DigitalIn Din1(p9);
DigitalIn Din2(p10);

int main() {
    
    int sw1 = 0;
    int sw2 = 0;
    int nowBank = 0;
    
    initBase(); //initialize Baseboard
    
    //set schematic select 0-7
    int location = UniM.detectModule();    //save location data in MCUGear class and you can check return data.Baseboard has 0-47 pin.
    printf("location = %d\n", &location);
    
    startReg(0);
    setIOBank0(&UniM);//make schematic Bank0
    endReg(0);
    
    
    startReg(1);
    setIOBank1(&UniM);//make schematic Bank1
    endReg(1);
    
    startReg(2);
    setIOBank2(&UniM);//make schematic Bank2
    endReg(2);
    
    startReg(3);
    setIOBank3(&UniM);//make schematic Bank3
    endReg(3);
    
    startReg(4);
    setIOBank4(&UniM);//make schematic Bank4
    endReg(4);
    
    startReg(5);
    setIOBank5(&UniM);//make schematic Bank5
    endReg(5);
    
    startReg(6);
    setIOBank6(&UniM);//make schematic Bank6
    endReg(6);
    
    startReg(7);
    setIOBank7(&UniM);//make schematic Bank7
    endReg(7);

    changeBank(0);//select Bank
    
    while(1) {
        
        UniM.connectModule();
        sw1 = Din1.read();
        sw2 = Din2.read();
        printf("sw1 = %d  sw2 = %d\r\n",sw1,sw2);

        Dout1 = 0;
        Dout2 = 1;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 0;
        Dout3 = 1;
        wait(0.3);
        
        Dout1 = 1;
        Dout2 = 1;
        Dout3 = 0;
        wait(0.3);
      
        UniM.disconnectModule();
        
        if(sw1==0){//chage Bank
            ++nowBank;
            if(nowBank >= 8){
                nowBank = 0;
            }
            changeBank(nowBank);
            printf("nowBank = %d\r\n",nowBank);
        }
        
        
    }
}


void setIOBank0(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
}

void setIOBank1(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
}

void setIOBank2(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank3(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank4(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}


void setIOBank5(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}

void setIOBank6(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 4);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 2);
}

void setIOBank7(MCUGear *mcugear){
    mcugear->setWire(IO_MBED_P10, IO_REG_IN_DIR, 0);
    mcugear->setWire(IO_MBED_P9, IO_REG_IN_DIR, 1);
    mcugear->setWire(IO_MBED_P16, IO_REG_OUT_DIR, 2);
    mcugear->setWire(IO_MBED_P21, IO_REG_OUT_DIR, 3);
    mcugear->setWire(IO_MBED_P22, IO_REG_OUT_DIR, 4);
}


Committer:
Info
Date:
Thu Feb 27 03:30:14 2014 +0000
Revision:
2:7b4657c7b996
Child:
3:4bb3814d4255
MCU Gear manual mode (circuit quick changer!); You can save 8 schematic(bank 0-7) manually and change it quickly.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Info 2:7b4657c7b996 1 /* MCU Gear Library, only for testing MCUGear without any circuit you connected.
Info 2:7b4657c7b996 2 * Copyright (c) 2013, NestEgg Inc., http://www.mcugear.com/
Info 2:7b4657c7b996 3 *
Info 2:7b4657c7b996 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
Info 2:7b4657c7b996 5 * of this software and associated documentation files (the "Software"), to deal
Info 2:7b4657c7b996 6 * in the Software without restriction, including without limitation the rights
Info 2:7b4657c7b996 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Info 2:7b4657c7b996 8 * copies of the Software, and to permit persons to whom the Software is
Info 2:7b4657c7b996 9 * furnished to do so, subject to the following conditions:
Info 2:7b4657c7b996 10 *
Info 2:7b4657c7b996 11 * The above copyright notice and this permission notice shall be included in
Info 2:7b4657c7b996 12 * all copies or substantial portions of the Software.
Info 2:7b4657c7b996 13 *
Info 2:7b4657c7b996 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Info 2:7b4657c7b996 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Info 2:7b4657c7b996 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Info 2:7b4657c7b996 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Info 2:7b4657c7b996 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Info 2:7b4657c7b996 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Info 2:7b4657c7b996 20 * THE SOFTWARE.
Info 2:7b4657c7b996 21 */
Info 2:7b4657c7b996 22
Info 2:7b4657c7b996 23
Info 2:7b4657c7b996 24 //select your mbed--------------------------------------------
Info 2:7b4657c7b996 25 #define LPC1768_mbed
Info 2:7b4657c7b996 26 //#define FS_KL25Z
Info 2:7b4657c7b996 27
Info 2:7b4657c7b996 28 //#define BOOST_MODE //if you want use BANK System, define this.
Info 2:7b4657c7b996 29 //------------------------------------------------------------
Info 2:7b4657c7b996 30
Info 2:7b4657c7b996 31 //For Sample Mltifunction Mofdule-----------------------------
Info 2:7b4657c7b996 32 //#define AD_MODE
Info 2:7b4657c7b996 33 //#define PWM_MODE
Info 2:7b4657c7b996 34 //#define I2C_MODE
Info 2:7b4657c7b996 35
Info 2:7b4657c7b996 36 //------------------------------------------------------------
Info 2:7b4657c7b996 37
Info 2:7b4657c7b996 38 #define numBaseboardIO 48
Info 2:7b4657c7b996 39 #define numMaxModuleIO 12
Info 2:7b4657c7b996 40
Info 2:7b4657c7b996 41 //#define DEBUG //If you need to debug, define this.
Info 2:7b4657c7b996 42 #ifdef LPC1768_mbed
Info 2:7b4657c7b996 43
Info 2:7b4657c7b996 44 #define BaudRate 9600
Info 2:7b4657c7b996 45 #define FPGA_I2C_CLOCK 1000000
Info 2:7b4657c7b996 46 #define MODULE_I2C_CLOCK 1000000
Info 2:7b4657c7b996 47
Info 2:7b4657c7b996 48 #endif
Info 2:7b4657c7b996 49
Info 2:7b4657c7b996 50 #ifdef FS_KL25Z
Info 2:7b4657c7b996 51
Info 2:7b4657c7b996 52 #define BaudRate 19200
Info 2:7b4657c7b996 53 #define FPGA_I2C_CLOCK 2000000 //about 769kHz
Info 2:7b4657c7b996 54 #define MODULE_I2C_CLOCK 2000000
Info 2:7b4657c7b996 55
Info 2:7b4657c7b996 56 #endif
Info 2:7b4657c7b996 57
Info 2:7b4657c7b996 58
Info 2:7b4657c7b996 59 #define FPGA_I2C_ADR 0x78
Info 2:7b4657c7b996 60
Info 2:7b4657c7b996 61 #ifdef DEBUG
Info 2:7b4657c7b996 62 #define BankMaxNum 3 //you can set 1 to 7 BANKs for Debug Mode.
Info 2:7b4657c7b996 63
Info 2:7b4657c7b996 64 #else
Info 2:7b4657c7b996 65 #define BankMaxNum 7 //BANK layers
Info 2:7b4657c7b996 66
Info 2:7b4657c7b996 67 #endif
Info 2:7b4657c7b996 68
Info 2:7b4657c7b996 69 //PCA9674
Info 2:7b4657c7b996 70 //VSS = GND VDD = +3.3V
Info 2:7b4657c7b996 71 //AD2 AD1 AD0
Info 2:7b4657c7b996 72 #define N_VSS_SCL_VSS 0x20
Info 2:7b4657c7b996 73 #define N_VSS_SCL_VDD 0x22
Info 2:7b4657c7b996 74 #define N_VSS_SDA_VSS 0x24
Info 2:7b4657c7b996 75 #define N_VSS_SDA_VDD 0x26
Info 2:7b4657c7b996 76 #define N_VDD_SCL_VSS 0x28
Info 2:7b4657c7b996 77 #define N_VDD_SCL_VDD 0x2A
Info 2:7b4657c7b996 78 #define N_VDD_SDA_VSS 0x2C
Info 2:7b4657c7b996 79 #define N_VDD_SDA_VDD 0x2E
Info 2:7b4657c7b996 80 #define N_VSS_SCL_SCL 0x30
Info 2:7b4657c7b996 81 #define N_VSS_SCL_SDA 0x32
Info 2:7b4657c7b996 82 #define N_VSS_SDA_SCL 0x34
Info 2:7b4657c7b996 83 #define N_VSS_SDA_SDA 0x36
Info 2:7b4657c7b996 84 #define N_VDD_SCL_SCL 0x38
Info 2:7b4657c7b996 85 #define N_VDD_SCL_SDA 0x3A
Info 2:7b4657c7b996 86 #define N_VDD_SDA_SCL 0x3C
Info 2:7b4657c7b996 87 #define N_VDD_SDA_SDA 0x3E
Info 2:7b4657c7b996 88 #define N_VSS_VSS_VSS 0x40
Info 2:7b4657c7b996 89 #define N_VSS_VSS_VDD 0x42
Info 2:7b4657c7b996 90 #define N_VSS_VDD_VSS 0x44
Info 2:7b4657c7b996 91 #define N_VSS_VDD_VDD 0x46
Info 2:7b4657c7b996 92 #define N_VDD_VSS_VSS 0x48
Info 2:7b4657c7b996 93 #define N_VDD_VSS_VDD 0x4A
Info 2:7b4657c7b996 94 #define N_VDD_VDD_VSS 0x4C
Info 2:7b4657c7b996 95 #define N_VDD_VDD_VDD 0x4E
Info 2:7b4657c7b996 96 #define N_VSS_VSS_SCL 0x50
Info 2:7b4657c7b996 97 #define N_VSS_VSS_SDA 0x52
Info 2:7b4657c7b996 98 #define N_VSS_VDD_SCL 0x54
Info 2:7b4657c7b996 99 #define N_VSS_VDD_SDA 0x56
Info 2:7b4657c7b996 100 #define N_VDD_VSS_SCL 0x58
Info 2:7b4657c7b996 101 #define N_VDD_VSS_SDA 0x5A
Info 2:7b4657c7b996 102 #define N_VDD_VDD_SCL 0x5C
Info 2:7b4657c7b996 103 #define N_VDD_VDD_SDA 0x5E
Info 2:7b4657c7b996 104 #define N_SCL_SCL_VSS 0xA0
Info 2:7b4657c7b996 105 #define N_SCL_SCL_VDD 0xA2
Info 2:7b4657c7b996 106 #define N_SCL_SDA_VSS 0xA4
Info 2:7b4657c7b996 107 #define N_SCL_SDA_VDD 0xA6
Info 2:7b4657c7b996 108 #define N_SDA_SCL_VSS 0xA8
Info 2:7b4657c7b996 109 #define N_SDA_SCL_VDD 0xAA
Info 2:7b4657c7b996 110 #define N_SDA_SDA_VSS 0xAC
Info 2:7b4657c7b996 111 #define N_SDA_SDA_VDD 0xAE
Info 2:7b4657c7b996 112 #define N_SCL_SCL_SCL 0xB0
Info 2:7b4657c7b996 113 #define N_SCL_SCL_SDA 0xB2
Info 2:7b4657c7b996 114 #define N_SCL_SDA_SCL 0xB4
Info 2:7b4657c7b996 115 #define N_SCL_SDA_SDA 0xB6
Info 2:7b4657c7b996 116 #define N_SDA_SCL_SCL 0xB8
Info 2:7b4657c7b996 117 #define N_SDA_SCL_SDA 0xBA
Info 2:7b4657c7b996 118 #define N_SDA_SDA_SCL 0xBC
Info 2:7b4657c7b996 119 #define N_SDA_SDA_SDA 0xBE
Info 2:7b4657c7b996 120 #define N_SCL_VSS_VSS 0xC0
Info 2:7b4657c7b996 121 #define N_SCL_VSS_VDD 0xC2
Info 2:7b4657c7b996 122 #define N_SCL_VDD_VSS 0xC4
Info 2:7b4657c7b996 123 #define N_SCL_VDD_VDD 0xC6
Info 2:7b4657c7b996 124 #define N_SDA_VSS_VSS 0xC8
Info 2:7b4657c7b996 125 #define N_SDA_VSS_VDD 0xCA
Info 2:7b4657c7b996 126 #define N_SDA_VDD_VSS 0xCC
Info 2:7b4657c7b996 127 #define N_SDA_VDD_VDD 0xCE
Info 2:7b4657c7b996 128 #define N_SCL_VSS_SCL 0xE0
Info 2:7b4657c7b996 129 #define N_SCL_VSS_SDA 0xE2
Info 2:7b4657c7b996 130 #define N_SCL_VDD_SCL 0xE4
Info 2:7b4657c7b996 131 #define N_SCL_VDD_SDA 0xE6
Info 2:7b4657c7b996 132 #define N_SDA_VSS_SCL 0xE8
Info 2:7b4657c7b996 133 #define N_SDA_VSS_SDA 0xEA
Info 2:7b4657c7b996 134 #define N_SDA_VDD_SCL 0xEC
Info 2:7b4657c7b996 135 #define N_SDA_VDD_SDA 0xEE
Info 2:7b4657c7b996 136
Info 2:7b4657c7b996 137
Info 2:7b4657c7b996 138 //PCA9674A
Info 2:7b4657c7b996 139 //VSS = GND VDD = +3.3V
Info 2:7b4657c7b996 140 //AD2 AD1 AD0
Info 2:7b4657c7b996 141 #define A_VSS_SCL_VSS 0x10
Info 2:7b4657c7b996 142 #define A_VSS_SCL_VDD 0x12
Info 2:7b4657c7b996 143 #define A_VSS_SDA_VSS 0x14
Info 2:7b4657c7b996 144 #define A_VSS_SDA_VDD 0x16
Info 2:7b4657c7b996 145 #define A_VDD_SCL_VSS 0x18
Info 2:7b4657c7b996 146 #define A_VDD_SCL_VDD 0x1A
Info 2:7b4657c7b996 147 #define A_VDD_SDA_VSS 0x1C
Info 2:7b4657c7b996 148 #define A_VDD_SDA_VDD 0x1E
Info 2:7b4657c7b996 149 #define A_VSS_SCL_SCL 0x60
Info 2:7b4657c7b996 150 #define A_VSS_SCL_SDA 0x62
Info 2:7b4657c7b996 151 #define A_VSS_SDA_SCL 0x64
Info 2:7b4657c7b996 152 #define A_VSS_SDA_SDA 0x66
Info 2:7b4657c7b996 153 #define A_VDD_SCL_SCL 0x68
Info 2:7b4657c7b996 154 #define A_VDD_SCL_SDA 0x6A
Info 2:7b4657c7b996 155 #define A_VDD_SDA_SCL 0x6C
Info 2:7b4657c7b996 156 #define A_VDD_SDA_SDA 0x6E
Info 2:7b4657c7b996 157 #define A_VSS_VSS_VSS 0x70
Info 2:7b4657c7b996 158 #define A_VSS_VSS_VDD 0x72
Info 2:7b4657c7b996 159 #define A_VSS_VDD_VSS 0x74
Info 2:7b4657c7b996 160 #define A_VSS_VDD_VDD 0x76
Info 2:7b4657c7b996 161 //#define A_VDD_VSS_VSS 0x78 //This is baseboard address. It is reserved.
Info 2:7b4657c7b996 162 #define A_VDD_VSS_VDD 0x7A
Info 2:7b4657c7b996 163 #define A_VDD_VDD_VSS 0x7C
Info 2:7b4657c7b996 164 #define A_VDD_VDD_VDD 0x7E
Info 2:7b4657c7b996 165 #define A_VSS_VSS_SCL 0x80
Info 2:7b4657c7b996 166 #define A_VSS_VSS_SDA 0x82
Info 2:7b4657c7b996 167 #define A_VSS_VDD_SCL 0x84
Info 2:7b4657c7b996 168 #define A_VSS_VDD_SDA 0x86
Info 2:7b4657c7b996 169 #define A_VDD_VSS_SCL 0x88
Info 2:7b4657c7b996 170 #define A_VDD_VSS_SDA 0x8A
Info 2:7b4657c7b996 171 #define A_VDD_VDD_SCL 0x8C
Info 2:7b4657c7b996 172 #define A_VDD_VDD_SDA 0x8E
Info 2:7b4657c7b996 173 #define A_SCL_SCL_VSS 0x90
Info 2:7b4657c7b996 174 #define A_SCL_SCL_VDD 0x92
Info 2:7b4657c7b996 175 #define A_SCL_SDA_VSS 0x94
Info 2:7b4657c7b996 176 #define A_SCL_SDA_VDD 0x96
Info 2:7b4657c7b996 177 #define A_SDA_SCL_VSS 0x98
Info 2:7b4657c7b996 178 #define A_SDA_SCL_VDD 0x9A
Info 2:7b4657c7b996 179 #define A_SDA_SDA_VSS 0x9C
Info 2:7b4657c7b996 180 #define A_SDA_SDA_VDD 0x9E
Info 2:7b4657c7b996 181 #define A_SCL_SCL_SCL 0xD0
Info 2:7b4657c7b996 182 #define A_SCL_SCL_SDA 0xD2
Info 2:7b4657c7b996 183 #define A_SCL_SDA_SCL 0xD4
Info 2:7b4657c7b996 184 #define A_SCL_SDA_SDA 0xD6
Info 2:7b4657c7b996 185 #define A_SDA_SCL_SCL 0xD8
Info 2:7b4657c7b996 186 #define A_SDA_SCL_SDA 0xDA
Info 2:7b4657c7b996 187 #define A_SDA_SDA_SCL 0xDC
Info 2:7b4657c7b996 188 #define A_SDA_SDA_SDA 0xDE
Info 2:7b4657c7b996 189 #define A_SCL_VSS_VSS 0xF0
Info 2:7b4657c7b996 190 #define A_SCL_VSS_VDD 0xF2
Info 2:7b4657c7b996 191 #define A_SCL_VDD_VSS 0xF4
Info 2:7b4657c7b996 192 #define A_SCL_VDD_VDD 0xF6
Info 2:7b4657c7b996 193 #define A_SDA_VSS_VSS 0xF8
Info 2:7b4657c7b996 194 #define A_SDA_VSS_VDD 0xFA
Info 2:7b4657c7b996 195 #define A_SDA_VDD_VSS 0xFC
Info 2:7b4657c7b996 196 #define A_SDA_VDD_VDD 0xFE
Info 2:7b4657c7b996 197 #define A_SCL_VSS_SCL 0x00
Info 2:7b4657c7b996 198 #define A_SCL_VSS_SDA 0x02
Info 2:7b4657c7b996 199 #define A_SCL_VDD_SCL 0x04
Info 2:7b4657c7b996 200 #define A_SCL_VDD_SDA 0x06
Info 2:7b4657c7b996 201 #define A_SDA_VSS_SCL 0x08
Info 2:7b4657c7b996 202 #define A_SDA_VSS_SDA 0x0A
Info 2:7b4657c7b996 203 #define A_SDA_VDD_SCL 0x0C
Info 2:7b4657c7b996 204 #define A_SDA_VDD_SDA 0x0E
Info 2:7b4657c7b996 205
Info 2:7b4657c7b996 206