Arduino Nano Everyのタイマ割込みライブラリについて、
こないだいじってみて、なんかうまく動かなかったっていう
記憶があって、改めて公開しているページからライブラリ
一式ダウンロードしなおしたりして、再実験。
https://github.com/Kees-van-der-Oord/Arduino-Nano-Every-Timer-Controller-B/tree/master/EveryTimerB
このページにある3つのファイル(EveryTimerB.cpp、
EveryTimerB.h、MegaAvr20Mhz.h)が、3か月前に更新されて
いるっぽいので、前回実験した直後くらいに更新されている
のかな?とりあえずダウンロードしておく。
んで、このページ(readme.txt)にあるusageを読みながら、
ゴニョゴニョとスケッチをいじって、こんな風にしてみた。
#ifdef ARDUINO_ARCH_MEGAAVR
#include "EveryTimerB.h"
#define Timer1 TimerB2 // use TimerB2 as a drop in replacement for Timer1
#else // assume architecture supported by TimerOne ....
#include "TimerOne.h"
#endif
int led = LOW;
void myisr() {
led = ~led;
digitalWrite(LED_BUILTIN, led);
}
void setup() {
Timer1.initialize();
Timer1.attachInterrupt(myisr);
Timer1.setPeriod(1000000); // like the TimerOne library this will start the timer as well
pinMode(LED_BUILTIN, OUTPUT);
}
void loop () {
}
んで、ダウンロードしておいた3つのファイルと同じフォルダ
に格納しておいて、コンパイル。
…通った。で、Nano Everyに書き込んで実行してみる。
動いた。1秒おきに。D13のLEDが点滅する。ok、ok。
ただ、オイラ謹製のArduino Nano EveryにUnoとかの
シールドを付けるための変換基板使ったものの、Nano
Everyは変換基板の裏面にぶら下げてる形なので、LED
が背面になっちゃっているのが玉に瑕。
ってわけで、どうやら冒頭数行のプリプロセッサを使うこと
によって、昔からあるTimerOneライブラリと全く同じコード
のまま、EveryTimerBライブラリを利用できるようにできる
みたい。
このプリプロは、普通のArduinoの場合ならTimerOneを読み
こんで使いNano Everyの場合にはEveryTimerBを読み込み
つつ、TimerB2をTimer1に読み替えてしまうことによって、
ロジック内では既存のTimerOneライブラリのコードを
そのまま使えるようにしたものみたい。
作りかけで止まってるArduinoコアのオシロ。あれはまさに
TimerOneライブラリで動いているので、このプリプロさえ
付けて動かせば、そのままNano Everyで動くんじゃん、
シメシメ、と思ってから、そういえばこないだはなんで
上手く動かなくて、どんな状態で放置したんだっけな?
と思って、過去記事を検索しなおしてみる。
https://brown.ap.teacup.com/nekosan0/4347.html
うん。そうそう。1秒おきにLEDを点滅させようとして、
なんか動かなかったんだけど、
https://brown.ap.teacup.com/nekosan0/4349.html
どうやら、ソースの大部分はちゃんとできていて、
問題はLED(というかD13)に出力する値のトグルを
させるコードが間違ってたという、タイマー割込みと
全然関係ない部分でバグってたっぽいな。そういえば、
今回も、最初全く同じコード書いてから、なんか
そうじゃなかった気がすると思って調べなおして、
値をビット反転するコードに書き直したんだよな。
(今回は1回で動いた)
しかもこないださらに実験してて、
https://brown.ap.teacup.com/nekosan0/4351.html
どこまで割り込み頻度を上げられるかの実験までしてた。
100k回/秒に届くかどうかの実験してて、どうやらレジスタ
類の保存とかがオーバーヘッドになってて、50k回/秒くらい
が限界じゃないかって結論になってた。
なんだ。すっかり忘れていただけで、やりたいことを
既に実験済みだったのか。上手く動かなかったことだけは
よく覚えていたんだけど、そのあとちゃんと動いたって
ことをすっかり忘れていたよ…。
(さすがオイラのアタマだな。それにしても、ビット反転
のC言語の記述でなにかモヤモヤと引っかかったんだけど、
この時の記憶だったんだなとあらためて気づいた。そこ
だけは覚えてたんだな。それにしてもニワトリに負ける
記憶能力だな)
まぁ、サンプリング速度の遅さはともかく、何と言っても
オシロとしてそれなりに動かしてみないと面白くもなんとも
ないので、まずは以前作ったコードを元に、オシロとして
動かしてみるために手を動かしていこう。
(なんかまだ忘れてることなかったかなぁ?)
昨日も触れた、USBメモリサイズのSSD。
https://ja.aliexpress.com/item/4000529046646.html
これが安かったんだけども、TLCなのかQLCなのかで不安だな
と思ってたところ。なんと、
https://ja.aliexpress.com/item/32994015361.html
これはもうちょっと高いけどMLCなやつもあるんじゃんねぇ。
さらに、もうちょっと高いけどSLCのやつも売ってた。
https://ja.aliexpress.com/item/32846479966.html
SLCだったら、Raspberry Pi4と組み合わせてNASにするのに
すごくいいんじゃないの?とか思っているところ。
MLCの方は、スケルトンだし、写真を見るとICの型番もわかる
ので、コントローラやメモリモジュールがホントにMLCなのか
どうかとかは判りそう。
(偽装されてなければ、多分これは東芝のMLCっぽい)
128GBで3000円くらい。なかなかに良さげだな。256GB
でも5000円いかないっぽい。
https://twitter.com/MeisterGhim/status/1344776105903804416
どうみても…本当にありがとうございました。
https://dic.pixiv.net/a/%E6%9C%AC%E5%BD%93%E3%81%AB%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F
そういえば、こないだ書くの忘れてたんだけど、
https://www.youtube.com/watch?v=X1tyXrpe8Iw
ヘビフロッグchのこの動画が、この人の真骨頂な気がして
とても面白かった。特に後半のpHコントローラが出て
きたあたりからさらにすごかった。
ようやく、年末年始モードから解放された。一段落。一息
つこう。