● 実験テーマ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へ →