さてさて、ちゃんと動いてくれるんだろうか。 [ソフト]
ディスプレイは、DISPLAYTRONICのACM1602NI-FLW-FBW-M01。
PICは初めてで、しかもインターフェースがI2Cというさらに未知のもので、
不安材料がいっぱい。ハードの方は、繋ぐ箇所も少ないのでそれほどだけど、問題はソフト。
とりあえず、テスト表示のプログラムを作らないといけないけど、ひな形は3つ。
秋月のHPにある取説に2つ。「はじめてのPIC」に1つ。
ただ、取説の方は、PICの機種が違い、「はじめてのPIC」の方は、PICは同じだけどディスプレイが違う。
取説のサンプルプログラムは、8ビットのPIC16F877A用が2つ。もう1つあるが、これはAVR用?
2つのうち、1つは直接ピンを操作しているもので、もう一つはMSSPモードを使ってるもの。
とりあえず直接ピンを操作しているものから試してみることに。
MPLAB IDEでプロジェクト作って、プログラムをコピー。
このままじゃコンパイラが通らないので、
#include
#include
//**********************************************************************************//
#define uchar unsigned char
//**********************************************************************************//
#define sda RC4
#define sclk RC3
//**********************************************************************************//
__CONFIG(HS & WDTDIS & PWRTDIS & BORDIS & LVPDIS & DUNPROT & UNPROTECT);
//**********************************************************************************//
となっている頭の部分を
//**********************************************************************************//
#include
#include
//**********************************************************************************//
#define uchar unsigned char
//**********************************************************************************//
#define led PORTBbits.RB5
#define led2 PORTBbits.RB7
#define sda PORTBbits.RB4
#define sclk PORTBbits.RB6
#define _XTAL_FREQ 8000000
//**********************************************************************************//
#pragma config PLLEN = OFF , FOSC = IRC , PWRTEN = ON , WDTEN = OFF
#pragma config MCLRE = OFF , LVP = OFF
//**********************************************************************************//
にして、コンパイルはOK。
プログラムを書き込んで実行してみる。????。
ディスプレイには、■×16が2行。なんにもしてないってこと?ムム。
インターバルのタイミングを変えてみたりしたけど、動かない。
なんだか怪しい感じだな。たとえば、通信スタートの部分の
void start(void)
{
sclk=1;
sda=1;
sda=0;
sclk=0;
}
は、データをクロックより先にダウンさせるといことで、論理的には合ってるけど、
こんなタイミングでいいんだろうか。クロックは8MHzなので、1命令が4クロックだと0.5μs。
こんなの受け手が理解できてるんだろうか。
取説を熟読するとわかってきたのは、I2Cはデータとクロックのシリアル通信。
クロックが、オンになった時のデータの状態を1bitとしてやり取りしている。
だから「1」を送るなら、両方OFFからデータON、クロックON、クロックOFF、データOFFの順番。
クロックがオンの最中にデータは変化しない。
ただ、スタート、ストップの時は、これを変化させることでそれぞれの意味を伝えている。
つまり、クロックONの最中にデータをOFFするとスタート、ONするとストップになる。
取説のタイミングチャートには、このディスプレイのスルーレートは100KHz=1サイクル10μs。
スタート、ストップコンディションのホールド時間は、最低2.4μsと書いてあるし、
クロックが1MHZ位ならタイミングがいいのかも。
などなど、疑問はあるものの、ここで悩んでもしょうがないので、
もう一つの方でやってみると、すんなり動いた。
なんだよーと思いつつも、一安心。
さっき悩んだせいで、少しわかった気もするし、前には進んでるからいいか。
もう少し、研究してみないと。
PICは初めてで、しかもインターフェースがI2Cというさらに未知のもので、
不安材料がいっぱい。ハードの方は、繋ぐ箇所も少ないのでそれほどだけど、問題はソフト。
とりあえず、テスト表示のプログラムを作らないといけないけど、ひな形は3つ。
秋月のHPにある取説に2つ。「はじめてのPIC」に1つ。
ただ、取説の方は、PICの機種が違い、「はじめてのPIC」の方は、PICは同じだけどディスプレイが違う。
取説のサンプルプログラムは、8ビットのPIC16F877A用が2つ。もう1つあるが、これはAVR用?
2つのうち、1つは直接ピンを操作しているもので、もう一つはMSSPモードを使ってるもの。
とりあえず直接ピンを操作しているものから試してみることに。
MPLAB IDEでプロジェクト作って、プログラムをコピー。
このままじゃコンパイラが通らないので、
#include
コメント 0