ホームページの最初のページにします!
お気に入りに登録します!
ただ今の日時:
v(^_^v)♪ありがとございました~♪(v^_^)v 戻りまーす!

ワンチップマイコン・PICでC言語を使った学習報告3

 勉強する機会がありましたので、第三弾としてアップします。何度も文献を読み直してはいるものの、少しやらないとすぐ忘れてしまうのは、もう年なのか?と少し嘆きながらも、じっくりとあきらめずに続けて行ける よう頑張りたいと、自分にエールを送る毎日です。なお今回も、アップした回路図プログラム間違いや無駄などがあるかもしれません。そのあたりは勉強中と言うことでご容赦願います。できればご指摘やアドバイスを頂ければ幸いです。 (メールなどで直接でもOKです)
 お決まりの条文ですが、ここに紹介するものは私個人が勝手に製作したもので、万一製作されて事故などの被害にあわれても当方は一切責任を持ちませんので、ご理解とご了解のうえで、ご参照並びにご利用ください。できれば勉強用 として利用して頂ければ幸いです。なにせ私もまったくの素人ですから!

1. 日付
2008年6月17日
2. テーマ
I2C通信の学習として、LCDを使った年月日付時計の製作
3. 使用したPICマイコン
PIC16F877-20/SP、トライステート社のPIC16F87X BOARDを使用
4. 電源電圧とシステムクロック
電源:DC5V、クロック:20MHz
5. 開発環境
ハードウェア:ICD2(Microchip)、ICD-U40(CCS)、ブレッドボード(鰹H月電子通商)
ソフトウェア:PCWHD Compiler Ver4.074(CCS) 、 MPLAB IDE Ver8.10(Microchip)
6. 回路図
ここにあります!
7. プログラム
ソースファイル一式はここにあります。ZIPで圧縮しています。
8. 参照した主な書籍とWebサイト
「C言語によるPICプログラミング入門」 後閑哲也 著者 葛Z術評論社 発行・・・文献1
 注意事項

 最初に申し上げるべきでしたが、これまでアップしたソースファイルの利用について注意点があります。「xxxxxxxx.C」のソースファイルの中で、インクルードファイルの記述部があります。(通常xxxxxxxx.cと同じ名までxxxxxxxx.hとなっています)アップしたファイルにはインクルードファイルの場所を記述していません。 CCS社のCでこのインクルードファイルの場所を指定しないでコンパイルをするとエラーになります。(特に新しいバージョンでは!)どのインクルードファイルも必ずフルパスを追加記述して下さい。複数ある場合も同じように、それぞれに必ずフルパスを追加記述して下さい。
 例. c:\PIC_Study\I2C_LCD\ と言うところにxxxxxxxx.cとxxxxxxxx.h がある場合・・・・・
      #include "
c:\PIC_Study\I2C_LCD\xxxxxxxx.h"
と追加記述して下さい。(アンダーライン部を追記します!)

 きっかけ

 トライステート社のこのボード、実は2002年には手入れていたもので、目的は「C言語の勉強」でした。しかし仕事に追われる毎日で手をかけることができず、 とうとうこのボードはお蔵入りになってしまいました。時計の製作を始めるきっかけは、「スイッチの処理」、「LCDの表示処理」、「I2Cの通信処理」などの学習が目的で、ちょうどこのボードの存在を思い出し、採用する事にしました。 I2Cの学習においては秋月電子通商で販売されていたRTCモジュールエプソントヨコム社のRTC-8564NBを使った変換基板をみつけ、 それを使うことに決めていたので、いい機会だと思っていました。・・・ところがいざプログラミングをする上で、いつものように先駆者の御仁サイトを探してみたのですが、PICを使ってC言語での製作例がかなり少なく、やっと見つけたのが上記のサイトでした。この場を借りて、お礼申し上げます。ありがとうございました。

 具体的には

←左の写真が全体です。トライステート社のこのボードは秋月電子通商鰍ナK-39と言う通販コードで通販コードで1セット4,300円で販売されています。12bit-8chのA/DコンバータRS232Cコンバーター発信器レギュレータユニバーサル部などを搭載している基板です。
 液晶は適当なものを選びました。回路図ではSC1602BSLB-S0-G_PDと言う型番になっていますが、 秋月電子で販売されているものであれば大半は使用可能です。写真のものは24文字2行と言うもので、昔に秋月電子で購入したものです。今は販売されていないみたいです。これだけ長いと、1行ですべて表示が可能ですね!
 電源はDC9V/1.3Aのもので、やはり秋月電子での購入品です。今回はユニバーサル部分に、押しボタンスイッチ4個と液晶接続用の14Pin コネクタコントラスト調整用の半固定VR(20kΩ)1個RTC-8564/NB を追加して搭載し、配線しました。


 おっと言い忘れていました。RTCのICをバックアップする電池も搭載しています。電池はCR2032のリチウムボタン電池で、ホルダーはこれまた秋月電子から購入しました。写真に1個、トグルスイッチがありますが、デバッグするときにOFFにし、単独動作時にはONにします。 これはMCRLピン(リセットピン)を単に抵抗(47kΩ)だけでプルアップするか(OFF時)、CとDを接続してリセット信号を作るか(ON時)の切り替えをしています。LEDは今回は使用していません。つけなくてもOKです。

