楽々PIC

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

インデックス

XBee

 ブラシローラー型水田除草ロボットのラジコンその他基礎実験にも使う為、XBee-PRO ZB S2Bモジュール(Wireアンテナ)を手配しました。 IEEE 802.15.4 と言う近距離無線通信規格と、ZigBee と言う通信プロトコルによる送受信ユニットで、センサーネットワークやホームネットワーク等で活用が期待されている多様な製品群の一つです。

 XBee-PRO ZB S2Bモジュール(Wireアンテナ)
 http://akizukidenshi.com/catalog/g/gM-05804/

XBee


赤外線リモコン(一方通行のコマンド送信)に比べて高機能(双方向通信、情報量大)なリモコンをはじめ、幾つかのツールを作りながら勉強したいと思います。 XBee ( S2B )の電源電圧が 2.7~3.3V であり、電池駆動も視野に入れることから、PICマイコンも 3.3V 以下で動作するものを選び、18F13K22 , 18F23K22 あたりを使おうと考えています。


以下は、一連の記事のインデックスにします。

XBee 実験開始 
 沢山のコマンドの中から幾つか試し、XBee を介してマイコン同士が通信する方法も見当が付きました。 次はいよいよ PIC 同士の通信を試したいと思います。


XBee ドキュメント類 
 英語版ですが、ATコマンドやAPIフレームについても詳しく書かれています。 参考書を元に、解らないところや不明確なところを調べる分には私でも理解できそうです。

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


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




18F: テーブル・ジャンプ

「テーブル・ジャンプ」 や 「ジャンプ・テーブル」と言った検索をして来てくれる方がいらっしゃいます。

RRP1320-1-02-1 , RRP1320-1-03-1 , RRP1320-1-04-1 では、赤外線リモコンの受信コードに応じて16個、登録外コード受信時に1個の合計17個のサブルーチンをコールします。 中間コードを比較しながら分岐命令を連ねて受信コード毎の分岐を実現していましたが、ジャンプ・テーブルを使った方法を試してみました。 <PICデバイス=18F1320> 今後アップロードするプロジェクトから適用します。

PIC18F のテーブル・ジャンプは PCLATU , PCLATH にジャンプ先のアドレス上位、中位を準備して、PCL に下位を書くことで実現します。 下図はテーブル・ジャンプを使っているアセンブラ・ソースで、ircchk5 に実行を移す時点で ircode に 1~16(10進数) の値が入っています。

初めに PCLATU , PCLATH , ircd3(私設ワーク) にジャンプ・テーブルの先頭アドレス( ircchk51 )を準備して、( ircode - 1 )を2倍した値を加算することで、目的のジャンプ・アドレスを完成させます。

Jump_Table

最後に PCL に下位アドレス( ircd3 )を書き込んでジャンプ・テーブル内にジャンプします。 初め PCL への転送に MOVFF を使いましたが、アセンブラーがエラーを返して MOVFF は使えないと教えてくれました。 MOVWF なら問題なく BUILD SUCCEEDED です。

連番に基づく分岐処理の他、ジャンプ先のアドレスをデータ・メモリーに書いてジャンプ先を制御したいと言った時に使います。 PICではデータ・メモリーにジャンプ命令を書いて実行させることは出来ませんが、フック( HOOK )同様の動作が可能です。


以下は 18F ニーモニックと小技のインデックスにします。
以前の関連記事インデックスは とにかくビルド! です。


18F: DECF とボロー 
 減算タイマーの処理で DECF を使っていますが、2byte 以上のデータを扱うとボロー(桁下がり)の処理が必須にです。 引き算 SUBWF では上位 byte の引き算に SUBFWB を使ってボロー(Cの反転)を引き算しますが、DECF でも同様にキャリーフラグが動作するのか調べてみました。

18F: BCD 
 BCD ( Binary-coded decimal )は二進化十進数と呼ばれ、10進数を2進数( 4bit )で表現します。 何と言っても慣れ親しんだ10進数を扱う為に必須の手法です。


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



温度センサー

だいぶ役者(周辺部品とプログラム)が揃ってきましたが、温度センサーにも挑戦です。 温度センサーは National Semiconductor 製 LM60 で、-40~125℃を測定可能、±2℃の精度です。 A/D変換値を元にテーブル参照で文字列に変換して、LCDの3行目に温度を表示するプログラムです。

DSC00078

50msec 間隔で発生させた TIMER0 割り込みでサンプリングしています。

