部品実験:Arduino 元に戻る

Arduino各プロセッサーのOUTPUT時間測定 2024/6/30

本文目次

本文以外目次
1.結果
2.digitalWriteによるOUTPUT時間
 (1)ESP-WROOM-02及び12F
 (2)UNO
 (3)MEGA 2560
 (4)DUE-CH340
3.高速化によるOUTPUT時間
 (1)ESP-WROOM-02及び12F
 (2)MEGA 2560
 (3)DUE-CH340





本   文

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かかっている。

[目次に戻る]