LoginSignup
2
0

Arduino 高速 Lチカ 対決

Last updated at Posted at 2023-10-12

はじめに

知人よりSDS1104オシロスコープを借りたので、ノーウエイトのLチカの周波数を測定してみた。

Arduino

対決に使用したArduinoボードは、次の3つ。

  • Arduino Uno R3

  • Arduino Uno R4 minima

  • ESP32-D0WDQ6 (revision v1.0)(Arduino環境)

Lチカプログラム

対決に使用したSketchは、次のとおり。
Arduino Uno R3とR4はD8ポート、ESP32はGPIO18を使用。

#include <Arduino.h>

#define LED (8)    // for Arduino Uno R3 / R4
//#define LED (18) // for esp32

void setup() {
  pinMode(LED, OUTPUT);

  while (1) {
    digitalWrite(LED, HIGH);
    digitalWrite(LED, LOW);
  }
}

void loop() {
}

結果

# ボード Lチカ周波数 CPUクロック
1 Arduino Uno R3 150.8KHz 16MHz
2 Arduino Uno R4 minima 686.8KHz 48MHz
3 ESP32-D0WDQ6 1.495MHz 240MHz
  • ↓Arduino Uno R3
    data_22994_R3.png

  • ↓Arduino Uno R4 minima
    data_38494_R4.png

  • ↓ESP32-D0WDQ6(Arduino環境)
    data_50739_esp32.png

まとめ

順位は測定前から想定していた通りであった。

しかし、Arduino Uno R4ESP32 は、CPUクロック差ほどの差がないのは意外だった。

ESP32が遅い? ESP-IDF環境なら、もっと早いのだろうか?

追試

ESP32のESP-IDF環境のノーウエイトLチカを測定した。

blink_example_main.c(ESP-IDF環境)
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "sdkconfig.h"

#define BLINK_GPIO GPIO_NUM_18

static void configure_led(void)
{
    gpio_reset_pin(BLINK_GPIO);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}

void app_main(void)
{
    configure_led();

    while (1) {
        gpio_set_level(BLINK_GPIO, 1);
        // vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
        gpio_set_level(BLINK_GPIO, 0);
        // vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
    }
}
  • ↓ESP32-D0WDQ6(ESP-IDF環境)
    data_8773_idf.png

性能は、Arduino環境より若干低い、1.441MHzと想定外の結果であった。


↓レジスタを直接いじれば、3.5MHzほどに高速化できます。

おしまい

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0