● 実験テーマ20
「PIC24Fによる、I2C液晶モジュールの表示実験」
■ 2012.09.26
・以前から、使ってみたい小型の、I2C液晶表示器があった。
それは、Strawberry
Linux社の、メーカー品番「SB1602B」の、
低電圧I2Cキャラクタ液晶モジュール(16x2行)である。
I2C制御なので、2本の制御線と、+3.3V電源だけで動作できるし、サイズが小型で、かわいらしい。
これを、前回製作した、VS1053b_MIDIプレーヤの表示器として使ってみたいと思っている。
まずは、その前段階として、自作の、PIC24Fトレーニング基板に、テストプログラムを組込み、
表示実験を行ってみようと思う。
■ 2012.10.02
・実験環境の構築
※ モジュールのピンヘッダーは、2.54mmピッチだが、ピン径が、0.5□(実測)と細いタイプなので、
通常の、ソケットコネクタには、スカスカで、挿入できない。
他にも、流用できるように、ソケット接続にしたいのだが・・・・
→ 下に手書きで示す図の通り、本液晶を、サブ基板に実装し、サブ基板上で、通常ピンヘッダーに変換し、
メイン基板とスタックで使えるようにした。
■ 2012.10.03
・ソフトの検討を始める。
まずは、WEB検索
PIC24FJ64GA002で、I2C液晶を制御している人がいた。
記事によると、「I2C1じゃなくて、I2C2に繋ぐこと」と書いてある。
この人は、ソフトI2Cでなく、I2Cモジュールを使っているようである。
しかし、参考リンクは紹介されているが、ソースは公開されてない。
・後閑氏の記事に、PIC12F683を使用したI2C液晶ライブラリのソースが、公開されているが、これは、ポート
で制御している。
ところで今回は、最終的に、MIDIプレーヤの表示器として使うことを目的にしている。
RS232Cは使わないので、そのピンの他の機能である、I2C2モジュールを使える。
→ 後閑氏のライブラリ関数の形は崩さないで、単純ポート制御からI2C2モジュール制御に、変換する方針で
検討してみようかな・・・
・とりあえず、液晶の初期化から検討してみる。
・I2C液晶サブ基板の、回路図を、手書きラフで書いてみた。
(後追いで水魚堂でまとめる予定)
この基板上に、I2C信号線の、プルアップ抵抗と、RESETピンの、プルアップ抵抗を実装することにした。
・マルツに実験用パーツ手配済
・今迄、PIC24Fで、I2Cをやったこと無し。
→ dsPIC30F4013で、やっている。(RTCと、EEPROM)
→ 後閑氏の、「PIC24F活用ガイドブック」に、DMM(I2C_ADC)の例で載っている。
■ 2012.10.06
・今回の私の実験では、最終目標の、EAGLE基板(PIC24F_MAIN_BOARD)の、ピン割付の関係で、
I2Cモジュールを使うとしたら、RS232Cとの、共有ピンを使うしかない。
つまり、
SDA2(RB2):6pin
SCL2(RB3):7pin
この、pin割付で、ファームを作成することにする。
※ この、pinをI2Cピンとして使うための設定は、以下の通りと思われる。
@ _CONFIG2 (・・・・・・ &
I2C2SEL_SEL ← ※ これは、後日、誤りと分かる。
A I2C2BRG = 0x9E; // 100kHz(Fcys= 16MHz時)
I2C2CON = 0x8000; // I2C許可
・ファーム作成は後にして、部品が届いたので、I2C液晶基板の、小物ハードを先に製作することにした。
■ 2012.10.09
・I2C液晶基板の、小物ハードを製作
I2Cライン及び、RESETラインの、プルアップ抵抗を、コネクタ変換サブ基板に実装することにした。
実装の様子と、回路図は、下図を参照してください。
・とりあえず、PIC24Fトレーニング基板で、デバッグするため、I2C及び、電源が供給できるケーブルを製作した。
・ファーム作成の基本方針
@ 大元は、後閑氏のソース(PIC12F HI-TECH-Cコンパイラで作成)の構造を参考にする。
A 今回は、I2Cモジュールを使うので、復習の意味で、ソフトI2Cと、ハードI2C(I2Cモジュール)の比較を
行いたいと思う。
B ハードI2Cの、PIC24Fでの例が、YS電子工作さんのHPに載っているので参考にする。
■ 2012.10.11
・daPIC30Fの、自作のI2Cルーチンがあるので、それを元に、後閑氏の関数に当てはめて行くことにした。
■ 2012.10.12
・とりあえず、ソースを書き終えた。(次の3つ)
@ I2C_LCD_TEST.c → テストプログラム本体(動作仕様は、オリジナルのまま)
A lcd_i2c_lib.c → I2C液晶ライブラリ・ソース
B icd_i2c.h → I2C液晶ヘッダファイル
・コンパイルを行う。
まず一発目エラー発生
「I2C2SEL_SEL
未宣言」エラー
→ このマクロ自体が、PIC24Fの、hファイルの中に無かった。
(まあ、順序が逆で、最初から調べないで書き始めたのがイケナイのだが・・・・)
・ここで調査
@ Confiog2で設定する、I2C項目には、I2C2は、出てこないことが判明
A Config2レジスタの、bit2が、I2Cのビットだが、ここは、I2C1SEL
となっており、
I2C1についての設定しかできない。
('1'→ SDA1/ SCL1, '0'→ ASDA1/ASCL1)
I2C2にする設定
(6pin:SDA2/(RB2),
7pin:SCL2/(RB3))
は、他にあると思われる。
B そこで、さらにWEB検索してみた。
WEB例で、PIC24F+I2C2を、C言語で記述している例があり
どうも、当該ピンを入力に設定するだけで良さそうである。
つまり、WEB例では
TRISB = 0x002C; // RB2, RB3 input for I2C2
としているだけである。
・これにならって、ソースを直し
プロトタイプ宣言部等、整理してコンパイルしたら、コンパイルOK
となる。
■ 2012.10.13
・メインを見直してから、デバッグを開始した。
→ 液晶接続しない状態で、Vcc= 3,23V(後で動作後も測ったがダウンしてなかった。)
この状態で、HEXロードOK
→ 電源SW_ONで、一発動作OK!!
@ ややコントラストが薄いので、若干濃くしてみた。(コントラスト設定値を、0x28から、0x30に変更)
A あと、LEDの動作を決めてなかったので、ここで整理
グリーンLEDのみ、動作周期(0.5秒)で点滅するようにした。
B その他、この液晶デバイスは、ライトオンリーなので、リードルーチンは、削除した。
・これで、本プロジェクトはクローズすることにする。
・次回は、この応用として、前作の、VS1053b_MIDIプレーヤの表示器として、この液晶を再生ファイル名表示
に使ってみる予定です。
<最終ソース>
・こちらから、どうぞ→ I2C_LCD_TEST.c
→ テストプログラム本体
lcd_i2c_lib.c
→ I2C液晶ライブラリ・ソース
lcd_i2c.h
→ I2C液晶ヘッダファイル
← 実験テーマ1に戻る TOP PAGEに戻る 実験テーマ21へ →