楽々PIC

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

データ

フルカラーLEDの動画

 RRP1320-3-01-1 の調光パターンの中から3つを紹介します。 現物を見る方が広範囲の光に順応できるせいか、より良く見えるようです。 花火を狙ったパターンとイタリアンカラー、桜をイメージした発光パターン(のつもり)です。

DSC00219


本が読める明かりの中で撮影した動画です。
調光パターンは撮影しながら赤外線リモコンで切り替えています。




4個のLEDを異なる色に発光させても、拡散用の円柱(緩衝材用発泡ポリエチレンシート)に色の分布を作り出す効果が小さいようです。 初めの頃は白、赤、緑、青と言った具合に4灯の合計が白色になるパターンを作っていましたが、合計で白の配色が連続するとインパクトが小さいように思います。

LEDの配置や拡散用の円柱を別の形に変えるなど工夫が必要そうです。

一方で、PWMによるLEDの調光制御プログラムを使って、データテーブルに刻々と変る(変える)光のパターンを書き連ねる作業も立派なプログラミングだと感じます。 メモリーやポート、タイマーと言った手足を操るプログラミングも重要ですが、RRP1320-3 を魅力的に見せるのはデータテーブル次第と言えそうです。

炊飯器はプログラマーによるプログラムも重要ですが、毎日何度もご飯を炊いて試食してデータを組みかえる、絶え間ない努力でソフトウェアを作ると聞いたことを思い出します。


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



LCDに自動転送2

 「LCDに自動転送」の続きです。 今回は TIMER2 の割り込みから CALL されて LCD にデータやコマンドを送信するプログラムについて説明します。 < PICデバイス=PIC18F1320 > LCDはSUNLIKE社製SC2004Cです。


LCD転送


上図のTIMER2低位割り込み処理から CALL されて LCDに接続されている4本のデータ線( DB4=RA0~DB7=RA3 )と、2本の制御線( E=RA6 , RS=RA7 )を動かして LCD にコマンドやデータを送ります。
このプログラムを使うことで LCD のデータ線や制御線の使い方を意識しないで任意の表示が可能になりますから、LCDについての説明は他のWebページを参考にして下さい。

下図がそのアセンブラ・ソースです。 PIC18F1320 のデータ・メモリーは256byteしかありませんから、全てバンク0にあります。 このプログラムが使うデータ・メモリーはバンク0の中でもアクセスバンク時にSFRとアドレスが重複する領域に設定しています。 ここで使うデータ・メモリーアクセス時には BANKED と記述することに注意が必要です。( MOVFF を除く )

lcd_int


上図のプログラムが、下図のサブルーチンをコールします。


lcd_subsub

上図のサブルーチン( lcdputc , lcdputd )は、TIMER2割り込みを許可する前に、メイン処理でLCDを初期化するプログラムからも CALL されます。

LCD関連記事のインデックスはこちらです。 → LCDに自動転送


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


間接アドレッシング

 データ・メモリー用の間接アドレス方式について説明します。 <PICデバイス=18F1320> 一定のメモリー領域を0クリアしたり、一まとめのデータを他の領域に転送する(ブロック転送)などに必須の方法だと思います。

PICでは間接アドレッシング専用の SFR を使います。 アドレス指定の際に、専用のニーモニック( LFSR )を使う以外は既に説明したデータ・メモリーの読み書きでアクセスします。 独立した間接アドレスを同時に3つまで利用出来ます。

最初に間接アドレスを指定します。

          LFSR          f , k         ; f 番目の間接アドレスを k に指定します。 f = 0 , 1 , 2

その後、以下のSFRを読み書きすることで、間接アドレスのメモリーを読み/書きします。
いずれも n = 0 , 1 , 2 で、LFSRで指定した f と同じものを使います。

          INDFn              ; 読み/書きの後で間接アドレスに変化なし
          POSTDECn    ; 読み/書きの後で間接アドレスをデクリメント(-1)
          POSTINCn      ; 読み/書きの後で間接アドレスをインクリメント(+1)
          PREINCn        ; 間接アドレスをインクリメント(+1)してから読み/書きの
          PLUSWn         ; 間接アドレス+Wを読み/書きし間接アドレス変化なし


簡単に試してみましょう。 今回は変更箇所が多いので、main2.asm としてアップしています。 以下からダウンロードしてご利用下さい。

 main2.asm
 http://jyosou-robot.livedoor.biz/pic/pic_01/main2.asm


