「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



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コントローラが出て
きたあたりからさらにすごかった。





ようやく、年末年始モードから解放された。一段落。一息
つこう。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする