FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

02 | 2009/03 | 04
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


LED 点滅


LEDの使い方がわかったところで、
PIC本体の方に話を戻します。

前回、LEDを点灯させることが出来たので、今度は点滅させて見ます。

まず先にプログラムです



#include <pic.h>
#include "delay.h"

__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);


main(){
  TRISB = 0x00;
  while(1){
    PORTB = 0xff;
    DelayMs(250);
    DelayMs(250);
    PORTB = 0x00;
    DelayMs(250);
    DelayMs(250);

  }
}


前回のLED点灯から増えたところが赤くなってます。
まず始めの #include "delay.h" ですが、とりあえずおいときます。

次の__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT); ←注:CONFIGの前はアンダーバー2つです
これはコンフィグレーションと呼ばれるもので、PICの基本的な使用方法を設定します。
「基本的な方針なのに なぜ前回記述しなかった!!」

なぜかというと、PICにプログラムを書き込む時に使ったPICプログラマーに秘密があります。
pic3.jpg
この画面で使用するクロックを HSに変更するという作業をやりましたが、これは上のプログラムの一行を手動で設定していたのです。 手動でやるとプログラムを呼び出すたびにいちいち設定しなくてはなりません。とても面倒です。
プログラム中に一言書いておけば、それで一発です。楽チンです。

16F84Aのコンフィグレーションは次のようになってます。
機能状態記号定数意味
クロック発振モードLPモードLP200kHz以下の外部振動子
XTモードXT4MHz以下の外部振動子
HSモードHS4MHz以上の外部振動子
RCIOモードRCIO外付け抵抗&コンデンサーによる発振
ウォッチドッグタイマ使う(デフォルト)WDTEN
使わないWDTDIS
パワーアップタイマ使わない(デフォルト)PWRTDIS電源投入後のリセット期間の有無
使うPWRTEN
プログラムメモリのコードプロテクトしない(デフォルト)UNPROTECT
するPROTECT

これはあくまで16F84Aのコンフィグレーションです。他のシリーズではもっと多くの項目があるものもあります。

今回は20MHzの外部振動子を使用しているので 発振モードはHS
ウォッチドッグタイマ、パワーアップタイマ、コードプロテクトは使用しません。(ってか、このモードについてまだ詳しくわかってないです。)

さて、続いて、出てくるのが DelayMs(250);
これは何をしているかというと、ただの時間稼ぎです。
「現状を維持しつつ、一定時間待機せよ」ということです。
括弧の中に入れる数字によって待機の時間を設定します。
この場合は250ms(ミリ秒)待機です。 1s = 1000msです。

DelayMs(250);が二個続けてあるので、500ms待機ということです。
「じゃあ、はじめからDelayMs(500); でいいじゃん!!」
と思ったのですが、DelayMs 関数が受け取れるのは0~255の整数のみなので、しょうがないです。

PORTB = 0x00;
は、もうご存知の通り、ポートBのすべてのピンを0vにせよ ってことです。

通して考えると、ポートBを5V出力にして500ms待機
その後、ポートBを0V出力にして500ms待機 となります。
よって、LEDが0.5秒ごとに消えたりついたりします。

で、最初にもどって #include"delay.h" ですが。
これは DelayMs()関数を使えるようにするための記述です。
この宣言をすることによってDelayMs()関数を呼び出せるようにします。
ただ、これを宣言しただけでは関数を使えません。

なにもいじらずにこのPIC C Liteをインストールしたとすれば 恐らく
C:\Program Files\HI-TECH Software \PICC\LITE\9.60\Samples\delay の中にdelay.c delay.hという二つのファイルがあるはずです。ディレクトリの細かいところはバージョンなどによって左右されてしまいますが、大体同じようなところにあるはずです。

その二つのファイルをコピーして、プロジェクトがあるフォルダに貼り付けます。
次にそのファイルをプロジェクトに関連付けるために、下の図のSource Filesを右クリックしてAdd fileを選び、delay.cを加えます。
pic4.jpg
さらに、Header Filesで同様にdelay.hを加えます。

これで準備完了!といいたいのですが、あと一個だけやることがあります。
DelayMs()を使えば一定時間待機することが出来ることはわかりました。
では、どうやってその一定というのを定めているのでしょうか。それはもちろん発振回路です。
今回は20MHzの発振子を使用していますので20MHzのクロックを生成しています。
周波数が20MHzということは波の周期は1/20000000秒ということになります。
波が一つ発生するごとに1/20000000 = 0.05μS経過します。
つまり、一秒待機したければ、波が2千万回おきるのを待てばいいのです。

ここで重要なのは今回は20MHzの発振子を使ったということです。これはたまたま僕が20MHzのものを買ってきただけであって、10MHzでもよかったわけです。
周波数が変わってしまうと一定時間を待つために数えなければならない波の回数が当然変わってきます。 だから、PICに今回は20MHzを使っていることを知らせねばなりません。

どこをいじればいいかというと、さっき追加したdelay.hの中です。
先ほどのツリーのHeader Files → delay.hをダブルクリックすると MPLAB内にdelay.hの中身が出てきます。
pic5.jpg
そこに、#define XAL_FREQ 4MHzと書かれたところがあります。
このままだと4MHzの発振子を使ったことになってしまうので。ここを20MHzに書き換えます。

あとは各ファイルを上書き保存して、ビルドをおせば 完成です。
早速PICの中にHEXファイルを流し込んでみましょう。

0.5秒ごとについたり消えたりしてます。



スポンサーサイト


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。