ダウンロードしたファイルをプロジェクトフォルダーに保存し、下図の要領で main.asm をリムーブします。

remove


その後、下図の要領で main2.asm をプロジェクトのソースファイルに加えてビルドして下さい。

add_files

下図は、main2.asm の一部です。 ラベル定義の部分はダウンロードしたファイルをご覧下さい。
Block3

コメントをご覧になれば解るのではないかと思います。 データ・メモリーの0番地の値が0なら何もしません。(29,30行目)
010H番地~01FH番地に連番(00H~0FH)を書き込み、020H番地~02FH番地を0クリアします。(32~42行目)
010H番地から始まるデータを、0番地に書かれた数だけ、02FH番地から逆順に転送します。
その後は無限ループです。

動作の確認は File Registers ウィンドウを使います。 [View]→[File Registers]を選択して下さい。

File_Registers

下図は、新しく表示された File Registers ウィンドウまたはお馴染みの Watch ウィンドウの 0番地の値を08Hに書き換えた状態です。

BLOCK1

この後で、Run & Halt すると、下図のように変化します。

BLOCK2

0番地の値を変えて試す場合は、Reset をお忘れなく!
ソースを変更して試す場合は、ビルドをお忘れなく!


一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。


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





PICのメモリー

 このブログでは、PICを動かすプログラムを作成するに必要最小限の説明を行いたいと考えています。 その立場でPIC18Fのメモリーを説明します。 これまでの記事にもデータ・メモリー、プログラム・メモリーと言った言葉を使ってきましたが、少しまとめてみます。 太い線で囲まれたメモリーはPICに何らかの動作をさせようとすると必ず扱うメモリーです。 EEPROMメモリーは必要に応じて使います。 灰色の文字で示したメモリーはプログラムの動作に必須ですが、極々特殊な例を除けばプログラムで書き換えることはありあません。(言葉だけ覚えておけば良いと思います。)

memory

<<< プログラム・メモリー >>>
プログラム・メモリーはMPLAB(等)で作成したプログラムを書いて使います。 PICは電源リセット直後に0番地から命令を読み出して実行します。 プログラム・メモリーに書かれた情報は、PICの電源が切れても保存され、次に電源が入るとPICは再び0番地から命令を読み出して実行します。

PICはプログラム・メモリーに書かれた命令を次々と実行するだけでなく、ここに書かれたデータテーブルを読み出して活用したり、新たに情報を書き換えることが出来ます。 プログラム・メモリーは10万回の書き換えに耐えるようです。(有限だけど、ほぼ無限です!)

<<< データ・メモリー >>>
PICに何らかの処理をさせようとすれば必須のメモリーです。 正式には File Registers と呼ぶようですが、このブログではデータ・メモリーと書きます。 PICの電源が切れるとデータ・メモリー内の情報は失われます。 プログラムが自由に使うメモリーで、プログラムの目的を達成する為に、その多くの部分がデータ・メモリーにアクセスする命令に成るのが普通です。

データ・メモリーは幾つかのバンクで仕切られていますが、最も良く使うのがアクセスバンクです。 このブログでは 「データ・メモリー≒アクセスバンク」 と言う扱いです。 プログラムで扱う情報が多いケースでは他のバンクを使うことも考えます。

アクセスバンクの中に、SFR ( Special Function Register ) と言う特殊な役割を持ったメモリー群があります。 SFRはPICの各端子を電気的に入出力動作させる為のソフトウェアとハードウェアのインタフェースと言った役割のものが多く、用途毎に指定されたSFRにアクセスします。 PICではテーブル参照(間接アドレッシング)や掛け算もSFRを使って実現します。

<<< EEPROMメモリー >>>
PICの電源が切れても情報を保存するデータ用のメモリーです。 累積動作回数を記録すると言った用途で、必要に応じて使います。

<<< スタックメモリー >>>
サブルーチンコールや割り込み時に戻り番地を記録する為に使われるメモリーで、特殊な使い方を除きプログラムで値を読み書きすることはありません。 注意したいのはその容量ですが、31段の戻り番地を記録出来るので普通は心配いりません。 名前だけ知っていれば困らないと思います。

<<< プログラムカウンター >>>
プログラム・メモリーの中で、現在どのアドレスを実行しているかを記録しているメモリーです。 名前だけ知っていれば良いと思います。


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



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


アーカイブ
楽々PIC 宛てBlogMail


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

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

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