CCP3の出力pinの設定で戸惑った
便利に使っているMPLAB® Code Configurator (MCC) ですが、時々『あれ?』と戸惑うことがあります。
Pic-coloのPWM機能のサンプル・プログラムを書いていたときのことです。CCP3のデフォールト出力(RC6)がUARTのTXピンと重なっていたので、RB5に割り当てようとしたのですが・・・
Pin Managerが管理するModuleにCCPが有りません。orz
CCP3をRB5に割り当てるためにはAFPCON2は0x01で初期化しなければならないのですが、MCCが生成したプログラムはAFPCONレジスタを0x00で初期化しています。orz
MCCが生成したプログラムを書き換えることは簡単ですが、果たしてそれは正しい手順なのでしょうか?一体どうすれば良いのか?
・・・・・・
ふと思いついて、Registersタブをクリックして設定リストを調べてみると・・・
ビンゴ~
AFPCON1、AFPCON2の設定メニューを見つけることが出来ました。
やれやれ
Pic-colo試作基板が動いた
5枚のPic-colo試作基板を組み立てたのは10日以上前です。
基本モデルを2枚、WiFiモデルを2枚、LCDシールドモデルを1枚、計5枚を組み立てました。
早速動かしてみたのですが、Pic-coloコンソールとPic-coloデバッガ間の通信が動いたり動かなかったり・・・
FT231XSの半田付けの手直しを繰り返しながら暫くジタバタした挙げ句、基本に立ち返ってLOOPBACKテストの実施を決めました。
USBシリアル変換IC(FT231XS)単独のLOOPBACKテストで、これまで重宝していたJAVAのCOMMライブラリ(<==自作)にバグが見つかりました。結局、試作基板(5枚)がLOOPBACKテストに通るまで二日掛かりました。
しかし、相変わらずPic-coloコンソールとPic-coloデバッガ間の通信が動いたり動かなかったり・・・orz
USBシリアル変換ICとPICを合わせたLOOPBACKテストに試作基板が全て通るまで、さらに三日掛かりました。
まさかUSBシリアルのLOOPBACKテストにこれ程時間が掛かるとは思いませんでしたが、ようやくPic-coloの開発を先に進めることが出来るようになりました。
やれやれ。
ラズパイマガジンの「パイ専ボード」を見て考えた
ラズパイマガジンが雑誌連動企画で「パイ専ボード」(ESP32を搭載したRaspiのドータ・ボード)を販売するようです。
ラズパイマガジン <お得な>Raspberry Pi販売サイト
しかし、『ESP32とRaspberry pi3との組み合わせ』っていうのは、どうもしっくりしません。
PIc-coloにESP-WROOM-02の搭載を決めた時も悩みました。IoTデバイスとしてESP8266を単独で活用する事例もあるのに、敢えてPICと組み合わせる意味はあるのだろうか?
Pic-coloは『新しいPICの開発環境を提供すること』が最大のテーマですから、PIC無しという選択は考えられません。ESP-WROOM-02の搭載は、PICにWifi機能を追加する最も手頃な手段です。
しかし、PIC16F1788とESP-WROOM-02が組み合わされていることに技術的な合理性が見いだせないと・・・
『温度や気圧を測ってパソコン画面に表示してみました』ではPic-colo+ESP-WROOM-02の実用アプリケーションとは呼べません。
やっぱり、PICのリアルタイム制御機能を生かした倒立ロボットでしょうか?
ハードル高いなぁ~(<==実はPIC24を使って一度失敗している)
Pic-coloアプリケーションの候補ができた
Pic-coloはPICを使った実用アプリの開発環境として提案していく予定です。
となると、PICの機能を紹介するサンプル・プログラムだけでは不十分で、実用アプリの開発例を提示しなければなりません。
実用アプリの候補はいくつかあります。しかし、どれも地味というか・・・華がないというか・・・
そんな中で何とか実現したいと考えているのが『Pic-colo Theremin』です。
手の動きで音を操作する装置(楽器)で、DACの分解能が課題です。
『8bitDACのVref+とVref-に5bitDACの出力を加え、二つの5bitDACの出力差を256分割して12(13)bitDACを構成する』という方式を考えていて、その実現可能性を早急に確かめる必要があります。
MCCを使ってペリフェラルをサクサク設定して、DAC1、DAC2、DAC4の設定を変えながらAD変換した結果を画面表示する・・・Pic-coloなら簡単に実現できます。
早速、回路を組んでみたのですが、どうも5bitDACの出力がおかしいのです。5bitDACのPositive ReferenceにFVR_buf2を設定したのですが・・・
(MCCで Positive ReferenceにFVR_buf2を設定した)
マニュアルを調べると、Positive Source Selectは1bitで、VccまたはVref+のいずれかを指定することになっていました。orz
(5bitDACのPositive ReferenceにFVRは選べない)
Verf+には5bitDACの出力を接続しなければならないので、5bitDACのPositive Referenceとしては使えません。Vddを選択して5bitDACから0V~3.3Vの出力が得られるようになりました。(<==電源ノイズの影響が気になる)
実際、Raspiの3.3V電源だと12bitADCの計測値はばらつきます。しかし、平均化処理を施した結果を見ると、12bitbit分解能のDACとして動作していることが確認されました。
パチパチパチ~
この12bitDACが音源として使えるかどうか(?)まだ分かりませんが、『Pic-colo Theremin』の実現に向けて一歩前に進みました。
FT231XSを使ったUSBシリアル変換が動いた
1週間前に届いたPic-colo基板の組み立てを先延ばししてきました。
先ずは・・・
(1)ESP-WROOM-02をWifiのアクセス・ポイントに接続する。
==>O.K.
(2)MQTTでESP-WROOM-02からPC上のmosquittoにPubSubする。
==>O.K.
(3)PC上のJAVAプログラムからmosquittoにPubSubする。
==>O.K.
(4)FT231XSをSSOP変換基板に半田付けして動作確認する。
==>N.G. orz
実は、10月始めに FT231XSの試作で失敗しています。「0.65mmピッチなら半田付けできる(実績あり)」と気楽にやったらブリッジしまくり・・・
何とか半田付けをやり終えてPCに接続したのですが、USBデバイスとして認識されませんでした。
今回は十分注意して慎重に半田付けして、仕上がりもしっかり確認・・・したのに矢張り駄目です。3回試作して同じ結果なのですから、これ以上同じことを繰り返しても無駄だと思われます。
-------------------------
部品の使い方に誤りは無いのか?
配線に誤りは無いのか?
SSOPの半田付けはちゃんと出来ているのか?
熱を加え過ぎて部品を壊していないか?<==10月の試作はこれを疑った
USBポートの給電容量は足りているのか?<==別電源も試してみた
etc.
-------------------------
FT231XSは初めて使う部品なので、(あれこれ、あれこれ)悩みは尽きません。
困ったときのWeb頼み。
しかし、”FT231XS 接続できない"で検索をかけても、『適切なデバイス・ドライバーをインストールする方法』しかヒットしません。
万事休す・・・FT231XS無しで基板を組み立てる(USBシリアル変換ケーブルを使う)ことを、真剣に考え始めました。
と、一つだけ『デバイス記述子が見つからない』という不具合がUSBケーブルを交換したら直った、という報告を見つけました。
これまで、手元にはそれ一つしか無いUSBケーブルを使ってテストしていました。
『藁をも掴む』心境で秋月電子にUSBケーブルを発注したのが昨日です。
で、今朝届いたUSBケーブルを使って、早速試作基板をPCに接続してみると・・・
ビンゴ~
試作した基板3枚ともCOMポートとして認識されました。
パチパチパチ~
これまでテストに使っていたUSBケーブルは丸めてゴミ箱に捨てました。
やれやれ。
これで要素試作は全て終わりました。
いよいよ、Pic-colo基板の組み立てに取り掛かります。
Pic-coloの開発は悩ましい
Pic-coloは、PICkit3を使った従来のPICプログラム開発環境とは異なる、新しいプログラム開発環境を提供しようとしています。<==構えはでかい(^_^;)
『これくらい出来なければ使い物にならない』という最低レベルの基準を満たすべく開発を続けてきました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
<第一段階>
全ての変数をバイト配列で表示した。
(Baseタイプの変数はこれでも良いが配列は扱いづらい)
<第二段階>
配列は要素サイズに応じてバイト区切りを変えた。
(Baseタイプの配列はこれでも良いが構造体は扱いづらい)
<第三段階>
構造体はメンバーのサイズに応じてバイト区切りを変えた。
(ポインタ・タイプは参照先の値が知りたい)
<第四段階>
ポインタの参照先を別変数として表示した。
構造体メンバーを別変数として表示した。
今ここ。(<==ただしデバッグ中)
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
共用体はまだ扱えませんが、次に取り組む予定です。
背景はユーザの好みに合わせて変えられるようにしました。 ¥(^_^)
上の図は、Baseタイプ変数の他、構造体配列の要素(TEST_STRUCT構造体)のメンバーであるunsigned-char変数cとunsigned-int変数iの表示例です。
(配列の任意の要素を表示する機能が要るなぁ~ )<==今は先頭要素しか扱えない
ポインタへのポインタとか、構造体へのポインタとか、処理の階層化が適切に出来ていいれば、問題なく扱える筈ですが・・・確かめてみなと何ともいえません。
この作業をどこまで続けるか?(<==改善作業は、多分ず~っと続きます)
どこで仕様を一旦Fixしてリリースするか?(<==最低レベルの基準を満たしているか?)
悩ましい課題です。
JAVAでMQTTを試してみた
esp8266_MQTTで冷や汗をかきました。でも、なんとかクリア出来たので最後の関門『JAVAからMQTT接続』を試すことにしました。
参考にしたのはこちら(↓)の二つです。
JavaでMQTT入門 ローカル環境でPubSubの動作を検証してみる - Qiita
JAVAのソース・コードはこちら(↓)を使いました。
リンク==> gist.github.com
必要なorg.eclipse.paho.client.mqttv3ライブラリはこちら(↓)から持ってきました。
ソース・コードには、以下の修正(2カ所)が必要でした。
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
System.out.println("-------------------------------------------------");
System.out.println("| Topic:" + topic);
System.out.println("| Message: " + new String(message.getPayload()));
System.out.println("-------------------------------------------------");
}
// @Override
// public void messageArrived(MqttTopic topic, MqttMessage message) throws Exception {
// System.out.println("-------------------------------------------------");
// System.out.println("| Topic:" + topic.getName());
// System.out.println("| Message: " + new String(message.getPayload()));
// System.out.println("-------------------------------------------------");
// }
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
try {
// throw new UnsupportedOperationException("Not supported yet.");
System.out.println("Pub complete" + new String(token.getMessage().getPayload()));
//To change body of generated methods, choose Tools | Templates.
} catch (MqttException ex) {
Logger.getLogger(MQTT_Client2.class.getName()).log(Level.SEVERE, null, ex);
}
}
// @Override
// public void deliveryComplete(MqttDeliveryToken token) {
// //System.out.println("Pub complete" + new String(token.getMessage().getPayload()));
// }
環境に合わせて以下のように指定しました。
static final String BROKER_URL = "tcp://localhost:1883";
static final String M2MIO_DOMAIN = "1ST CATEGORY";
static final String M2MIO_STUFF = "2ND CATEGORY";
static final String M2MIO_THING = "ID";
static final String M2MIO_USERNAME = "username";
static final String M2MIO_PASSWORD_MD5 = "password";
この設定に従って以下のようにtopicが設定されます。
String myTopic = M2MIO_DOMAIN + "/" + M2MIO_STUFF + "/" + M2MIO_THING;
サンプル・プログラムをNetbeansで走らせるとこんな出力になりました。
Connected to tcp://localhost:1883
Pub complete{"pubmsg":1}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":1}
-------------------------------------------------
Pub complete{"pubmsg":2}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":2}
-------------------------------------------------
Pub complete{"pubmsg":3}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":3}
-------------------------------------------------
Pub complete{"pubmsg":4}
-------------------------------------------------
| Topic:1ST CATEGORY/2ND CATEGORY/ID
| Message: {"pubmsg":4}
-------------------------------------------------
publishとsubscribeのtopicを変え、google cromeのMQTT LENSアプリを使ってRetain設定による動作の違いも確かめることが出来ました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実は、昨日走らせたときはpublishする度にdisconnectしていました。
(最初はそういう仕様なのだと思った)
何故、今日は動作が違うのか?原因は不明です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
色々トラブルも有りましたが、ESP-WROOM-02を介してPic-coloコンソールとPic-coloデバッガを接続するための準備は何とか整ったようです。
次は、これ(↓)の半田付けだ!