マイコンボード Teensy 4.0 を試してみました
マイコンボード Teensy 4.0 を試してみました

マイコンボード Teensy 4.0 を試してみました

マイコンボード Teensy 4.0 を試してみました 2019/11/09 Arduino ARM , Teensy

TeensyというArduinoで開発できるボードをご存じでしょうか? そこそこハイスペックで安価というのが個人的な印象ですが、新しく出た Teensy 4.0 がめちゃくちゃすごいんです。 「やりすぎだろ!」って言いたくなるようなハイスペックなので気になっていたのですが、ようやく手に入ったので使ってみました。

スポンサーリンク

特筆すべきスペックとして ARM Cortex-M7 600MHz という点です。 クロックが600MHzって…一昔前のパソコンですか?IntelのPentium4くらいですか?

ベンチマークが公式サイトにあったのでお借りすると…

Teensy 4.0 – PJRC Store

Arduino Mega がミジンコレベルに…「戦闘力…たったの7か…ゴミめ…」 その一方で Teensy 4.0 は「私のベンチマークスコアは2314です。」と言わんばかりのハイスペックぶり。 というよりESP32って結構スペックが高いんですね。 まあWi-FiやBluetoothを動かしてるのでそこそこないと処理できなさそうですし。

以前よりそのスペックから Teensy 4.0 には注目しており、手に入れたかったのですが、国内ではどこにも売ってませんでした。 ほぼほぼ諦めていたところ、スイッチサイエンスで売っているのを最近見かけまして、手に入れることができました。

Teensy 4.0 – スイッチサイエンス

輸入等で少し値段は上がっちゃってますが、約3200円でもこのスペックであれば十分ヤバいと思います。

TeensyをArduinoで使うにはTeensyduinoというアドオンを Arduino IDE に入れる必要があります。 ボードマネージャーで入れられないのがちょっと面倒なのですが…

Teensyduino: Download and Install Teensy support into the Arduino IDE

アドオンを入れたら普通に Arduino IDE で開発することができます。 とりあえずマイコンボードを手に入れたら「Lチカ」ですよね! ただ、今回はハイスペックぶりを確認したいのでdelayなしで波形を観測してみました。 クロック周波数から言って、計算が速いことは明らかですしあまり面白くないです…

今回のプログラムは単純です。 whileを使った無限ループでloop関数のオーバーヘッドによる遅延をなくしています。

int led = 2; void setup() { pinMode(led, OUTPUT); } void loop() { while (1) { digitalWrite(led, HIGH); digitalWrite(led, LOW); } }

スポンサーリンク

delayがないのでdigitalWriteの処理時間のみでON/OFFすることになります。 といってもdigitalWriteのオーバーヘッドは結構あるのを知っているので、真価を発揮できない気もしますが… 13番ピンはLEDに繋がっちゃっていて不安ですので、繋がっていない2番ピンで見てみます。

digitalWriteでだいたい15MHzが出てしまいました。 めちゃくちゃ速いです。 Arduino Uno のクロック信号出せちゃいますよ?(16MHzには届きませんが)

ESP32のGPIOを高速で動かしてだいたい10MHzなので、それよりも断然速いです。 「Teensy 4.0 のオーバーヘッドあり」が「ESP32のオーバーヘッドなし」より速いという。 とんでもないスペックというのがここからも分かります。 ESP32でdigitalWriteのループだと大体4MHzになります。

かなり話が逸れてしまいますが、ESP32をGPIOを高速に動かすには GPIO.out_w1ts = (1 << pin); という感じです。 話せば長くなってしまいますので、これはまた別の機会に。

話を戻しまして、さらに Teensy 4.0 のGPIOを高速でON/OFFさせるとどうなるか見てみます。 digitalWriteの関数はhardware/teensy/avr/cores/teensy4/core_pins.hの中にありました。

int led = 2; void setup() { pinMode(led, OUTPUT); } void loop() { while (1) { CORE_PIN2_PORTSET = CORE_PIN2_BITMASK; CORE_PIN2_PORTCLEAR = CORE_PIN2_BITMASK; } }

だいたい154MHzです。 私が持っているオシロスコープではこのレベルの波形観測が限界でした、帯域100MHzですので…

「これで何を作るの?」というのは置いておき、とにかくすごいのです。 よくここまでのサイズに収めたなと感心しています。 信号処理などで大量の計算が必要な場合はおすすめかもしれません、ぜひお試しあれ。

スポンサーリンク

Subscribe Follow Like RSS Feedly Related Posts Arduinoの高速化 PianoDuinoを使えるように改変してみる Arduino M0をもっと使いこなす AVRISP mkIIでArduinoのスケッチを書き込む
📎📎📎📎📎📎📎📎📎📎
BOT