TG-40 用液晶表示キット (Model Num. TG-40221012)
- ブルーバックライト・白文字液晶
- 消費電流 8mA (typ.)
- I2C 伝送なのでリード線4本で接続可能
キットの概要
本キットは、7MHz QRP CW トランシーバ・キット TG-40 に接続して周波数を表示する液晶表示器のキットです。
低消費電流でありながら、ブルーの美しいバックライトにより TG-40 の運用周波数を白文字できれいに表示します。
本体の TG-40 との接続は、I2C 伝送方式なので接続線はわずか4本だけです。
仕様:
通信方式 | :I2C (スレーブとして動作。スレーブアドレス 0xA0 ) |
電源電圧 | :5.0 V ± 0.3 V |
消費電流 | :typ. 8 mA (バックライト用電源含む ) |
技術解説
本キットは、PIC マイコン PIC16F1827 を使用し、内蔵の MSSP (Master Syncronous Serial Port)
モジュールで I2C スレーブとして動作します。
PIC16F1827
I2C の接続ケーブルは、長さ概ね1メートル以下であればデータの伝送が可能ですが、ケーブルからはデジタルノイズが発生しますので TG-40 に組み込む場合は、出来るだけ最短距離となるように、また受信部のフロントエンドを避けて配線します。
なお、受信部へのノイズの飛び込みを極力抑えるため、周波数を可変させたときだけ I2C ラインにデータが流れるようになっています。
液晶表示キットの接続線は、
出来るだけ最短距離で配線する
液晶表示器のコントラスト電圧 Vo は、PIC マイコン PIC16F1827 の #15pin クロックアウト (2MHz) を整流して CNT 端子に与えています。
PIC16F1827 #15pin CLKOUT
液晶表示器のコントラスト端子に印可する電圧 Vo をボリューム VR0A0 で調整し、液晶画面の文字の濃さを合わせます。
I2C 仕様の詳細
本キットの通信仕様は一般的なI2C プロトコルに準拠しています。
液晶表示器に対する初期化は、電源オン時に PIC マイコン PIC16F1827 が自動的に行いますので、I2C マスター側 (TG-40 )からは特に初期化コマンドを発行していません。
下図は、I2C マスター側からスレーブ側(液晶表示器)に送信するプロトコルです。
コマンド 0xC0 を送る場合とテキスト文字 "8" (アスキーコード 0x38) を送る場合を示しています。
マスター側からスタートコンディションSを発行し、続いてスレーブアドレス (0xA0) 、コントロールバイト、データバイトの順に送信して最後にストップコンディションPを発行して送信終了となります。
スタートコンディションは、SCL が High のときに SDA が Low になることによってスレーブ側に今からI2Cでデータを送ることを通知します。
ストップコンディションは、SCL が High のときに SDA が High になることによってスレーブ側がI2C通信の終了を検知します。
データは正論理で MSB から送信され、SCL の立上りでスレーブ側にラッチされます。
スレーブアドレス、コントロールバイト、データバイト ともに 8bit ですが、8bitづつの送信の終わりのたびにスレーブ側から ACK(Acknowledgement)
または NACK (Not acknowlegement)が返ってきますので、マスター側は ACK / NACK の分も含めて SCL を9クロックづつ発生させる必要があります。
ACK は負論理なので 0 で ACK、1で NACK です。
スレーブは、正常に 8bit が受信できれば、ACK を返し、なんらかの理由で正常に 8bit 受信できなければマスターへ NACK を返します。
コントロールバイトが 0x00 の場合、次に続くデータバイトはコマンドを表し、コントロールバイトが 0x80 の場合は、
次に続くデータバイトはデータを表しますので、このデータをアスキー文字データとして扱えば、液晶に文字を表示することができます。
本キットで使用しているコマンドは以下の通りです。
0x8n:文字の表示位置は1行目 (上の行) の左から n+1 番目
0xCn:文字の表示位置は2行目 (下の行) の左から n+1 番目
0x01:文字を全消去、カーソルは一番左上に戻る
例えば、1行目の2文字目に文字を表示させたい場合は、0x81、16文字目に文字を表示させたい場合は、0x8F を送ります。
2行目も同様に2文字目なら 0xC1、16文字目なら 0xCF となります。
例:2行目の2文字目に8 (アスキー文字データ 0x38) を表示させたい場合
マスター側から
S 0xA0 0x00 0xC1 P
と送ってから続いて
S 0xA0 0x80 0x38 P
と送ります。
この状態で次にコマンドを送らずに文字データのみ送ると8の右側に文字が追加されます。
例えば2行目の2文字目から89と表示させたい場合は、(9はアスキー文字データ 0x39)
S 0xA0 0x00 0xC1 P S 0xA0 0x80 0x38 P S 0xA0 0x80 0x39 P
なお、マスター側のプログラムでこの「S 0xA0 0x80 文字データ P」の部分を1文字送信関数としてプログラムし、この関数を標準関数 putch
として定義しておけば printf("89"); とするだけで液晶に表示出来るようになります。
実際の I2C 波形を示します。
最初の図は、マスター側から液晶表示キットのスレーブアドレス 0xA0 に対してコマンド 0xC0 を送ったときの波形です。
データ (SDA High で 1, Low で 0 ) は MSB から送信され、スレーブはクロックの立上りでデータをラッチします。
最初、スタートコンディション S が発行され、続いてアドレス0xA0 (10100000)、次のデータがコマンドであることを示す 0x00、そしてコマンド
0xC0 (11000000) が送られてストップコンディション P で終わっています。
スレーブである液晶表示キットは正常にコマンドを受取り、マスターに対して ACK 応答 (9クロック目の SDA が Low) しています。
次の図は、マスターが液晶表示キットへスレーブアドレス 0xB0 を送ってからコマンド 0xC0 を送ったときの波形です。
この場合は、アドレスが不一致となり液晶表示キットは、データを受信でないためマスターへ NACK (9クロック目の SDA が High) 返送しています。