楽々PIC

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

ポート

ポート入出力

温度制御定数と出力」の中で、下図のようにポート出力を High / Low に切り替えるアセンブラ・ソースを紹介しています。 <PICデバイス=18F1320>

温度制御出力

ポートの入出力を行う SFR には、PORTn と LATn があり上図の LATB はポートBに対応しています。 PORTn を入力(読み出し)、LATn を出力(書き込み)に使うようなので、私もそれに従っています。

PORTn と LATn の違いは以下のページが勉強になります。
 PORTレジスタとLATレジスタ
 http://homepage3.nifty.com/mitt/pic/pic1320_06.html

ポート出力は LATn に書き込み、入力は PORTn を読み出したりビットチェックを行うことで実現します。
1bit だけ書き換える場合には BSF , BCF , BTG と言ったニーモニックを使います。 複数の bit を同時に(同期して)書き換える場合は ANDWF , IORWF , XORWF が便利です。 8bit を一気に書き換える際には MOVF , MOVWF , MOVFF , CLRF , SETF 等が使えます。 ただし、8bit の中に他の割り込みプログラムで(も)書き換える bit がある場合は、割り込み処理による書き換えタイミングにより、他のプログラムの実行結果に対して意図しない悪影響を与える場合があり注意が必要です。

同様にポート入力では 1bit だけの時に BTFSC , BTFSS を使い、複数 bit を同時に(同期して)読み出す場合は 8bit 全てを読み出してから処理します。 入力時には他のプログラムに影響を与えることは無いでしょう。

ポートの入出力を行う前に下図のように各ポートについて bit 単位で入出力の設定を済ませる必要があります。

ポート定義

A/DコンバーターとUSARTの設定を先に済ませ、各ポートの入出力を設定します。 ポートとして使う bit だけでなく、A/Dコンバーター、USART、PWM、タイマー入力、外部割込みと言った用途の端子についても矛盾の無い入出力設定を行います。 (例 受信端子=入力 送信端子=出力)


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




温度制御定数と出力

 RRP1320-1-04 の温度制御定数は下図のように DE 疑似命令で設定します。 <PICデバイス=18F1320>

温度制御定数設定

最初の設定値、温度制御間隔は1~255の値を入力し、入力値 x 0.5秒が制御間隔になります。 上図の例では、10秒毎に制御出力を更新します。 制御温度の上限及び下限の境界付近では、測定温度が制御範囲の内外を行き来する為、頻繁に制御出力が変化します。 リレー出力などの場合は制御間隔を長めにして接点の動作頻度を落とす必要があります。

次が上限温度で、2桁BCD(06~95)で温度(単位 ℃)を入力します。 三番目が下限温度で同じく(05~94)で単位は℃です。 ただし、上限温度>下限温度に設定する必要があります。

上限温度および下限温度は起動時にテーブル参照(検索)を行い、2桁BCD(温度)から A/D 変換値 HEX を求めてデータ・メモリーに保存し、温度制御に活用しています。

制御間隔毎に測定値を比較し、上限温度と下限温度で仕切られた3つの温度範囲毎に独立した下図サブルーチンを CALL します。

温度制御出力

実際にポート出力を変化させて LED を点灯/消灯させているのは上図のプログラムです。 このサブルーチンを書き換えることでポート出力の極性を変更するなど自由に応用出来、必要かつ適切と判断される場合は、データ・メモリー内の上限温度/下限温度を変化させてヒステリシスを作ることも容易です。


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



RRP1320-0 test1 割込み・ピン機能設定

 前回に続き、 「RRP1320-0 ハードデバック」に紹介したLEDを点滅させるプログラム(プロジェクト)について説明します。 今回は割込み及びピン機能の設定についてです。 < PICデバイス=PIC18F1320 >

 コンフィグレーションビットの設定は以下をご覧下さい。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/config_out_test1.TXT

RRP1320-0 test1 構造」で紹介した test1.asm の26行目から CALL される、サブルーチンは下図の通りです。

下図は割り込み及びピン機能を設定しているアセンブラソース( intdef.asm )です。
まず最初にA/Dコンバーターの設定をしてから、出力ポートを設定しています。 リセット動作後にA/Dコンバーターに設定される為、ADCON1 でデジタルに指定して置かないと出力ポートに設定できないようです。

intdef_asm

続いて、24行目から TMER0 の設定です。 1秒間隔のイベント用ですが、キースイッチ入力の走査にも使う予定があるので100msec間隔で割り込みが発生するように設定してます。 8MHzの4周期分(0.5usec)と1/16プリスケーラーを使って100msecのカウント値(12500d)を求め、100msecで16bitタイマーカウンターがオーバーフローするように TMR0H , TMR0L の値( 0CF2Ch )を準備します。 tim0defh , tim0defl には割込みの都度 TMR0H , TMR0L の値を初期化するために同じ値( 0CF2Ch )をバックアップしています。

続いて TIMER0 を低位割り込みに設定した上で、TIMER0 の割り込みを許可しています。
これ以降、100msec間隔でTIMER0 による低位割込みが発生します。

以下は、参考のため symboldef1.asm のリストです。

symboldef1_asm

tmp0 , tmp1 はデバック等に使う為に予め定義していますが、今回は未使用です。


RRP1320-0 関連記事のインデックスはこちら → RRP1320-0 回路図


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


PIC18F1320の入出力ピン

 PICのプログラムは、PICデバイスに書き込んで周辺回路を動かしてなんぼのものです。 このブログでも小規模ながら実際に基板を製作し、周辺回路の動作を確かめてPICについて学びたいと思います。

