denshikobo’s blog

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

PICkit3で書き込みできない

(2016.07.14)
Code Configuratorが生成したコードをコンパイルしてPICkit3で書き込もうとしたのですが、Vddのオーバーカレントで書き込みシーケンスが進みません。orz

Heater_ControlerとSolder_Controlerを組み立てたときは、問題無かったのに何故だ?(<==実はたまたま上手くいっていただけだった)

組み立てている3セットのうち、1セットだけは書き込み出来ました。
???

Solder_Supporterの回路はこんな感じです。

f:id:denshikobo:20160714154538p:plain




5V電源を外付けしてみた(<==これが良くなかった)のですが、回路に異常な電流が(500mAくらい)流れます。シリーズ抵抗を入れてVddを計ると0.8Vしかありません。

電流が流れる場所を探るため、組み立てた配線を外すことにしました。
目星を付けたVdd周りの配線を外すと・・・
ビンゴ~

PICkit3で書き込み出来るようになりました。デバッガを起動するとブザーが鳴りました。COG1、PWM3、Timer2のデフォールト動作と思われます。

外したVddラインの先にあるのは、AC直結の電源回路です。PICkit3を接続するときはACラインは外してあるので、気にしていなかったのですが・・・

まじまじと回路を眺めて、不具合箇所を探しました。整流ブリッジかツェナー・ダイオードが怪しいと思ったのですが・・・(<==まだ気がつかない)

先ずはツェナー・ダイオード(<==簡単に外せる)を調べてみることにしました。
ビンゴ~

ツェナー・ダイオードを外すとVdd周りの配線を元に戻しても、PICkit3で書き込み出来ました。

不具合箇所はツェナー・ダイオードで間違いありません。でも何時壊れた?

あ~っ!(<==やっと気付いた)

(1)ツェナー・ダイオードはVddにつながっている
(2)ツェナー電圧4.7Vに対してPICkit3の供給電圧5.0V
      ==> PICkit3が数10mA電源供給しても4.7V以上にならない
   ==> PICkit3でオーバーカレント
(3)5V電源に接続したとき500mAくらい流れた
      ==> 耐電力500mWのツェナー・ダイオードで2W以上の電力消費
      ==> 熱破壊
(4)シリーズ抵抗を入れて回路のVddを計る
      ==> 壊れたツェナー・ダイオードで0.8Vまで電圧降下する

ツェナー・ダイオードを交換し、PICkit3の供給電圧を4.625Vにして、
ようやくトラブル・シュートが終わりました。
やれやれ

Solder_Supporterを作り始めた

(2016.07.13)
久しぶりのブログ更新です。

以前制作したHeater_Controlerと Solder_Controlerを一つにまとめた、Solder_Supporterの制作を開始しました。Heater_Controler基板と Solder_Controler基板を組み合わせて一つのケースに収める計画です。

久しぶりにMPLAB Xを起動したら、”Updateプログラムがある”と言うので早速MPLAB XをUpdateすることにしました。2016/06/23にリリースされたMPLAB X(3.35)です。

f:id:denshikobo:20160713144142p:plain

3.35になってアイコンが変わりました。

f:id:denshikobo:20160713144157p:plain

Code Configuratorも2.25から3.15にバージョン・アップしています。左のProject ResourcesとDevice Resourcesで項目を選び、Easy Setupタブで関連する設定値を操作します。この辺りの操作性はかなり改善されたように思います。

右上のパッケージ表示も判りやすくて良いのですが、Packageを選択するプルダウン・リストがなかなか見つからず(左下にある)、ちょっと戸惑いました。慣れれば問題無いのかもしれませんが・・・
f:id:denshikobo:20160713144210p:plain

これまで同様、Generateボタン(左上)をクリックしてコード生成します。目を引くのは中央のNotificationsで、クリックすると現在の状況に応じた設計上の注意点が示されます。

Device ResourcesからPWM3を選択し、Select a TimerでTimer2を選択すると以下のような表示が・・・

   Module   Types       Description
   PWM3    Warning   Configure the Timer2 for module.

Device ResourcesからTimer2を選択し、PrescalerやPostscalerを設定すると・・・
   Module   Types       Description
   PWM3     HINT       Postscaler setting does not affect PWM module.

 

バイス・マニュアルを調べると、Timer2のPostscalerはTMR2割込フラグだけしか影響しないことが判りました。

f:id:denshikobo:20160713144219p:plain

Prescaler1:4、Postscaler1:4と設定していたのをPrescaler1:16、Postscaler1:1と設定し直して事なきを得ました。このNotificationsはなかなかに優れものです。

(Postscalerを1:1にしてもコーション・マークが消えないのはちょっと惜しい)

f:id:denshikobo:20160713144234p:plain

ヘッダ・ファイルを含めると30個以上のファイルが自動生成されました。

パチパチパチ~

 

ここからSolder_Supporterの開発が始まります。

3軸ジャイロセンサ(L2GD20)が動き始めた

(2016.04.10)
以前、PICクラブで頂いたTQFPパッケージのデバイスを使って引き半田を練習しました。

