楽々PIC

水田除草と言うブログを書いていますが、PIC関連の記事が意外に人気で驚いています。 PICを使った電子工作に興味を持つ方が多いことを知って、一緒にPICを学ぶブログを作りたいと思いました。 「楽々PIC」は教材と言うよりも少し実用性?のある楽しい道具を作りながら学ぶブログを目指します。

Pic

ディジタル温度センサー4

ディジタル温度センサー3」で紹介した割り込み処理からフックで実行されるプログラムの内、DS18B20+ にコマンドを送信(書き込み)する部分と、温度データを読み出している部分のアセンブラソースを紹介します。 クロック周波数8MHzでの実施例です。 実行サイクル数やNOPコマンドで時間調整している為、クロック周波数が異なる場合には調整が必要です。

下図がコマンドを送信(書き込み)する部分です。

write2

先の書き込みスロットを終了する為に 1.5usec 間 1-Wire-バスを解放した後で、書き込みスロットの先頭で 1.5usec 間バスに Low を出力します。 その後送信データに従ってバスに High または Low を出力して割り込み処理を抜けます。 最初の 1.5usec は次の割り込みまでのタイマー設定を行う間に確保されます。 2つ目の 1.5usec は送信データのシフトとNOP命令で確保しています。

下図は、温度データを読み出している部分のアセンブラソースです。

read2

先のスロットを終了させる為に 1.5usec 間 1-Wire バスを解放した後で、1.5usec 間バスに Low を出力し、さらに 9.5usec 経過した時点でバスを読み出して割り込み処理を抜けます。 クロック周波数が8MHzでは10usec程度の待ち時間は割り込みを抜けずにNOPで処理する方が安定するし、他の(低位)割り込み処理にも不具合は予想されないと思います。

関連記事のインデックスは右記事の末尾にあります。 → ディジタル温度センサー


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。





ディジタル温度センサー3

DS18B20+ で温度測定をする為に「ディジタル温度センサー2」で紹介したように1秒間を超える手続き(ポート入出力)が必要です。 この間も温度制御や赤外線リモコン受信を並行して進める為に、可能な限り割り込み処理で必要な手続きを進める必要があります。

1-Wire バス・プロトコルは少々面倒な部分がありますが、今回の目的を実現する分には予め決まっているタイミングで以下4種類の処理を組み合わせて淡々と進めるだけで、複雑な分岐処理はありません。

1. ポートに Low を出力
2. ポートに High を出力
3. ポートを入力ポートに設定
4. ポートの値をサンプリング

RRP1320-1-04-2 の温度センサーを DS18B20 に置き換える為、他の処理(例: 赤外線リモコン受信)よりもシビアなタイミング管理が必要な 1-Wire バス・プロトコル用に、高位割り込みに設定した TIMER3 割り込みを使うことにしました。
DS18B20 は RB0 に接続し、RB0 について先の4種類の処理を行います。 クロックは内臓 8MHz のままです。

タイミングがシビアなので、割り込み発生の都度分岐するのではなくて、割り込み直後に前述4種類の内(予め決められた)いずれか一つの処理を行い、次のタイミング(割り込み)に備えて TIMER3 を設定し、次回割り込み時に実行するプログラムを指定(予約)することにしました。

TIMER3 割り込みの都度指定されたプログラムを実行する為に、フック( HOOK )を使っています。 データ・メモリーとプログラム・メモリーが分かれている PIC の場合はフックと呼べないかも知れませんが、TIMER3 割り込み処理の先頭で所定のデータ・メモリー( 3byte )を参照して指定(予約)されたアドレスにジャンプします。

下図は、TIMER3 割り込みを処理する高位割り込みプログラムのアセンブラ・ソースです。

inthigh-0

割り込みフラグをクリアして直ぐに、データ・メモリーに指定(予約)されたアドレスにジャンプしています。(10~13行目)

下図はジャンプ先の一例で、リセットパルスの後でデバイスの存在パルスをサンプリングするプログラムです。 ディジタル温度センサー2 に示したタイミング図の内、リセット・パルスの丸囲みSに相当するタイミングで実行されます。

inthigh-2

44行目でサンプリングを行い、結果を dsstf < 1 > に反映させるとすぐに次の割り込みタイミングを規定する為に(予め準備された) TIMER3 を設定しています。(46,47行目)

続いて、次の割り込み時に次々回の割り込みタイミングを規定する TIMER3 の設定値を準備し、次回割り込み時のフックアドレスを指定(予約)します。 続く書き込み(送信)処理に必要なワークの準備を済ませて、最初の図の15行目にジャンプしています。
67行目に RETFIE  FAST と書いても良いのですが、フックを使うと解り難いソースになる為、少しでも読みやすくする工夫のつもりです。

