久しぶりのMCUネタ、正直いってちょっと目論見違いです。まあ、よく調べもせずに勝手に目論んだ私が悪い。このところのアナログよりの応用に使うつもりで、ADとDAと両方搭載、できれば表示もあり、それでいてブレッドボードに刺しやすい小型で「お手頃」なマイコンボード、開発環境もお手軽、という条件でボードを購入いたしました。Longan Nanoでございます。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
頭の中にあった応用というのが、アナログコンピュータの掛け算器であります。リンクの先の本のお陰(とばっちり)で、ScilabとXcosつかってアナログコンピュータもどきのシミュレーションなどやっておりますが、やはり、本物の回路でもやりたい。幸い、手元にはオペアンプが「豊富」にございます。オペアンプがあれば、アナログコンピュータの主要部品はそろったも同然、なのですが大事な回路が一つ足らない。
アナログ掛け算器
であります。この辺は、昔の本物のアナログコンピュータでも苦労していたようです。手元の古色蒼然たる古代の演習書を見るに、片方の信号の電圧に比例させるモータでボリューム(可変抵抗)を動かし、そのボリュームでもう片方の信号電圧を操作、などという装置の図が掲載されています。掛け算は大変。まあ、もっと言えばたまに登場する「超越関数」などに対するアナログ関数回路も関数によっては難しそうです。しかし、世の中にはちゃんと
アナログ乗算器IC
というものが売られています。最近お世話になっているアナデバ製のアナログ乗算器が、これまたお世話になっている秋月電子の通販サイトにもありました。しかしね、これが結構いいお値段します。それだけ、特殊なICだということでありましょう。ぶっちゃけ、
ADとDA両方積んだマイコンで乗算器部分を作ればよくね
まあ、アナログコンピュータ「モドキ」。そんな速度が必要でもなく(ゆっくりとペンプロッタ並みの時間で波形が出れば良い)、精度もいい加減(有効数字2桁くらいでよい)な目標。多分アナログ乗算器よりも安いお値段で
-
- 入力電圧をデジタルな数値で測定できる
- 掛け算ができる
- 出力電圧をデジタルな数値で指定できる
- 表示もできる
- ブレッドボードに刺しやすい形状の小型のボード
- 簡単にソフト開発できるお手軽開発環境使用可
のマイコンボードがある筈ということで探しました。掛け算に加えて、ちょっとした表引きが出来る程度のROM容量があれば、超越関数もバッチリ。なお、「表示」は、現在実行中の演算を表示させるのに使いたい希望。たとえば、
x*y/10
など。アナログコンピュータの場合、素のままの掛け算はまずできません。例えば5Vと5Vかけて25Vとか。絶えず信号電圧の振れ幅の範囲をスケーリングして調整しながら計算しないとならない。この辺がとても面倒。せめて上の/10みたいにスケーリングファクタを演算器に表示してやれば「分かり易い」はず。また、超越関数のときは関数名をsinとかlogとか表示させてしまえば嬉しい。マイコンならピンの設定で、いろいろ設定が変わる演算器など簡単な筈。
こんな勝手な目論見で、選定させていただいたのが、
Sipeed社Longan Nanoボード
であります。さらに嬉しいことに、搭載CPUは、なにかと話題のRISC-Vであります。何かと遊べそう。価格的にもアナログ乗算器ICよりもお安い。開発環境を見れば、
PlatformIO上でArduino
とあります。本シリーズでは、ちょっと間がありましたが、このところVSCode上のPlatformIOでお手軽開発、みたいなものを続けていたので、即決購入!
アイキャッチ画像に袋の中のLongan Nanoボード部品をぶちまけた写真を載せました。ピンを割って、ハンダ付けすればハードは完成であります。開発環境のインストールは流石PlatformIOです、Sipeed社のWebサイト上の手順通りにやれば、何の問題もなく利用可能となりました。私はGUIルートでやりました。(ただね、個人的には、ほぼ毎日VSCodeにはお世話になっているのですが、このマシンのVSCodeは、前回の記事以来動かしていなかったので、今回とは無関係なソフトウエアの更新にかなり時間がかかりました。とくに複数入れているマイコン環境の更新が時間かかって辛い。こういうツールは頻繁に使っていないといけませんな。)
例によって最初は「Lチカ」サンプルをボードに書き込み動作確認です。ところがね、ボードを一向に認識しやがりませんです。かなり焦りましたが、最初の問題はUSBのハブ(電源あり)の先につなげていたためのようでした。PCのUSBポートに直結したら「認識」するようになりました、一安心。ただし、
-
- プログラム動作の通常状態でUSB接続してもPCは認識しない。
- BOOTボタンとRESETボタンを所定の順番で操作して書き込みモードにすると認識する。
です。書き込みはチップ上に既に書き込まれているのであろう、DFU プログラムを使用しているようです。PlatformIO側はこのDFUには対応の書き込みができると。そのときのPlatformIOのiniファイルはこんな感じ。ホームページの指示どおり。
しかしね、認識されたUSBデバイスをみると下のようなのです。
なんだ、Unknown Device #1って。ちゃんと認識されとらんのかい?どうした、とここでもしばらく悩みました。
しかし、救いの神あり。以下のブログを参照させていただきました。
なんだ、Unknown Device #1で良いのね、そいつに対してZadigでWinUSBドライバを設定してしまって良いのね。先人の偉大な業績なくば、何時まで経ってもLチカプログラムを書き込めないところでした。
むむむ、フェイルの赤表示が。しかし、プログラムはちゃんと動いているっポイ。確認のため、Lチカの周期を変更してもう一回書く。またフェイル。でも動作はOK。書き込みの度に最後にフェイルでるのはちと気持ちが悪いですが、まあ、動くからよいか。動かしているところ(といってLED消灯のタイミングで間が悪いが)はこちら。
さて、ようやく動いた。後は、アナログとディスプレイ表示だな。Arduinoなんだから、チョイ数行書き換える程度でできるんじゃない?と思って調べ始めて、愕然としました。
Analog関係のArduinoの入出力関数は、ヘッダにプロトタイプあるものの
//TO DO
みたいなとぼけたコメントあり、実体関数が見当たらない。実体があるのは、ADやDAのハードウエアのレジスタを直接操作するレベルの低レベルの関数群。
ボード上の表示のデモあり、ソースをみるとArduino環境でなく、本来MCUのSDKベースのデモソフト。これをArduinoに移植するのは時間かかりそう。
全然、Arduinoでないんじゃないの。確かにLチカはArduino環境で出来るけれど、それ以外、私のやりたいことをやるには、
-
- SDKへ行く
- Arduino環境で TO DOらしい部分を自分で移植する
2つに一つだね。なんてこった。Arduinoであれば、MCUのデータシートなど読まず、適当にちょちょいとソフトが書けると思ったのに。。。
まあ、データシートやマニュアル読んで、低レベル(レジスタ操作レベル)のメーカ支給の関数を使ってマイコンのプログラムを作るなど、昔は普通だったのだけれど。それどころか、Longan Nanoにはブートやら初期化やらのところはOSらしきものがやってくれるからmainから書き始められるなど昔に比べたら遥かに立派な環境なのだけれど。まあ、このところあまりにお手軽なものに慣れ過ぎたです。ちゃんと、マニュアル読んでプログラムしてまいりましょう。しかし、直ぐにできるかと思ったアナログコンピュータは遠のいたな。