TC4040BでLCD接続(解説)                            nobcha(c)2010,2011

 PIC試作で表示を出したいときに、表示文字数多い応用ならLCD表示ということになりますね。16文字1行でバックライト無し@300¥というお手軽なお値段で使えるのは魅力的です。

 LCDに文字を出すには4ビットか8ビットパラレルインターフェイスで制御信号はEN,RSと最低でも6本が必要です。9ピンのPICではIO出力は最大5本ですから無理ですね。でもでもちょいと簡単なカウンタとか、電圧計・温度計をPIC12F675など使いLCD表示で作りたいです。

 という希望を元に制御信号2 本でLCDとインターフェイスをとるというのがこの「TC4040BでLCD接続」というプロジェクトなのです。

 アイデアの元はEDN誌読者のアイデア欄からいただきました。(EDN JAPAN2010.6 P49)

 

1. TC4040BはCMOSの16ピンICで内容は12段リップルキャリーバイナリーカウンタです。次のようなブロックとなっています。データシート。

     

2. このバイナリーカウンターをシフトレジスタとして使おうというアイデアです。たとえばQ1の出力を1にしたければ、リセット後にCLKを1個出せばよいし、Q2を1にするなら、CLKを2個という具合です。PICはシフトレジスタ動作させるため、TC4040Bの出力に設定したい値をQn重みに従ってCLK数として積算してCLKから出力すればよいということになります。

 次にPICからどうやって出力を制御するかのプログラムを示します。該当部分を一部抜き出し。

ーーーーーーーーーーーーLCD.Cから一部抜き出しましたーーーーーーーーー

#define TC4040B_Q1 1      // 各出力Qの重みを定義する
#define TC4040B_Q2 2
#define TC4040B_Q3 4
#define TC4040B_Q4 8
#define TC4040B_Q5 16
#define TC4040B_Q6 32
#define TC4040B_Q7 64
#define TC4040B_Q8 128
#define TC4040B_Q9 256


#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0) )  // EN信号の立下りでLCD読み込み
#define TC4040B_RESET ( TC4040B_CLK=1, __delay_us(150), TC4040B_CLK=0, __delay_us(100) )

  // CLK端子は70μS時定数の積分回路を通じてRESET端子につながっているので、CLKを150μSの間1にするとカウンタはリセットする。リセットの後、積分コンデンサを放電


#define LCD_PULSE ( TC4040B_CLK=1, TC4040B_CLK =0, __delay_us(2) )
  //  CLK信号を作り出す


#define LCD_EN RB1 // RB1 for PIC16F88      // PIC16F88の場合はRB0とRB1を使う
#define TC4040B_CLK RB0 // RB0 for PIC16F88  // もちろん他のポートに割付可能です


/* nibble write */     // ここでは4ビットモードで接続する出力関数の例
void lcd_nib(unsigned char count, char rs_value){  // Q1〜Q4をデータ、Q5をRSに割り当て
TC4040B_RESET; // TC4040B reset         // まずはカウンタをリセット
if(rs_value){ count = count + TC4040B_Q5; } // If rs=1 set Q5 count // countにシフトデータ有

while(count>0){
LCD_PULSE; // Put data to TC4040B        // count内のシフトデータ吐き出し
count--;
}
LCD_STROBE(); // Put TC4040B output to SL1602  // カウンタにデータセットしEN立下げ

}

ーーーーーーーーーーーーーーーー以上引用終わりーーーーーーーーーーー

3.タイミングチャートは次のようになります。先のリスト中に書き入れましたが、カウンタにデータを設定し終ったら、LCDにデータを送り込むEN信号を出します。また、カウンタは使うたびにリセットせねばなりませんが、リセット線をけちるためにCLK線の先に積分回路を設け、CLKが70μS以上Hになるとリセットするようになっています。クロックは立下りで動作する、RESETはレベルで動作するという性質をうまく組み合わせていますね。

        

4.回路図例

 マーカーをかけたところがPIC16F88からTC4040B経由でSC1602を制御するところです。

回路図のSC1602液晶モジュールの回路図ピン番が間違っています。#7,8.9.10を#11,12,13,14に読み替えお願いします。

5.応用

 ここではLCDインターフェイスへの適用を説明しましたが、TC4040BインターフェイスはLEDのダイナミック駆動にも利用できます。そちらについては別の頁で説明します。

 

全体目次に戻る 

アイコンは「牛飼いとアイコンの部屋」からの提供。ありがとうございます。

inserted by FC2 system