1.結果
手持ちのarduinoについてHiLoOUTPUT時間を測定した結果下表の通りとなった。単位(us)
| digitalWrite | 高速化 | |||||||
| H-L | L-H | kHz | Loop | H-L | L-H | kHz | Loop | |
| ESP-WROOM-02 | 1.6 | 1.6 | 312.5 | 6.86 | 0.088 | 0.088 | 5,682 | 6.912 |
| ESP-12F | 1.6 | 1.6 | 312.5 | 6.86 | 0.088 | 0.088 | 5,682 | 6.912 |
| UNO | 3.2 | 3.3 | 153.8 | 0.24 | 0.12 | 0.131 | 3,984 | 0.249 |
| MEGA 2560 | 5.4 | 5.4 | 92.6 | 0.35 | 0.126 | 0.126 | 3,968 | 0.253 |
| DUE-CH340 | 2.1 | 2.02 | 242.7 | 2.12 | 0.12 | 0.12 | 4,167 | 2.23 |
2.digitalWriteによるOUTPUT時間
arduinoで通常使用するコマンド digitalWrite の動作時間を測定した。(1)ESP-WROOM-02及び12F
a.プログラムvoid setup() {
pinMode(13,OUTPUT);
}
void loop() {
digitalWrite(13,HIGH);
digitalWrite(13,LOW);
digitalWrite(13,HIGH);
digitalWrite(13,LOW);
}
b.測定結果
LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで1.60usかかっている。
LO→HIGH処理時間はBX-AXで同じく1.60usかかっている。
1周期として3.2usで312.5KHz

Loopの戻り処理は
下図のBX-AX=1.60usで6.86usかかっている。

(2)UNO
a.測定結果LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで3.2usかかっている。
LO→HIGH処理時間はBX-AXで3.3usかかっている。
1周期として6.5usで153.8KHz

Loopの戻り処理は
下図のBX-AX=3.3usで0.24usかかっている。

(3)MEGA 2560
a.測定結果LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで5.4usかかっている。
LO→HIGH処理時間はBX-AXで5.4usかかっている。
1周期として10.8usで92.6KHz

Loopの戻り処理は
下図のBX-AX=5.4usで0.35usかかっている。

(4)DUE-CH340
a.測定結果LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで2.1usかかっている。
LO→HIGH処理時間はBX-AXで2.02usかかっている。
1周期として4.12usで242.7KHz

Loopの戻り処理は
下図のBX-AX=2.02usで2.12usかかっている。

3.高速化によるOUTPUT時間
標準コマンドを使用しないでOUTPUTを行う。(1)ESP-WROOM-02及び12F
a.プログラム#define PIN_OUT *(volatile uint32_t *)0x60000300
#define PIN_ENABLE *(volatile uint32_t *)0x6000030C
#define PIN_00*(volatile uint32_t *)0x60000328
#define PIN_02*(volatile uint32_t *)0x60000330
#define PIN_04*(volatile uint32_t *)0x60000338
#define PIN_05*(volatile uint32_t *)0x6000033C
#define PIN_12*(volatile uint32_t *)0x60000358
#define PIN_13*(volatile uint32_t *)0x6000035C
#define PIN_14*(volatile uint32_t *)0x60000360
#define PIN_15*(volatile uint32_t *)0x60000364
void setup() {
PIN_OUT = (1<<13);
PIN_ENABLE = (1<<13);
}
void loop() {
PIN_13 = 0; //HIGH
PIN_13 = 1; //LOW
PIN_13 = 0; //HIGH
PIN_13 = 1; //LOW
}
b.測定結果
LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで0.088usかかっている。
LO→HIGH処理時間はBX-AXで0.088usかかっている。
1周期として0.251usで5,682kHz

Loopの戻り処理は
下図のBX-AX=0.088usで6.912usかかっている。

(2)MEGA 2560
a.プログラムvoid setup() {
pinMode(13,OUTPUT);
}
void loop() {
PORTB |= _BV(7); // digitalWrite(13,HIGH);MEGA2560 13=PB7
PORTB &= ~_BV(7); //digitalWrite(13,LOW);
PORTB |= _BV(7); //digitalWrite(13,HIGH);
PORTB &= ~_BV(7);//digitalWrite(13,LOW);
}
b.測定結果
LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで0.126usかかっている。
LO→HIGH処理時間はBX-AXで0.126usかかっている。
1周期として0.252usで3,968KHz

Loopの戻り処理は
下図のBX-AX=0.126usで0.253usかかっている。

(3)DUE-CH340
a.プログラムvoid setup() {
pinMode(13,OUTPUT);
}
void loop() {
REG_PIOB_SODR |= (0x01 << 27); // Turn on the LED
REG_PIOB_CODR |= (0x01 << 27); // Turn off the LED using the CODR register
REG_PIOB_SODR |= (0x01 << 27); // Turn on the LED
REG_PIOB_CODR |= (0x01 << 27); // Turn off the LED using the CODR register
}
PIO_SODR - ここに1を書いて出力ピンをHIGHに設定します
PIO_CODR - 出力ピンをLOWに設定するには、ここに1を書き込みます
PIO_PDSR - ポートのピンの実際の状態を読み取ります。
PIO_PUDR - ピンの内部プルアップをオフにするには、ここに1を書き込みます
PIO_PUER - ピンの内部プルアップをオンにするには、ここに1を書きます
b.測定結果
LooP内でのdigitalWriteの
HIGH→LO処理時間はT-AXで0.12usかかっている。
LO→HIGH処理時間はBX-AXで0.12usかかっている。
1周期として0.24usで4,167KHz

Loopの戻り処理は
下図のBX-AX=0.12usで2.23usかかっている。