f:id:denshikobo:20160410161416p:plain

あくまで半田付けの練習用と考えていたので、何だか判らないまま頂いて来たのですが、調べてみるとdsPIC33FJ64MC706(↓)でした。(ラッキー!)
http://www.microchip.com/wwwproducts/en/dsPIC33FJ64MC706A

これを、今回の倒立振り子ロボットのコントローラとして使用することにしました。

dsPICは初めてだったので、立ち上げに少し手間取りましたが、Explorer 16 Development Board用のSample Projectをベースに、なんとか3軸ジャイロセンサ(L2GD20 ↓)とI2Cで通信することができました。
http://akizukidenshi.com/catalog/g/gK-06779/

f:id:denshikobo:20160410161512p:plain

f:id:denshikobo:20160410161543p:plain

オシロジ410でモニタしたWHO_AM_I (0Fh)レジ読み取りの通信波形

最初に、WHO_AM_I (0Fh)レジを読み取って0xD4が返ってくることを確認し、続いてCTRL_REG1 (20h)に0x5Fを書き込んでデータ・レートを190Hzに設定し、OUT_X_L (28h)から6バイトを続けて読み取ると・・・
L2GD20が計測した3軸の角速度が読み取れました。
(パチパチパチ~)

作業は順調に進み、L2GD20の初期化手続きを整理して、角速度計測プログラムを書いたのですが、そのプログラムのデバッグで問題が発覚しました。センサを動かしても、計測データが変化しません。orz

初めて使うデバイスなので、何が起きているのか(<==どうであれば良いのか)判らず、センサを何度も動かしたり、設定を(あれこれ)変えたりしましたが、状況は全く変わりません。

で、ふと秋月のマニュアルを読み返したとき、次の一文に気がつきました。
『はじめにWHO_AM_I (0x0F)を読みます。正しく通信出来ている場合・・・』

WHO_AM_I (0Fh)レジの読み取りはL2GD20との接続確認のため(だけ)に行うものと思いこみ、初期化手続きから外したのです。それを初期化手続きに追加してみると・・・


ビンゴ~

計測データが変化するようになりました。
WHO_AM_I (0Fh)レジの読み取りは、単なる接続確認用ではなく、L2GD20の初期化シーケンスを開始する”呪文”だったようです。

やれやれ!

 

ASK通信を試してみた

(2016.03.29)
倒立振り子ロボットを作ってみようと考えて(<==妄想段階)います。

立つだけでなく、外部コマンドに従って自律走行するものを目指していて、そのコマンドを送受する仕組みとして、ASK通信を試してみることにしました。

使ったのはこれ(↓)です。
http://www.dx.com/p/mini-rf-transmitter-receiver-module-315mhz-wireless-link-kit-w-spring-antennas-for-arduino-413157#.Vvj3iEfNEec

<仕様>
transmitter module
- Working voltage: 3-12VDC
- Working current: 3.5mA
- Working frequency: 315MHz
- Transfer rate: 4.8kbps (max)
- Transmission distance: When the spring antennas are soldered to transmitter and receiver module and the power supply is 5V, the open area transmission distance can be increased to 40 meters.
- Antenna: You can use the wire whose length is 23cm or the spring antenna for 315MHz RF.
 
receiver module
- Operating voltage: 4.5 ~ 5.5VDC
- Working frequency: 315MHz
- Working Current: 1mA

f:id:denshikobo:20160329133221p:plain

送受信モジュールにヘリカル・アンテナを取り付けて実験を開始した。

 

受信モジュールの電源電圧が4.5VDC以上と記されていますが、Raspiから供給した3.3V電源でも問題なく動作しました。また、送信モジュールの動作電流が3.5mAと記されていますが、実測では7mAでした。奥に見えるのが送信モジュールでDATラインに矩形信号(CH0)を供給(黄色のワイヤ)して、手前に見える受信モジュールのDAT出力(CH1)をオシロジ410でモニタしました。

f:id:denshikobo:20160329133102p:plain

仕様には4.8kbps (max)と記されているが、8kbpsでも問題なく動作している。


こちらの方の実験(↓)によると、『送信モジュールのDAT入力がHiを保持しているときも、Lowを保持しているときも、受信モジュールにノイズらしき出力が現れる』ということなのですが・・・
http://www.geocities.jp/neofine9/work/modem2/modem2.html

f:id:denshikobo:20160329133110p:plain

送信モジュールのDAT入力をLowに固定したときの受信モジュールのDAT出力

 

f:id:denshikobo:20160329133117p:plain

同じくHiに固定したときのDAT出力

親族SNS管理人が使用したモジュールでは、送信モジュールのDAT入力がHiを保持しているときにやや大きなノイズが観測されましたが、Vdd/2を超えるようなものは現れませんでした。(受信モジュールの出力はDCカットされているのかも・・・)


送信モジュールのヘリカル・アンテナを外し、送信モジュールを別電源にして、通信可能な条件を探ってみました。

f:id:denshikobo:20160329133226p:plain上の写真は送信モジュールに30cmの白いワイヤを取り付けたところ

f:id:denshikobo:20160329133128p:plain

送信モジュールのアンテナを外し、送受信モジュールを30cm離してみた

 

f:id:denshikobo:20160329133144p:plain

送信モジュールの向きを変えてみた


送信モジュールのアンテナを外しても30cm以内なら大丈夫そうですが、送信モジュールの向きを90度回転させると、信号レベルが下がりました。

f:id:denshikobo:20160329133215p:plain

送信モジュールのアンテナを外し、送受信モジュールを50cm離してみた


50cmまで離すとかなり厳しくなってきました。この状態で10cmのワイヤをアンテナ端子に接続すると信号レベルが(少し)改善し、ワイヤを30cmにすると問題ないレベルに回復しました。

f:id:denshikobo:20160329133150p:plain

50cmまで離して、10cmのワイヤを付けてみた

 

f:id:denshikobo:20160329133155p:plain

50cmまで離して、30cmのワイヤを付けてみた

 
矩形波を16kHz(<==32kbps相当)まで上げてみました。

f:id:denshikobo:20160329133208p:plain

矩形波16kHzのときの受信モジュールの出力波形


受信モジュールをプラスティック・ケースに入れてみました。

f:id:denshikobo:20160329133202p:plain

50cmまで離して、送信モジュールに30cmのワイヤを付け、受信モジュールをプラスティック・ケースに収めた時の受信モジュールの出力波形

親族SNS管理人の得た感触
(1)送受信モジュールにヘリカル・アンテナを取り付けた状態なら、数mの距離(<==未確認)で9600bpsの通信が可能

(2)送信モジュールのヘリカル・アンテナを外しても、50cm以内なら通信可能(ただしロジック判定の閾値を操作する必要がある)
(3)送信モジュールに30cm程度のワイヤを接続すれば、50cm以上でも通信可能(ただしワイヤの配置に留意する必要がある)

さて、これをどのように使えば良いのか?

悩ましいところです。

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

追記(2016.03.30)

使用したASK通信モジュールは技適の認定を受けておらず、あくまで実験的な試みです。安易な利用を推奨するものでは無いことをご承知おき下さい。

 

やらかしちまった!

(2016.03.28)
ELECROWに発注した基板が、思いのほか早く(出荷から4日で)届いて喜んだのですが・・・

オペアンプをはんだ付けしようとして、愕然としました。足がパターンに乗りません。orz

SOP-8は1.27mmピッチなのですが向かい側のピンとの距離(Overall Width)はデバイス(メーカー?)によってまちまちなことをうっかりしていました。

 

f:id:denshikobo:20160328185513p:plain

パターンを引き直して、再発注します。

ーーーショボンーーー

 

アダプター基板の設計が固まった

(2016.03.03)
二転三転していたオシロジのアダプター基板ですが、DCアンプを止めて、ゲイン可変のACアンプを(二回路)設けることにしました。

トリマでゲイン調整する方式は(固定ゲインを切り替える方式よりも)簡便で使い勝手も良いのですが、計測した波形の振幅電圧を求めるには、基準信号と比較する必要があります。まぁその辺りは『運用次第』と割り切ることにしました。
<回路図>

f:id:denshikobo:20160303115904p:plain

<基板パターン>

f:id:denshikobo:20160303115916p:plain

デザイン・ルール・チェックを終え、ネットリストの照合も無事終了しました。
シルクとレジストの干渉チェックが終わったら、いよいよ基板を発注します。

今回はELECROWを試してみようと考えています。

www.elecrow.com

さて、どんなもんでしょう

オシロジのアダプター基板を作り始めた

(2016.01.08)
オシロジ機能を拡張するアダプター基板の設計を始めました。

拡張機能の一つはリニア・アイソレート計測です。
現状でもAC100V直結回路の信号計測は可能(<==一回やってみた)ですが、RaspiごとACラインに接続する瞬間はドキドキでした。(使用しているACアダプターのアイソレーションを信じるしかない!)

気楽にAC100V直結回路の信号を計測できるように、フォトカプラを使った簡易版リニア・アイソレート回路を設けることにしました。

もう一つは小信号計測機能です。
現状は計測レンジが一つ(0~3V)で、mVオーダーの信号は計測できません。そこでゲイン10倍と100倍のリニア増幅回路を設けることにしました。二つのアンプをカスケード接続すればゲイン1000倍の増幅回路になります。ただし、単電源のDCアンプなのでオフセット電圧が問題になりそうです。

回路はこんな感じ

f:id:denshikobo:20160108120530p:plain

それを基板に落とし込む

f:id:denshikobo:20160108120527p:plain

5cm×5cmに収めるため、リニア増幅回路の抵抗も表面実装部品にしたのですが、どうやら金属皮膜抵抗に置き換えることができそうです。

少しやりくりして、こんな風に変えました。

f:id:denshikobo:20160108120518p:plain

まだまだ、あちこちに手を入れることになりますが、あともう少しです。