関連記事のインデックスは右記事の末尾にあります。 → ディジタル温度センサー


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




XBee 3役

XBee に接続する回路の検討を進めつつ、3台目の XBee が入荷しました。 これで、コーディネーター、ルーター、エンドポイントと言う3役を同時にネットワークして実験が可能になりました。

下図は、入荷した3台目です。 XBee ( ZigBee 版  ZB シリーズ )は X-CTU と言う設定ツールを使って、前述3役のいずれかに設定できるのですが、この3台目はエンドポイントに設定しました。

DSC00236

X-CTUでAPIモード3役の内いずれかに設定し、PAN-IDを書き込めば、後はネットワークに接続して動作確認しながら、X-CTUに接続したデバイスからPAN( Personal area network )中の任意デバイスの設定を変更可能です。 ただし、コーディネーターは一つのPAN内に1台だけです。

緑色の基板は秋月電子通商さんの XBee用2.54mmピッチ変換基板 ( AE-XBee-REG-DIP )ですが、電池駆動や3.3V出力のACアダプターに対応するため、入荷時点の AE-XBee-REG-DIP に実装済みだった三端子レギュレータを取り除き、2.54mmピッチ1番ピンと2mmピッチ1番ピンを短絡して使っています。

下図は、Bee Explorer でビジュアル表示した3台のネットワークです。 Bee Explorer はコーディネーターに接続して使います。

Bee_Ex_3


ルーターを遠ざけると下図のように親子関係が変化します。

Bee_Ex_3kaku


暫くの間、コーディネーターに X-CTU を接続して使うことになると思うので、エンドデバイスにPICを接続してあれこれ試す回路を考えます。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




PIC18F13K22

 XBee を使って作ってみたいツールが色々あって、どこから手を付けるべきか迷いながら、あれこれ試しています。 エンドポイントやルーターにはマイコンを接続しなくても出来ることが沢山あるのですが、デジタル温度センサーなどを付けようとすると何らかのマイコンが必要そうです。 屋内のエンドポイントやルーターに隣接して見通しの良い条件では赤外線リモコンも併用して安価にON/OFFセンサーをちりばめると言うのも面白そうです。

こう言った用途に 18F13K22 も検討しています。

PIN SUMMARY です。
PIN_SUM_13K22


電源電圧とクロック周波数の関係図です。

V-F_13K22



18F23K22 はこちら→ PIC18F23K22


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。




XBee 実験開始

 XBee の実験を開始しました。

ルーター側
DSC00234

コーディネーター側
DSC00235

 最初は参考書に従い X-CTU と言う設定ツールをPCにインストールして、購入した2つの XBee ( S2B ) をコーディネーターとルーターに設定します。 下図はコーディネーターに設定している画面です。

x-ctu_C

 その後、PCとコーディネーターに設定した XBee を接続して X-CTU を起動し、ルーター側の電源を入れれば、2台だけのネットワーク?を構築してくれます。

下図は Bee Explorer と言うツールでネットワーク?をビジュアルに表示しています。 2台だけだと寂しいですね。 エンドポイント用にもう1台あった方が XBee を再設定する手間も減り、理解が早まりそうです。

Bee_Exprorer


続いてコーディネーター側からルーター側 XBee のディジタル I/O 11番をHighに設定する API フレームを送り、予定通りルーター側のディジタル I/O 11番に接続したLEDが点灯しました。

下図は X-CTU のターミナル機能を使って、ルータ側 XBee のディジタル I/O 11番をHighに設定するフレーム交信している画像です。

x-ctu_P1

青い文字が送信フレームで、赤い文字がレスポンスです。 沢山のコマンドの中から幾つか試し、XBee を介してマイコン同士が通信する方法も見当が付きました。 次はいよいよ PIC 同士の通信を試したいと思います。 単なる実験ではつまらないので、何らか楽しいツールになるように考えてみます。

最後になりましたが参考書はこちらと、久しぶりに買ったトランジスタ技術 2012年12月号です。

 「超お手軽無線モジュールXBee」
 http://toragi.cqpub.co.jp/tabid/534/Default.aspx

お手軽XBee



楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。


ダウンロードコーナー
記事検索
アンケートに御協力下さい


アーカイブ
楽々PIC 宛てBlogMail


--- ご了承下さい ---

注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
QRコード
アクセスカウンター

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