としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

PIC16F690を動かす。。。その11(I2C-LCDモジュール)

2013-03-15 05:15:31 | PIC16F690

おはようございます。

としぶぅ~です。

 

今日は少し冷えますね・・・風邪引かないように気つけないと・・・・

さて本日は。。。。

 

昨日、一度LCDに表示が出たけどまたでなくなった・・・・という状況をみて、Delayはちゃんと動いているのか?

外部クロックにしたし。。。。時間がずれている?

とか疑いがわいたのでとりあえず、Delayの関数を使って時間がちゃんと合うように調整しました。

main.cで

    //無限ループ
    while(1){
        clear_bit(PORTB,5);
    DelayMs(15);
        set_bit(PORTB,5);
    DelayMs(15);
        }

こんな感じで”DelayMs()”関数を仕込んでポートをオシロであたりました。

DelayUs()を使用した場合、50を入力すると、大体75uSくらいになります。。。。uSだとかなり誤差でます。。。

Msだとどうか・・・・

DelayMs(1)で1msを見込みますが・・・・1.5mSくらいになってしまう。。。。ずれが大きい!

で、Delay.c内を少しさわって調整!!

DelayMs(unsigned char cnt)
{
#if    XTAL_FREQ
    do {
        DelayUs(996);
    } while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ    
    unsigned char    i;
    do {
        i = 4;
        do {
            DelayUs(175);   ←ここを変更して調整!!250←175に
        } while(--i);
    } while(--cnt);
#endif
}

上記を修正しました。

10,15といれてみましたが、とりあえず10msと15msが出ているようです。

 

時間調整はとりあえずOKです。

 

さて。。。。いよいよ本題!

LCDをさわります。

 

何をさわったかというと、LCDのマニュアルをよんでいると。。。。!?

ん???

このやりかた?

今までよく動作していたな??

というところを発見!

イニシャライズの手順がプログラムと違う(^^;

早速変更。。。。。結構違っているので手間がかかりました。。。。

修正すると!

「でたっ!」

なんと・・・・初期化の手順が違っていた・・・・・でも今まで違ったまま表示がでていたのか(笑)

ま、これで現状のプログラムを基本プログラムにします。

いいですね。。。。I2C制御のLCDモジュールが完成です!!

ちょっと表示が遅いかな。。。。I2Cの関数をもう少し調整しなければ・・・・

 

ま、モジュール化完了!!

 

かな~り時間がかかってしまいましたが。。。。なんとかこぎつけました!

さて。。。次は。。。。ジャイロモジュールでもさわってみますかね

 

今日はこの辺で・・・・それではまた(^o^)

みなさま本日もよい一日を~