2016-05-04 20:50 | カテゴリ:PIC応用回路
DD51ディーゼル機関車のプラモデル製作がようやく完成しました。
ここで、プラモデルはちょっとお休みして、電子工作に取り掛かりました。


実は、前回のロボット・フライデーを製作した際に、電飾として多数のLEDを点滅させる為にPICを使用してプログラミングをしました。
LEDの点滅はそれほど難しいプログラミングではありませんが、模型工作ごとに点滅の方法やタイミングを考えてプログラムをするのがめんどうだなあ、と感じていました。
LED電飾のパターンとしては、大きく分けると

* 単純点滅(同じ周期)
* 順次点滅(複数のLEDで流れるような点滅)
* ランダム点滅(異なった周期でのランダムな点滅)
* 常時点灯

などが考えられます。
常時点灯は、別として、それ以外の点滅方法を、比較的簡単な指定方法で点滅の制御が出来れば便利だと考え、汎用のLED点滅制御プログラムを考えてみました。

仕様としては

* PICのポート(A、B)最大合計13ポートの出力を制御できる。
* 単純点滅、順次点滅、ランダム点滅を簡単なパラメータの指定で行える。、
* 点滅の周期を長短指定できる。

として、プログラミングをしました。
使用した言語は、フリーライセンスのXC8(マイクロチップ社)です。
PICは、16F876になりました。

当初は、16F84Aでプログラミングを始めたのですが、途中で、使用する変数や配列が多くなって、コンパイラがエラーとなってしまい、急遽、PICを16F876に変更しました。


とりあえず動画をご覧ください。




右の3個のLEDは順次点滅に設定してあります。
光が流れるように点滅します。(ナイトライダー風)
次の2個と隣の2個の4個は、定期点滅です。(例えば翼端灯など)
点滅周期を変えて有ります。

残りのLEDはランダム点滅にしてあります。(計器のランプなど)

DSC02195.jpg

プログラムは、別途参照していただくとして、パラメータの指定方法を述べます。

const unsigned char parameter[13][3] = {//ここから
{1, 1, 3}, // ポートRA0用の設定
{2, 2, 3}, // ポートRA1用の設定。以下、RA2-RA4とRB0-RB7と続く
{3, 4, 3}, // RA2
{13, 8, 5}, // RA3
{13, 16, 5}, // RA4
{13, 1, 8}, // RB0
{13, 2, 8}, // RB1
{0, 4, 5}, // RB2
{0, 8, 5}, // RB3
{0, 16, 5}, // RB4
{0, 32, 5}, // RB5
{0, 64, 5}, // RB6
{0, 128, 5}, // RB7
}; // ここまで



点滅指定は、この配列でまとめて行います。

配列は、LEDを接続するポートの数あって、それぞれ、{x、y、z}三つのパラメータを指示するだけです。

xは、以下の様な意味を持ちます。

0=ランダムの点滅
1から12=順次点滅の順番
13=定期点滅

zは、点滅周期の長さで、今回のプログラムでは、1=100msecに指定しています。
ランダムで点滅する際は、この値が最大値となるように、周期が変わります。

yは、定数で、変更してはいけません。
初めの、1,2,4,8,16は、ポートAのポート0,1,2,3,4に対応します。
次の、1,2,4,8,16,32,64,128は、ポートBの0,1,2,3,4,5,6,7に対応します。

テキストファイルですので、ご自身でXC8のプロジェクトを新規で作成して、sourceファイルのフォルダーmain.cを新規作成した後で、このテキストファールの中身をコピペすればOKです。


ブレッドボードに回路を組んでみました。
LEDの数の都合で、PORTBは0-5にLEDが接続してあります。


XC8プログラムはここに,,,,,,

====================================================================
御注意

特殊文字(”<”や”>”)がブログ中で認識されない為、プログラムが正しく表示されないことが分かりました。
一旦、プログラムを削除して、改めてアップ方法を検討して、再掲させていただきます。

====================================================================

ここにプログラムをテキストファイルとして貼り付けました。
コピペして、お手持ちのXC8のメインのCファイルに貼り付けてください。

(一部セミコロンが欠落していました。再度修正しました)

==>>LED_mger2.txt





管理者のみに表示する