いつもお世話になっている参考書の記述と PIC18F1320 データシートに食い違いが見られた為、データシートの一部を紹介しながら数回に分けて説明する予定です。


以下は温度センサー関連記事のインデックスにします。

温度センサー2 
 A/Dコンバーターの設定を行います。 動作がおかしいと思った時はデータシートを確認することも大切ですね。

温度センサー3 
 50msec 間隔で発生する TIMER0 割り込みの都度行う、A/Dコンバーターのサンプリングについて説明します。

温度センサー4 
 A/Dコンバーターからのサンプリング結果を温度(℃)に変換するデータテーブルを作ります。

温度センサー5 テーブル参照 
 A/D変換結果を元にデータテーブルを参照してLCDに温度を表示します。 一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。

RRP1320-1-04 概要 
 RRP1320-1-03 に温度制御機能を追加しました。 パン作りのイースト発酵などに応用出来そうです。

RRP1320-1-04 温度誤差 
 A/D変換基準電圧(Vref)にPICの電源電圧を使っています。 電源電圧(5V)の変化に連れて入力電圧に対するA/D変換結果が変化します。

ディジタル温度センサー 
 A/D変換の基準電圧による測定誤差が大きい為、ディジタル温度センサーを試してみました。 センサーは Maxim の1wireデジタル温度センサー DS18B20+


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






RRP1320-0 回路図

 このブログでは PIC18F1320 を使って、最初の専用ハードウェアを作ります。 デバッカーとしてPICKit3を使い、この基板をターゲットにPICの勉強を続ける予定です。 その後、RRP1320-0の周辺回路基板を作り、目に見える動作を楽しみながら学習する予定ですが、PICKit3から見れば下図のRRP1320-0しか見えないはずです。 これ以上は無理な位シンプルにしました。 1本でも多くの端子を周辺回路に割り振れるように、外付けのクロック回路すら削減し、内臓クロック8MHzを使う予定です。

RRP1320-0_circuit


レイアウトは下図の通りです。 ドットがユニバーサル基板のスルホール、水色が裏面のスズメッキ線、赤色が部品面(PIC実装面)のジャンパー線です。 青色はPICとヘッダーピン、ヘッダーソケットと基板で部品面から見た図です。

レイアウト


PICKit3から見れば、PIC18F1320の端子に何を出力したかが重要なだけで、周辺回路基板がどうあろうと知ったことではありません。 同時にPICKit3からは、周辺回路基板がPIC18F1320の入力(に設定した端子)に与える電圧とその変化しか見えませんし、粛々と予め決められた手順に従って出力端子を動かすだけです。

PICの入出力端子の挙動とプログラムが織り成す現象を、結果的に人を楽しませたり、人の役に立つもにする知識と経験を学びたいと思います。


以下は、RRP1320シリーズ関連記事のインデックスにします。

PIC18F1320の入出力ピン
 PIC18Fシリーズの中で、最もピン数の少ないPICデバイスですが、最小規模の18F1220に比べて2倍のプログラム・メモリー容量を持っています。

RRP1320-0 ハード製作 
 RRP1320-0の部品が届いたので、早速製作します。 必要な部品は下図の他には若干のスズメッキ線とジャンパー用の被覆線と言うように極少数です。

RRP1320-0 ハードデバック
 RRP1320-0 が出来たので、ハードウェア・デバックを行いました。 始めて故に最も気になっているのは、本当に内臓OSCの8MHzで動いてるのかと言うことです。

RRP1320-0 test1 構造
 「RRP1320-0 ハードデバック」に紹介したLEDを点滅させるプログラム(プロジェクト)について説明します。 割り込みを使う為、プログラムの機能毎に独立した複数のソースファイルを作っています。 この記事から test1 のプロジェクトを丸ごとダウンロード可能です。

RRP1320-0 test1 割込み・ピン機能設定
 最初にA/Dコンバーターの設定をしてから、出力ポートを設定しています。 8MHzの4周期分(0.5usec)と1/16プリスケーラーを使って100msecのカウント値(12500d)を求め、100msecで16bitタイマーカウンターがオーバーフローするように TMR0H , TMR0L の値( 0CF2Ch )を準備します。

RRP1320-0 test1 低位割り込み 
 今回発生する低位割込みはTIMER0 だけです。 最初にレジスターを退避して割り込みフラグをリセットし、TIMER0 のカウンター値を初期化してから必要な処理を行いレジスター復旧して RETFIE で割込み処理を抜けます。


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



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


アーカイブ
楽々PIC 宛てBlogMail


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

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

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