CPUにシリアルモニタ機能を追加する

PIC18F45K22CPUボードに搭載したシリアルモニタ機能の紹介です

FT231Xを搭載したPIC18F45K22CPUボードのKiCadデータと回路図

KiCad5-pic18f45k22-v2cpubrd

回路図PDF

pic18f45k22-v21_sch

ここで紹介するシリアルモニタ機能を試して見ようと思われる方は、上の回路図やKiCadデータを参考にしてください。

組み込みプログラミングで活躍するシリアルモニタ機能

手軽に組み込みプログラムに入門できるツールとして大人気のArduino開発環境には、プログラム実行中の情報を出力できるシリアルモニタ機能、シリアルプロット機能があります。
これはArduinoのCPUから送信する、シリアルデータをボード上のUSBシリアル機能を持つICでPCのUSBポートへ送り、PCのターミナルソフトで表示するもので、プログラムのデバッグやデータ収集に活用されています。

あまり使われないMPLAB-Xの高度なデバッガ

PICの書き込みツールであるPicKit3とPICの開発環境MPLAB-Xでは、プログラムを中断して、変数やレジスタの内容を表示したり、プログラムをステップ送り出来る高機能なデバッガが使えるようになっていますが、あまり使われていないのが実情です。

プログラムの実行状態を詳しく見るには、こちらのデバッガがはるかに高機能なのですが、多くのユーザーに活用されて役に立つのはシリアルモニタの方です。

何故かというと、デバッガは基本的にプログラムを中断しないと情報を取得することが出来ず、組み込みプログラムのデバッグに必要なのは動作中の情報という基本的な問題のせいです。

現在の開発環境はとても便利になり、ArduinoのスケッチやMPLAB-Xが提供してくれるライブラリのおかげで、デバッガで詳しく調べないとわからないようなトラブルは殆ど無くなりました。
初心者にとっては、デバッガを使ってプログラムをステップ送りして、どのように動作しているのかを確認することは大いに勉強になります。ただ、デバッガの使い方が難しいせいで初心者にとって、デバッガは使いづらいのが残念な点です。

ベテランプログラマはシリアルモニタや測定器を上手く使う

組み込みプログラミングに少し慣れてくると、プログラムの構造上のバグはデバッガを使わないくても直ぐに検討がつくようになります。
しかし、スイッチのチャタリングや回転するエンコーダの信号などは、パーツの種類やシステムごとに異なった動きをすることが多く、ベテランプログラマでも動作中にCPUの端子に入力されている信号を確認しないと予測できないものです。

むしろ、シリアルモニタやオシロスコープ等の測定器を使って、動作中の入出力信号の状態を上手く把握できるのが、ベテランプログラマのテクニックと言えます。

FT231Xを使って CPUボードにシリアルモニタ機能を追加する

以上のような理由で、シリアルモニタはトレーニングボードに必須の機能ですし、組み込みの現場で実際に使うボードにもシリアルモニタ機能を搭載することで、開発時やトラブルシューティングを効率的に進めることが出来ます。

秋月電子で300円程度で入手できるUSBシリアルICのFT231XとUSBコネクタをCPUボードに追加するだけで、シリアルモニタ機能が使えるようになります。
Arduinoも以前はこれと同じメーカー(FTDI)のICでUSBシリアル機能を実現していましたが、今はAtmelのCPUを使っています。(おそらくコストダウンのためだと思います。)

PIC18F45K22CPUボードのUSBシリアル回路

上の図はPIC18F45K22CPUボードに搭載したUSBシリアル回路用ICとコネクタで、下はそのUSBシリアル部分の回路図です。
SW1は電源SW、PTCはポリスイッチ(保護用の自動復帰型ヒューズ)で、必ずしも必要な部品ではありません。
右上のP-D365Qの記号がある部分は画像を切り取る時に入ってしまっただけなので無視して下さい。

シリアルモニタの使い方

Arduino用ツールのインストール時には、USBシリアルIC用のデバイスドライバが自動的にインストールされ、開発環境にはシリアルターミナル機能が組み込まれているので、ユーザーは特に意識することなくシリアルモニタが使えますが、MPLAB-Xを使う場合は、FT231X用のデバイスドライバをインストールして、別のシリアルターミナルソフトを使う必要があります。

1.FT231X用デバイスドライバのインストール

ドライバ用インストーラの入手先
https://www.ftdichip.com/Drivers/VCP.htm
参考サイト
FTDIのUSBシリアル変換器のドライバのインストール法

2.シリアルモニタ用ターミナルソフトの紹介

TeraTerm
Tera Term (テラターム) プロジェクト日本語トップページ – OSDN

TeraTermは実績のあるターミナルソフトで、色々な人が紹介しているので、使い方も判り易いと思います。

JTW32

これは私が作った組込開発用ターミナルソフトで、シリアルプロッタ機能を備えて、最大3Mbpsの通信まで対応しているなど、機能てんこ盛りのソフトです。
ただ、俺様ソフトでまともなヘルプを用意していないので、使い方は判りにくいかと思います。
上のリンクからダウンロードして、好きなフォルダに展開しjtw32.exeを起動すれば使えます。
ライセンスの制限はありませんので自由にお使いください。

エンコーダの話番外編

最近マウスのホイール(マウスの中央ボタンをぐりぐりするとスクロールするあれです)の反応が悪くて、「Windows10が勝手にアップデートしたせいでマウスドライバがおかしくなったんじゃないか。」などと邪推してLogicoolのマウスドライバを再インストールしたりしてみたのですがどうしても治りません。

それで何気なくマウスをひっくり返してみると裏が埃がこびり付きまくって素晴らしく汚いので綺麗に拭くとマウスの滑りが良くなりました。

写真は拭いた後の状態です、拭く前は写真に取るのも憚られる状態でした。
もともとついていた4つの滑るパッドがかなり以前に剥がれてしまったのでテフロンテープを貼っています。

それからよく見るとホイール部分の隙間から埃が見えます。
「ひょっとしたら」と思いついてマウスを分解してみるとビンゴでした。

エンコーダになっている部分に埃がつまりまくっていて、埃を掃除するとマウスホイールによるスクロール操作が復活しました。

マイコンカーラリーのプログラムでもよくあることですが、ソフトばかり疑っていると問題を解決できない場合があるという例でした :lol: