denshikobo’s blog

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

Raspi-3でオシロジが動いた

(2016.08.03)
暫く前にRaspi-3を入手したのですが、Osci_logi_consoleプログラムが動いてくれません。そのまま暫くお蔵入りしていたのですが、今日は、それを調べてみました。

『コマンド送信は正常動作している(<==ように見える)のに、データ受信が何故出来ない?』
『Raspiの動作が速くなって、読み取りタイミングに問題が生じた?』

しかし、気になっていた箇所に手を加えても状況は全く変わりません。orz

Oscilogi410(PIC32MX250搭載基板)に問題無いことは確認出来たので、Raspi-3に何が問題がある筈・・・

結論から言うと「Raspi-configでI2Cをenableにする」で解決しました。

Raspi-2ではBCM2385ライブラリによるI2C操作でカーネル・ライブラリ(I2Cモジュール)を有効にする必要はありませんでした。その辺りの事情がRaspi-3では異なっていたようです。

 

これでOsci_logi_console(JAVAプログラムj)の開発がサクサク進む?
-------------------------------------------------------------------------

(2016.08.04)

どうやら勘違いだったようです、また動かなくなりました。orz

動いたり、動かなくなったり・・・

挙げ句にi2cdetectの様子もおかしくなりました。Raspi_3のCPU温度を計ると58.0℃です。CPU本体は大丈夫なのですが、ペリフェラルが(I2C)が駄目みたいです。
さて、困った。Raspi-3にOscilogi410を取り付けるのは無理?

 

ヘッダピンの取り付けを間違えた

シングルインラインヘッダピンの取り付けを間違えた。

しかも60pin以上。orz

 

電動式の半田吸い取り機があれば修復も容易なのだが、高価なもの(3万円くらい)なのでなかなか手が出ない。

 

そんな折りにネットでこんなものを見つけた。

www.monotaro.com

初代はんだシュッ太郎(HSK-100)から数えて3代目。
サンハヤトも苦労しているようだが、そろそろ買い時?

 

お、こちらの方が安い!

www.marutsu.co.jp

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

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

ーーーショボンーーー