This Automatic mode is the most simple lib for MCU Gear. You don't need to think about Bank.
This is a MCU Gear Automatic 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. But this Automatic mode is you don't think about Bank but little bit slow. Manual Mode is here -> http://mbed.org/users/Info/code/MCUGearM/
How to use it?
1,include library
1,include library
#include "mbed.h" #include "MCUGearBaseA.h" #include "MCUGearA.h" #include "commonA.h"
2,Declare Module
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
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);
see the reference on MCUGearBaseboardA.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;
setWire function
uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);
Set MCU's IO, Directionfrom MCU and module's IO number.
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.
5,Open or close the module gate
5,Open or close the module gate
myModule1.connectModule(); ... (same as normal mbed code) ... myModule1.disconnectModule(); myModule2.connectModule(); ... (same as normal mbed code) ... myModule2.disconnectModule();
If you want to use many modules simultaneously as one circuit, you should use manual mode.
Sample code 1
Universal Module and LCD module test program.
I set test function board like the below picture.(Universal module)
Sample code 1
#include "mbed.h"
#include "TextLCD.h"
#include "MCUGearBaseA.h"
#include "MCUGearA.h"
#include "commonA.h"
Serial pc(USBTX, USBRX); // tx, rx Set BaudRate = 115200 in main()
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;
initBase(); //initialize Baseboard
//set schematic select 0-7
UniM.detectModule(); //save location data in MCUGear class.
LCDM.detectModule(); //save location data in MCUGear class.
setIOUni(&UniM);//make schematic Bank0
setIOLCD(&LCDM);//make schematic Bank0
LCDM.connectModuleA();
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();
while(1) {
UniM.connectModuleA();
sw1 = Din1.read();
sw2 = Din2.read();
printf("sw1 = %d sw2 = %d\r\n",sw1,sw2);
UniM.disconnectModule();
LCDM.connectModuleA();
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
LCDM.disconnectModule();
UniM.connectModuleA();
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();
}
}
void setIOUni(MCUGear *mcugear){
mcugear->setWireA(IO_MBED_P9, IO_REG_IN_DIR, 0);
mcugear->setWireA(IO_MBED_P10, IO_REG_IN_DIR, 1);
mcugear->setWireA(IO_MBED_P11, IO_REG_OUT_DIR,2);
mcugear->setWireA(IO_MBED_P12, IO_REG_OUT_DIR,3);
mcugear->setWireA(IO_MBED_P13, IO_REG_OUT_DIR,4);
}
void setIOLCD(MCUGear *mcugear){
mcugear->setWireA(IO_MBED_P21, IO_REG_OUT_DIR,0);
mcugear->setWireA(IO_MBED_P22, IO_REG_OUT_DIR,1);
mcugear->setWireA(IO_MBED_P23, IO_REG_OUT_DIR,2);
mcugear->setWireA(IO_MBED_P24, IO_REG_OUT_DIR,3);
mcugear->setWireA(IO_MBED_P25, IO_REG_OUT_DIR,4);
mcugear->setWireA(IO_MBED_P26, IO_REG_OUT_DIR,5);
}
日本語説明
MCU Gearの自動モードライブラリです。
detail : http://mcugear.com/en/
自動モードは8つのBank設定は考えずに実行できます。同時に複数のモジュールをつなげたい場合はマニュアルモードをご利用ください -> http://mbed.org/users/Info/code/MCUGearM/
使い方
1,ライブラリーをインクルード
1,include library
#include "mbed.h" #include "MCUGearBaseA.h" #include "MCUGearA.h" #include "commonA.h"
2,モジュールを定義します
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
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);
MCUGearBaseboardA.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;
setWire function
uint8_t setWire(uint8_t mcuIO, uint8_t direction, uint8_t moduleIO);
引数はマイコンのIO、マイコンからの入出力方向とモジュールの端子番号 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: モジュールの出口の端子をどれにするかを決めます。
5,モジュールのゲート開閉
5,Open or close the module gate
myModule1.connectModule(); ... (same as normal mbed code) ... myModule1.disconnectModule(); myModule2.connectModule(); ... (same as normal mbed code) ... myModule2.disconnectModule();
If you want to use many modules simultaneously as one circuit, you should use manual mode. 同時に複数のモジュールに接続して動かすには
Sample code 1
ユニバーサルモジュールとLCDモジュールを接続した例です。
ユニバーサルモジュールは以下の図のように接続します。
Sample code 1
#include "mbed.h"
#include "TextLCD.h"
#include "MCUGearBaseA.h"
#include "MCUGearA.h"
#include "commonA.h"
Serial pc(USBTX, USBRX); // tx, rx Set BaudRate = 115200 in main()
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;
initBase(); //initialize Baseboard
//set schematic select 0-7
UniM.detectModule(); //save location data in MCUGear class.
LCDM.detectModule(); //save location data in MCUGear class.
setIOUni(&UniM);//make schematic Bank0
setIOLCD(&LCDM);//make schematic Bank0
LCDM.connectModuleA();
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();
while(1) {
UniM.connectModuleA();
sw1 = Din1.read();
sw2 = Din2.read();
printf("sw1 = %d sw2 = %d\r\n",sw1,sw2);
UniM.disconnectModule();
LCDM.connectModuleA();
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
LCDM.disconnectModule();
UniM.connectModuleA();
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();
}
}
void setIOUni(MCUGear *mcugear){
mcugear->setWireA(IO_MBED_P9, IO_REG_IN_DIR, 0);
mcugear->setWireA(IO_MBED_P10, IO_REG_IN_DIR, 1);
mcugear->setWireA(IO_MBED_P11, IO_REG_OUT_DIR,2);
mcugear->setWireA(IO_MBED_P12, IO_REG_OUT_DIR,3);
mcugear->setWireA(IO_MBED_P13, IO_REG_OUT_DIR,4);
}
void setIOLCD(MCUGear *mcugear){
mcugear->setWireA(IO_MBED_P21, IO_REG_OUT_DIR,0);
mcugear->setWireA(IO_MBED_P22, IO_REG_OUT_DIR,1);
mcugear->setWireA(IO_MBED_P23, IO_REG_OUT_DIR,2);
mcugear->setWireA(IO_MBED_P24, IO_REG_OUT_DIR,3);
mcugear->setWireA(IO_MBED_P25, IO_REG_OUT_DIR,4);
mcugear->setWireA(IO_MBED_P26, IO_REG_OUT_DIR,5);
}
Files at revision 0:12d93184b350
| Name | Size | Actions |
|---|---|---|
| [up] | ||
| MCUGearA.cpp | 3390 | Revisions Annotate |
| MCUGearA.h | 2378 | Revisions Annotate |
| MCUGearBaseA.cpp | 2734 | Revisions Annotate |
| MCUGearBaseA.h | 3353 | Revisions Annotate |
| commonA.h | 6354 | Revisions Annotate |
mille feuille