SSブログ

さてさて、ちゃんと動いてくれるんだろうか。 [ソフト]

ディスプレイは、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位ならタイミングがいいのかも。 などなど、疑問はあるものの、ここで悩んでもしょうがないので、 もう一つの方でやってみると、すんなり動いた。 なんだよーと思いつつも、一安心。 さっき悩んだせいで、少しわかった気もするし、前には進んでるからいいか。 もう少し、研究してみないと。 DSC_0011.JPG
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

いろいろ覚えることも多く、知りえた知識を貯めておこうと思います。先はまるで見えないですけどね。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。