以前に購入していた STM32VL-Discovery にLCDキャラクタ・ディスプレイ・モジュールTC1602E-06T(SC1602互換仕様)を接続してみました。
STM32VL-Discoveryには STM32F100RBT6 (Flash 128KBytes, RAM 8KBytes)が搭載されています。ST-Link(V1)もついていますので手軽に遊べます。
周辺モジュールもさほどついていませんので単体で遊ぶにはちょっと寂しいですが、フリーI/Oがありますので、市販のLCDモジュールTC1602E-06T(SC1602互換仕様)を接続してみました。
TC1602E-06T(SC1602互換仕様)の仕様をよく知らずに購入して配線してしまいましたので、4bitモードがあるとは知らず8bitデータ幅で接続してしまいました。
また、このモジュールは5V仕様でした…(これは説明書に書かれていましたので、私の見落としです。)
入力のスレッショルド電圧は2.2Vですので、とりあえず3.3V駆動のSTM32でも試しに動作させることはできます。ただし、READ時とBUSYの時はLCDモジュール側から5Vが出力されます。今回はWRITEだけでREADはしないことにします。
インターネットで調べると、(1) LCDモジュールのロジックは3.3Vで動作する。(2) コントラスト調整を負電圧にすることによりLCDも表示できる。とありましたので、試してみました。
バックライト電源はUSB +5Vを使用しました。
コントラスト用の負電源は、チャージポンプにより生成します。
チャージポンプの駆動は、STM32のGPIOをトグルさせて使いました。
STM32VL-DiscoveryのサンプルコードではSysTickが1msに設定されていますので、お手軽にこれを使うことにしました。(PWMに設定して速いクロックを出力しても良いと思います。)
stm32f10x_it.c の SysTick_Handler(void)が1ms毎にCallされますので、チャージポンプ用の端子反転stm32vlDiscoveryNVcc()を用意しCallすることにしました。
1 2 3 |
void SysTick_Handler(void) { TimingDelay_Decrement(); stm32vlDiscoveryNVcc();<code></code> } |
チャージポンプは写真の右下の部分です。ダイオード 2本、コンデンサ 2個の簡単なもので、コンデンサの容量は1μFです。Trでドライブした方がいいですね。
さて、肝心の TC1602E-06T(SC1602互換仕様) ですが、説明書が簡単すぎる&誤植が多くて悩みました…全然動かないんだもんな。どこからかのコピーなのかタイミングチャートは読めないし(まぁ、表をみればわかりますが)、文字コード表もアドレス読めないし。(ASCIIだからいいですけど…)初期化フローのサンプルぐらいないと初めての人は使えないのでは無いでしょうかね?
トランジスタ技術 2004年2月号 「LCDキャラクタ・ディスプレイ・モジュールの使い方」に詳しく解説されていました。(古いトラ技を捨てずにもってて良かった!)
後から調べたところ秋月電子にオリジナルのSC1602Bのデータシートがありますので、参考にするとよいでしょう。また、これらのLCDモジュールのコントローラーにはHD44780かその互換品が使われているようですので、オリジナルのHD44780のデータシートも参考にすると良いと思います。
ちなみに、写真中央にあるLEDと抵抗が私のロジアナです(笑)。
プログラミングは、Eclipse + devkitARM + ST-Linkを使ってMac OS X Snow Leopard上で行いました。開発環境の説明はまた今度…