最初に作る基板(RRP1320-0)はPICKit3と接続してPIC18F1320を動かすに必要な最小限の機能を持った物にします。 その後に幾つかの周辺回路基板を作って、RRP1320-0と接続すれば目に見える入出力結果を楽しめるようにしたいと考えています。

PIC18F1320の概要は以下の通りです。
 ピン数                           18pin
 プログラム・メモリー     4Kワード(8Kbyte)
 データ・メモリー             256byte
 EEPROMメモリー        256byte
 I/Oポート ポート           A,B
 ADC                              7入力
 USART                          1ch
 CCP                              1個

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

ピン配置は下図のようになっています。
1320pin

18ピンの内、以下のピンは自由に使えない(使い難い)ピンで、残り11ピンが使えます。
 1.電源ピン ( 5 , 14 )
 2.PICKit3と接続 ( 4 , 12 , 13 )
 3.クロック接続 ( 15 , 16 )


下表は、18F1320各ピンの機能概要で、左端の数字はピン番号を示します。

1RA0/AN0
 入出力ポート or ADC入力
2RA1/AN1/LVDIN
 入出力ポート or ADC入力 or LVD外部電圧設定
3RA4/T0CKI
 入出力ポート(OD) or TIMER0外部クロック入力
4MCLR~/Vpp/RA5
 MCLR~ or 入力専用ポート
5VSS/AVSS
 電源VSS
6RA2/AN2/Vref-
 入出力ポート or ADC入力 or Vref-
7RA3/AN3/Vref+
 入出力ポート or ADC入力 or Vref+
8RB0/AN4/INT0
 入出力ポート or ADC入力 or INT0入力
9RB1/AN5/TX/CK/INT1
 入出力ポート or ADC入力 or USART CK/TX
10RB4/AN6/RX/DT/KBI0
 入出力ポート(状態変化割込) or ADC入力 or USART RX/DT
11RB5/PGM/KBI1
 PGM or 入出力ポート(状態変化割込)
12RB6/PGC/T1OSO/T13CKI/P1C/KBI2
 PGC or 入出力ポート(状態変化割込) or タイマー入出力
13RB7/PGD/T1OSI/P1D/KBI3
 PGD or 入出力ポート(状態変化割込) or タイマー出力
14VDD/AVDD
 電源VDD
15OSC2/CLKO/RA6
 OSC2 or クロック出力 or 入出力ポート
16OSC1/CLKI/RA7
 OSC1 or クロック入力 or 入出力ポート
17RB2/P1B/INT2
 入出力ポート or INT2入力
18RB3/CCP1/P1A
 入出力ポート or CCP入出力

ピン名称が赤色のものはPICKit3を接続してデバックやプログラミングをする間、決められた負荷以外は接続できません。 ピン番号が青色のもの ( RB ) はプログラムで内部プルアップ抵抗の有無を設定出来るピンです。 ピン番号が緑色のRA4はオープンドレイン出力です。(知らずにロジックICを接続するとスゴ~ク悩みます。)

各ピン毎に機能が決められていて、なおかつ複数の機能を受け持っています。 今回は以上の説明にとどめます。


RRP1320-0 関連記事のインデックスはこちら → RRP1320-0 回路図


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



「楽々PIC」とは

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

DSC00043


私自身、PICは初めてに近いのですが、他のマイコンを使った経験があります。 そのお陰で比較的容易にPICを使うことが出来ています。 一方でPICについてお教えする程の知識はありません。 「教える」為には非常に広範囲の知識が必要だと思います。

「PICを学ぼうと書籍を買って読んだけど、マイコンを知っていることが前提のようで、初めての自分には理解出来なかった。」と言う話を聞いたことがあります。 その本を読んでいないので何とも言えませんが、初めての方ですからそれなりに解り易く書かれた書籍を選んだのだろうと思います。

ゼロから説明されているからこそ途中で挫折したのではないかと思います。 例えばパソコンを学ぶ時に自分でボードやHDDを組み付けて、OSをインストールし、アプリケーションをインストールしてからワープロの使い方を学ぶ人は居ないと思いますし、そんな書籍は存在しない(売れない)でしょう。 PICの書籍は沢山ありますし、とても親切に書かれていると思いますが、初めての人はゼロから説明を読むより出来上がった基板とプログラムをいじりながら取り組む方が良いと思います。 目的にもよりますし、異論の多いところとは思いますが、PIC( Peripheral Interface Controller )と言う小規模ながら底辺(=縁の下)を司るデバイスを原理的に学び楽しむためにはアセンブラは捨てがたい要素と思います。 割り込み処理を駆使したピリリと辛い楽しみ方を紹介できれば嬉しいと思います。

このブログは「教える」程の知識の無い私が書き進める都合上、「学習ツール」のように広く学べる基板を使うのではなくて、「楽しんで使える道具」を作りながら勉強することを狙います。 習うより慣れようと言うアプローチです。

ある程度PICを使える方は作る過程を順に読んで頂いても構いませんが、初めての方は「楽しんで使える道具」の完成を待って、それを真似て作り、このブログからソースをダウンロードして基板に書き込んで道具の動作を楽しんでください。 その後で、このブログで紹介するようにプログラムの一部を書き換えて動作の変化を確認し、さらに自分なりに書き換えて理解を深めて頂ければ良いと思います。 ゼロからではなくてエンドからゼロに向かって学ぶと言うイメージです。 楽して楽しくPICを学ぶことが出来ると思います。

知れば知るほど疑問が湧いて、最後にはポートや割り込みの設定、コンフィグレーションにも手を染めることになるはずです。 その頃にはご自身で何かを作りたくなっているはずだと思います。


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


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


アーカイブ
楽々PIC 宛てBlogMail


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

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

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