PIC ことはじめ ~ LED フラッシャー

Posted by
ぴろり
Posted at
2011/10/28 21:19
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
電子工作 カテゴリ

 前回に引き続き、今回は PIC 業界の "Hello, world" 的な存在、LED フラッシャーを作ってみます。多分、順番としてはこちらが先だと思うんですが。回路は前回のものをそのまま流用します。LED の数が少ないので、綺麗に流れて見えませんが、原理を理解するには十分と思うので。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

概要

  • PIC12F675 を用いて LED フラッシャーを実装する。
  • カウンターの値に応じて、PIC の出力(GP0, GP1, GP4, GP5)に接続された 4 つの LED の点灯消灯を制御する。

ソースコード

#include <htc.h>

__CONFIG (FOSC_INTRCIO  // 内蔵オシレータ
        & WDTE_OFF      // WDT 無効
        & PWRTE_OFF     // PWRT 無効
        & MCLRE_OFF     // MCLR 使用しない
        & BOREN_OFF     // BOD 無効
        & CP_OFF        // Program Memory code protection 無効
        & CPD_OFF       // Data memory code protection 無効
);

void main ()
{
    // ポートの入出力方向を設定 @see Section 3.0 GPIO PORT
    // GP0    OUT
    // GP1    OUT
    // GP4    OUT
    // GP5    OUT
    TRISIO = 0b00001100;

    // LED の点灯パターンを定義
    unsigned int pattern [] = {
        0b00000001,
        0b00000010,
        0b00010000,
        0b00100000,
        0b00010000,
        0b00000010
    };

    unsigned int counter = 0;
    while (1)
    {
        // カウンタを進める
        counter++;
        // カウンタをパターン定義数でクリップ/ループ
        counter %= (sizeof(pattern) / sizeof(pattern[0]));
        // パターンを出力
        GPIO = pattern[counter];
        // ウェイト
        #define _XTAL_FREQ 4000000/*Hz*/
        __delay_ms (200/*mSec*/);
    }
}

 前回作った回路を流用するので、LED の数は 4 つですが、PIC12F675 を用いる場合、最大で 5 つまでの LED を駆動することができます*1。また、PIC16F84 などを用いれば、さらに多数の LED を駆動することができますが、考え方は全く同じです。
 上記のソース中で、pattern 変数に点灯する LED のパターンが登録されているので、これを変更することで様々な点灯パターンを実現できます。また、__delay_ms 関数は、指定された時間、処理を中断するマクロ*2で、PIC の動作周波数(_XTAL_FREQ)を元にウェイトを実現しています。

回路図

回路図

 回路は前回使ったものをそのまま流用し、スイッチ部分は利用せずに、LED の部分だけを使います。ハードウェアの実装はそのままで、機能を変更できるというのも PIC の便利なところですね。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

  1. *1 GP3 ポートは入力専用のため
  2. *2 実際の処理は、指定された命令サイクルの間、NOP 命令を実行する _delay 関数に置き換えられる

この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:PIC ことはじめ ~ 簡単な I/O

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。