denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

CCP3の出力pinの設定で戸惑った

便利に使っているMPLAB® Code Configurator (MCC) ですが、時々『あれ?』と戸惑うことがあります。

 

Pic-coloのPWM機能のサンプル・プログラムを書いていたときのことです。CCP3のデフォールト出力(RC6)がUARTのTXピンと重なっていたので、RB5に割り当てようとしたのですが・・・

Pin Managerが管理するModuleにCCPが有りません。orz 

f:id:denshikobo:20171207165242p:plain

CCP3をRB5に割り当てるためにはAFPCON2は0x01で初期化しなければならないのですが、MCCが生成したプログラムはAFPCONレジスタを0x00で初期化しています。orz

 

MCCが生成したプログラムを書き換えることは簡単ですが、果たしてそれは正しい手順なのでしょうか?一体どうすれば良いのか?

 ・・・・・・

ふと思いついて、Registersタブをクリックして設定リストを調べてみると・・・

ビンゴ~

f:id:denshikobo:20171207172459p:plain

AFPCON1、AFPCON2の設定メニューを見つけることが出来ました。

 

 

やれやれ

 

Pic-colo試作基板が動いた

5枚のPic-colo試作基板を組み立てたのは10日以上前です。

f:id:denshikobo:20171121153625j:plain

基本モデルを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を設定したのですが・・・

f:id:denshikobo:20171106180040p:plain

(MCCで Positive ReferenceにFVR_buf2を設定した)

 

マニュアルを調べると、Positive Source Selectは1bitで、VccまたはVref+のいずれかを指定することになっていました。orz

f:id:denshikobo:20171106180059p:plain

(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-02Wifiのアクセス・ポイントに接続する。

           ==>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ポートとして認識されました。

f:id:denshikobo:20171101114706p:plain

パチパチパチ~

 

これまでテストに使っていたUSBケーブルは丸めてゴミ箱に捨てました。

やれやれ。

 

これで要素試作は全て終わりました。

いよいよ、Pic-colo基板の組み立てに取り掛かります。

Pic-coloの開発は悩ましい

 Pic-coloは、PICkit3を使った従来のPICプログラム開発環境とは異なる、新しいプログラム開発環境を提供しようとしています。<==構えはでかい(^_^;)

 

 『これくらい出来なければ使い物にならない』という最低レベルの基準を満たすべく開発を続けてきました。

ーーーーーーーーーーーーーーーーーーーーーーーーーーー

 <第一段階>

全ての変数をバイト配列で表示した。

(Baseタイプの変数はこれでも良いが配列は扱いづらい)

<第二段階>

配列は要素サイズに応じてバイト区切りを変えた。

(Baseタイプの配列はこれでも良いが構造体は扱いづらい)

<第三段階>

構造体はメンバーのサイズに応じてバイト区切りを変えた。

(ポインタ・タイプは参照先の値が知りたい)

 <第四段階>

ポインタの参照先を別変数として表示した。

構造体メンバーを別変数として表示した。

 

今ここ。(<==ただしデバッグ中)

 ーーーーーーーーーーーーーーーーーーーーーーーーーーー

共用体はまだ扱えませんが、次に取り組む予定です。

f:id:denshikobo:20171030142030p:plain

背景はユーザの好みに合わせて変えられるようにしました。 ¥(^_^)

 

上の図は、Baseタイプ変数の他、構造体配列の要素(TEST_STRUCT構造体)のメンバーであるunsigned-char変数cとunsigned-int変数iの表示例です。

 

(配列の任意の要素を表示する機能が要るなぁ~ )<==今は先頭要素しか扱えない

 

ポインタへのポインタとか、構造体へのポインタとか、処理の階層化が適切に出来ていいれば、問題なく扱える筈ですが・・・確かめてみなと何ともいえません。

 

この作業をどこまで続けるか?(<==改善作業は、多分ず~っと続きます)

どこで仕様を一旦Fixしてリリースするか?(<==最低レベルの基準を満たしているか?)

 

悩ましい課題です。

 

JAVAでMQTTを試してみた

esp8266_MQTTで冷や汗をかきました。でも、なんとかクリア出来たので最後の関門『JAVAからMQTT接続』を試すことにしました。

 

参考にしたのはこちら(↓)の二つです。

JavaでMQTT入門 ローカル環境でPubSubの動作を検証してみる - Qiita

dotnsf.blog.jp

JAVAのソース・コードはこちら(↓)を使いました。

        リンク==> gist.github.com

必要なorg.eclipse.paho.client.mqttv3ライブラリはこちら(↓)から持ってきました。

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.0/org.eclipse.paho.client.mqttv3-1.2.0.jar

 

ソース・コードには、以下の修正(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デバッガを接続するための準備は何とか整ったようです。

 

次は、これ(↓)の半田付けだ!

akizukidenshi.com