電電高専生日記

8ピンPICで5つのLEDを点滅移動させる

2015/01/18 00:20


最近学校でマイコンを扱う実験がありました。
それで、そういや自分も8ピンPICのマイコン持ってたなと思いだして、少しだけ勉強して弄ってみることにしました。

前に勉強しようと思ったときは、アセンブラを用いた本を参考にしました。
しかしはっきり言ってアセンブラで書かれたプログラムを理解できる気がしなかったので、今回は、いくつかのWEBサイトを参考にしてC言語を用いて、5つのLEDを順番に点灯・消灯させる処理を行わせました。

使用機器・ソフト

  • 8ピンPIC(12F683)
  • PICkit3
  • MPLAB ver.8.80
  • Hi-TECH Cコンパイラ ver.9.83

実験内容

まず、MPLABを起動してPCとPICkit3と8ピンPICを接続。

プログラム書き込み中

ここで、以下のプログラムをMPLABのプロジェクトファイルに書き込みました。

#include <htc.h>
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON 
& BOREN_ON & MCLRE_OFF & CP_OFF & IESO_OFF & FCMEN_OFF);
#define _XTAL_FREQ 1000000

void main()
{
	OSCCON = 0x40;
	ANSEL = 0;
	CMCON0 = 0x07;
	TRISIO = 0x08;
	int i, dt=100;
	int gp[5]={1,0,0,0,0};
	int buf;

	while (1){
		buf=gp[0];
		for (i=0; i<4; i++){
			gp[i]=gp[i+1];
		}
		gp[4]=buf;
		GP0=gp[0];
		GP1=gp[1];
		GP2=gp[2];
		GP4=gp[3];
		GP5=gp[4];
		for (i=0; i<dt; i++)
			__delay_ms(1);
	}
}

GPIO端子GP0・GP1・GP2・GP4・GP5を使っています(GP3は入力専用のため使えず)。
各端子の出力レベルを格納した配列gpを用意しました。初期値は1つだけHレベルにしています。
whileループ中では、配列gpが1個ずつ値をずらしていきます。そしてこれを各GPIO端子に反映させることにより、1個ずつ点灯するLEDが変わります。

MPLABの編集画面

プログラムのビルド(Build)、そしてPICへの書き込み(Program)を行い、完了。
以下のように、しっかり動作しました。

配列gpの初期値を変化させることにより、2つずつや4つずつの点滅移動も可能です。
動画の最後の、速度を変化しながらの点滅移動では、変数dtをwhileループ中で変化させています。ディレイ変化量d_dtと最大・最小ディレイ量max_dt・min_dtという変数を用意し、ディレイ量dtをmax_dtとmin_dtの間でd_dtずつ変化させています。

感想

Raspberry Piをいじったあとだと、なんか正直しょぼく感じてしまうところもあります。
しかしこの小さい素子の中に、自分が書いたプログラムが確かに存在しているのはとても面白く感じました。また、入力端子も使えば、8ピンだけでも色々なことができそうに思います。

参考にさせていただいたサイト

  • このエントリーをはてなブックマークに追加

最新記事

コメント(0)





プロフィール

名前:elkosendiary

性別:男

生年:1995年


2011年4月 高専入学
2016年3月 高専卒業
2016年4月 大学編入学
2018年3月 大学卒業予定

にほんブログ村 大学生日記ブログ 理系大学生へ
にほんブログ村

カテゴリ
Adsense
月別アーカイブ
ブログ内検索

アクセス

昨日のPV数:
全期間PV数:

おすすめ記事

「高専大学編入ログ」を作成しました

自作ゲーム「Defend PortMoresby!」バージョン3

【改良版】 RaspberryPiで作ったカメラ付き戦車ラジコン