
前回は比較命令でした。比較した結果を格納するフラグが無いと知ってちょっとギョッとしましたが、キャリーやオーバーフローに対応する結果がレジスタに入れば問題ない、と。今回は条件分岐です。フラグが無いので分岐命令自身がレジスタの内容を判定して飛びます。慣れたらかえって便利かも。必要十分な命令がそろっているし。
デバイス作る人>>デバイス使う人>>デバイスおたく
前回は比較命令でした。比較した結果を格納するフラグが無いと知ってちょっとギョッとしましたが、キャリーやオーバーフローに対応する結果がレジスタに入れば問題ない、と。今回は条件分岐です。フラグが無いので分岐命令自身がレジスタの内容を判定して飛びます。慣れたらかえって便利かも。必要十分な命令がそろっているし。
前回はDACでアナログ波形を垂れ流してみました。ATSAMD51のDACにはいろいろ近代的な機能がありつつも最初は一番単純な方法で実験。今回はADCです。これまた近代的な機能がいろいろあるのです。しかしこちらも最初は単純な方法でまずは動かしてみます。ADCで測った波形をそのままDACに出力。サンプリング周波数は10kHz。
以前、ラズパイPico上のMicroPythonでUart通信を行ったことはあったのですが、C/C++SDKではstdoutの出力先としての利用ばかりでした。今回C/C++SDKでも双方向の通信をやりたかったのでちょっと実験してみました。そして、長らく誤解してきたことにも気づきました。
三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』で手習ひさせていただいとります本シリーズもようやくデジタル信号処理っぽいボード線図が出てくるようになりました。わたしゃ嬉しいよ。といっても今回は非巡回型移動平均、名前は厳めしいですが「普通の移動平均」でやんす。
前回、uasyncioのお陰でNode-REDサーバとの通信タイミングを自由に決められるようになりました。今回からM5ATOMLiteに「手足」をつけ、前回までに整備?した「インフラ」を使ってNode-REDとの間を接続して行きたいとおもいます。外付けハードの制御の前に、最初は内蔵のLEDとスイッチだな。
Microchip社のArm Cortex-M4搭載マイコン、ATSAMD51の周辺回路をなるべくダイレクトに制御してみるシリーズ、今回はDAC(Digital to Analog コンバータ)であります。データシートを読んでみると信号処理向け支援機能なども内蔵しておりなかなか強力。とりあえず今回は簡単にタイマ割り込みハンドラの中でソフトでDA出力してみました。
前回は浮動小数点数の計算でしたが、今回は整数の割り算です。組み込みMCUのプログラマには「割り算は避ける」習性が刷り込まれています(個人の感想です。)せいぜい2のべき乗の割り算に帰着させて右シフトで逃げます。しかしラズパイPicoでは割り算、あまり苦になりません。ハードウエアの割り算器を搭載。
信号処理素人の個人の感想ですが、デジタル信号処理の入門書の多くはFIRが先、IIRが後という順番じゃないかと思います。IIRは難しそうだからかな。でも実装するとなるとIIRの方が簡単だったりして。ところが、三上先生本では、先にIIRが登場、どっちが先でもいいっちゃいいですが。まずは前回プログラムを「チョイ変」して1次のIIRフィルタをしみじみ?味わってみたいと思います。
前回までで「エッジ側」M5ATOM LiteとNode-REDサーバー(Raspberry Pi 3)との間でMQTTを介してJSONオブジェクトを送受できるようになりました。しかし不満なのは送受信のタイミングです。前回まで単一のmainループにお任せだったので便利とは言えない仕組みでした。今回から uasyncioを使って改良していきたいと思います。
今回は1点確認するだけであります。ラズパイPico上で float型 を使ったら RP2040の内の「fast floating point」を呼んでくれているのだよね、と。ラズパイPicoで積極的にfloatを使いたいとは思わないのですが、昨日 Cortex-M4F機(STM32F446RE)の上で float していたので、Picoの上の浮動小数点はどうなの?と気になったためです。