naoki86star

インターネットの片隅でなにかしら書いてみる

マイクロコントローラ(PIC)を始めてみた

動機
 今になって初めてマイクロコントローラを初歩レベルでちょっと使えるようになってみようと思った。その動機は、やや突飛なところからで、ラズベリーパイ(Zero)をバッテリーで動かし続けることができるとちょっとやりたいことの幅が広がる、と感じてたことにある。頑張って電源引き回すことが自分の環境条件でなかなか困難なのである。まずバッテリー駆動を考えてみていた。10000mAhのモバイルバッテリーで、Zeroの動かしかたによるけども、3日程度は持続させられる模様。スポットで動かすにはいけそう。けれども、放置稼働させたく、せめてひと月とかは連続運転させたい。
 このあたりを考え始めていて、できることをなんとなくマイコン知っているとちょっと選択肢広がる?っていうのが動機。
 まず、単純なI2Cデバイス駆動センサーとかであれば測定だけやってもらってなんらかの手段で屋内にリレー送信させられない?って考えたときに、まだ詳細わかってないけどもマイコン使えるとそれを考える対象にいれることができそうだと。
 それから、太陽光でなんとかラズベリーパイzero一台くらい給電できないのか、それを思いついた。巷で見かけるソーラーパネルうまく使うと動かせそう?そんな感じで小さいパネルでそれでソーラーパネルを使った給電を調べて始めてみている。とにかくソーラーパネルを実用的に使うにまず電気を効率よく取り出す電力コントロールというのが必須なように理解した。ソーラーパネルシステムについてはまずは充電システムについての情報がよく目につく。電力コントロールの装置をチャージコンロトーラーと呼んで、これもマイコン制御のものが第一歩?のようにとりあえず理解した。すでに現実にやってる人たちいそうでありますが、少なくともすぐにそれをできるようなキットとかアプリケーションはなさげ(特に安く簡単にできるもの)理解するにはどうもマイコンのことを知っていると有利そうに思えてきてた。
 だいたい以上のことから、マイクロコントローラとしてまず昔から記憶の中とかよく雑誌記事とかで目にするPICを使えるようにならないか、それがきっかけ。

本題
 WEBで調べてみてもなかなか初歩からstep byでの知識習得が進められない、と思っていたのだけども、偶然次の記事を見つけたのが転機になった。
maldus512.medium.com

 自分の持っている知識とうまくつながってくれたのか、これを読んだらすぐに試してみたくなった。

  • ターゲットのIC(PIC16F18326)を特定してくれている
  • ツール(Microchip SNAP programmer)とその使い方(つなげかた)を明示してくれている
  • 回路具体例を明示してくれている
  • 最初のデモを明示的に3ケース示してくれている

 ターゲットICとライタは両方とも秋月電子通商さんで扱っていた。ライタが廉価だったことも試してみようとした気持ちに働いている。MPLABXについて、ONLINEツールのアカウントのsignupはどうも書いてあったのと同じく、うまくいかなかった。PC上で動くダウンロード版を使うことにする。

 コードを書いて動かしてみるときに、それが自分の思い通りなのかどうか、すなわちデバッグの手段についてまでは記事には書いてくれてなかった。PICにコードを書き込んで動作するようになった直後はまずはLEDの点灯だけで情報を取り出すことから始めた。例えばsizeof(int)っていくつ?みたいなもの。LED点灯消灯とdelayで表現できる。*1
 次にというか、定石?としてシリアル通信でprint文を流せるようにしたいのを強く願う、のだけども成功できていない。表示側のをMPLABX動かすPCにしたいのだけどもシリアル変換デバイスが準備できていない*2。それなんで当面I2C接続のLCDディスプレイ8桁2行を使っていくことにした。ちょっと難儀するけれども、ここまでくると他のいろんなPICの参考記事も読み解けるようになり、またラズベリーパイで動かしたときに覚えた制御コマンドの知識も手伝って、わずか16バイト分ながらもテキスト表示能力を得た。

 昔だと、PICを使うにはアセンブラも併用(もしくはそれだけ?!)必須だったのかもしれないけれども、このPIC16F18326+MPLAB X IDEを使う限りにおいてはC言語で済ませられそうな雰囲気。math.hもあり、sqrt関数も動作した。8bitプロセッサー上でもM5Stackで動かした歩数計もある程度機能しそう。*3*4
 SNAPDは、少し対応しているデバイスが少ないみたいである。型番ごとに確認と、それからデータシートもそれぞれので細かいパラメータを確認しないと痛い目に合いそう。

願望

  • 屋外の気温測定:Zero+なにかしらの自律給電システムか、PIC+無線通信手段の付加によるものか。まず考えてみることのできる範囲が増えたので。
  • 歩数計の再々実装:AndroidもM5Stackもバッテリ消費量の不満を解決できなかった。一日毎の測定結果を外部サービスに頼らずに記録を残していきたいのが元々の動機。

 ソーラーパネル(まずは小さいもの)の使い方についてはもっと調べてみる。太陽光発電全体に対しても興味がわいてきた。

*1:PIC16F18326はsizeof(int)=>2 , sizeof(long)=>4 だった。long型もコンパイル通った、まだ使ってみてはいない

*2:PCのUSBシリアルドライバを何回か入れ替えていてトラブりそうでPCとのシリアル通信に意欲がわかない

*3:3軸加速度センサーをADC機能で参照できた

*4:処理時間と浮動小数処理部分のコード量はそれなりにコストかかっていそうだけども、まだコードの大きさに苦しむような段階に到達できていない。