↑液晶LCD表示部          ↑バックアップボタン電池          ↑ スイッチ操作部

 スイッチ部の説明
1) 赤ボタン(右上)
Enterスイッチで、Editスイッチを押して各種データの編集(変更)が終了した時、抜け出すためのスイッチ
2) 赤ボタン(右下)
Editスイッチで日付や時間を変えたい場合はこのボタンを押します。直後に年号に最小桁がブリンクします。その状態で以下のボタンを操作します。
3) 黄色ボタン(中央右)
Rightスイッチで、押すごとに、年→月→日→曜日→時→分→秒→年→月→と変わります。
4) 黄色スイッチ(中央左)
Leftスイッチで、押すごとに、秒→分→時→曜日→日→月→年→秒→分→と変わります。
5) 青ボタン(中央上)
変更したい箇所をブリンクさせてこのボタンを押すと、1回ごとにデータをIncremnetしていきます。はBCDで2999年まで変更できます(と言っても生きていませんが!)。は1月⇒12月と変化します。 は月によって30日または31日と変化します(真面目に作りましたが2月の閏年だけは未処理で29日まで可変できます(※注1)。曜日は月曜日(MON)から日曜日(SUN)まで変更可能。 は24時間制で0時から23時まで、は0〜59の可変が可能です。
6) 青ボタン(中央下)
5)のボタンの逆で、データがDecrementされる方に動きます。
 ちょっとだけ工夫したところ

 バックアップ電池がない場合は、初期化されます。初期データ2008年6月17日 TUS 12時0分0秒になります。RTCレジスター内のVLビットを真面目に監視しています。なぜこの日付になるのかは少し意味があります。
 また月データを変更するときは、2月を除き、月ごとにちゃんと30日か31日かを判断しています。

 手を抜いたところ

注1の説明ですが、4年に1度の閏年は4年を監視すれば分かることですが、設定するのには必要ないと判断したからです。表示されるデータはちゃんとしてくれるので問題ないのですが、問題になるのは 間違ったデータを設定した場合です。2月28日までしかない月に2月29日と設定すると、内部時計はおかしくなるそうです。(したことがありませんが???)

 もうちょっと欲しいところ

 RTC内にはアラーム機能があります。せっかくあるのだから使いたいところです。しかし、私はこのボードに乗っている12bit・8chのA/Dコンバータを使いたいと思っています。これを使って日付/時計と同時に「温度」、「湿度 」、「気圧」を表示させる予定です。

 苦労したこと/その他

 私にとってはわりと大がかりなプログラムになりました。ブリンクさせた時に、位置情報をどうするかや、0〜6のカウンタを使うことにより、どの情報を変更させるかなど、プログラムがC言語で良かったと感じました。また、曜日についても 0〜6のカウンターを用意し、変数箱を6個用意し、 リテラル情報で取得して表示させました。勘違いと言うのかはまってしまったのは、RTC情報はBCDで設定/読み出しさがされ、変更時の情報も無理やりBCDになるよう、乱暴なやり方で設定と表示をしています。どなたかスマートなプログラムをご教授願います!!
 またハード面では、秋月電子通商のRTCモジュールは便利なように、I2Cのバスプルアップ抵抗がJPのショートでアクティブにできるのですが、これをすると、バックアップ電池の消耗が激しく低下します。これに気付くのに時間がかかりました。あと注意する事はLCDです。 色々な種類のものがあるのですが、電源Pinの割り当てが違うものがあります。これをよく確認しないで接続するとLCDを壊します。私は1個壊してしまいました。(かなり古いものでもう手に入らないものなのであきらめも早かったです!!)

 総  評

 8年越しの製作です。ある意味思い入れが」あります。嬉しい反面まだまだ!と言う複雑な気持ちです。まずは、嬉しく思ってもいいのでは?前向きにものは考え、次なる野望に転換できるよう頑張りたいと思います。