2015-06-04 18:18 | カテゴリ:PIC応用回路
PICC言語の勉強が続いています。
C言語で、LCD表示器などとI2C通信する事に関心がある方は、ご覧ください。



先日から、独学でPICのXC8というC言語の勉強をしています。
たまたま書店で見つけたC言語の入門書が、分かりやすく記述されていて、これなら独学できそうだと、一念発起しました。

WEBで先輩諸氏のプログラムを拝見し、何がどうなっているのか?を少しずつ理解してきました。
先日は、I2Cインターフェスでデータ送受信を行い、小型液晶表示器に文字を表示するもののプログラミングを学んでいました。
ご存知のように、I2C規格は、シリアルバス通信で、イモズルに接続された複数の機器とアドレスを指定して通信を行うものです。
PICの中型機種以上には、このI2C通信の機能が内蔵されたものもあります。
PIC16F876もその一つで、専用のピンとレジスターが備わっていますので、難しいシリアル信号のタイミング処理をプログラムしなくてすみます。

XC8言語では、専用の関数も用意されていますが、私が使用しているPIC16F876にはそれが適用できないようで、I2C送受信は自分で通信のための関数を製作しなければなりません。

(I2C通信規格の概要)

難しいことは専門書にお任せしますが、初心者が初心者なりに理解した言葉でこのLCD表示機器との通信手順を説明します。

1)
PIC側がマスター、LCDなどの表示器や、センサー側をスレーブとします。
2)
マスター側から、通信の開始を宣言(STARTコンディションの発信)して、通信を行いたいスレーブ機器のアドレスを送信します。
  基本、通信の単位は1バイトです。
3)
該当するスレーブ機器からは、呼び出しに対して「了解」と返事を返します。
4)
その後、マスターから、ファンクションコードが送られます。これは、このファンクションコードの次に送られる1バイトのデータが何を表すかの説明です。
5)
その説明ですが、大きく分けて、「機器(液晶表示器)の制御をするためのコマンド」なのか、「表示するデータ」なのかということと、それぞれのデータが、単発のバイトなのか、それ以降も同じ種類のデータが連続して送信されるのか、を表す1バイトの情報です。
6)
そして、これらの手順に従って、コマンドやデータを送信した後、最後に、STOPコンディションを発信し、一連のデータ通信を終了します。

言葉で書くとこんな感じですが、実際は、


0、電源投入後に、LCDのイニシャライズをします。(必要な手順がマニュアルにあります)
1、START
2、スレーブアドレス送信
3、次は1バイトの制御コマンド、というファンクションコードの送信
4、CLDをクリアする、という制御コマンド送信
5、次は表示するデータ(ABCDなどの文字)を連続で送信すると言うファンクションコードの送信
6、文字データ「P」の送信(例)-->LCDにPが表示される
7、文字データ「I」の送信   -->    I
8、文字データ「C」の送信   -->    C
9、通信終了信号送信

という感じで、通信が進みます。


したがって、XC8でこれらを行うために、必要な関数を組んでいけばよいわけです。
たとえば、

上記の、イニシャライズや、各種のコマンド送信、文字データの送信などです。
とりあえず、苦労して、コマンドのイニシャライズ、データ表示をするカーソルの制御、任意の文字列を表示、などの関数を製作し、動作の確認が出来ました。

Image2.jpg

Image3.jpg


やれやれです。
プログラムは、ある程度動作確認し、切りの良いところでUPしていきたいと思います。

そうこうしているうちに、注文していた、アイオーデータ製のLAN接続型のRAID1ミラー対応の2TBx2ハードディスクシステムが届きました。
先日、昇天してしまった、LAN接続のDISKの後継機種です。
このRAIDミラー対応のHDDをセットして、バックアップしていたデータをリカバリーしなければなりません。
その様子は、またご紹介します。

と言っていたら、歯周病のせいで、ぐらぐらだった犬歯が持たなくなって、先ほど歯科医で抜いてきました。

痛ーーー
もう、至るところ、ぼろぼろです。







管理者のみに表示する