● 実験テーマ31

「PIC32MXによる、QVGAカラー液晶の表示実験」

■ 2013.5.6
  ・YS電子工作:斎藤氏の最近の記事(チップス)に、後閑氏が作成した
   dsPIC33F用の、QVGA液晶ライブラリを、PIC32MX用に変更した記事
   が記載されていたので、これを、自作のPIC32MXトレーニング基板で
   動かしてみようと思う。
  ・とりあえず、水魚堂で回路図作成及び、QVGA他、必要な部品の
   手配か着手することにした。
  ・QVGA液晶を何にするか悩んだが、結局、使い易さから、ちょっと値段的
   に高めだが、液晶パネルをキャリーボードに取付け済の製品、
   
2.8インチTP付「M028C92251P」"aitendo"を発注することに
   した。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


■ 2013.5.7
  ・aidensoのHPから、当製品の回路図をゲットできたが、自分にとって解りにくいCAD回路図だった
   ので自分用に水魚堂CADで、QVGA液晶モジュール「M028C9225TP」の回路図を作成する
   ことにした。
   内部構成としては、QVGA(240*320ドット)液晶パネルのフレキシブルケーブル接栓と、
   キャリーボード接栓が、ハンダ接続されており、データバスは16本で、8080系の制御信号と
   して、WR/RD/CS等が用意されている。QVGAコントローラは、ILI9325である。
   また、TP(タッチパネル)制御ICとして、SPI制御の、12ビットAD内蔵の「XPT2046」が実装され
   ている。
   さらに、カード検知及び、ライトプロテクション接点の無い、SDカードスロットも実装されているが、
   これは、単に制御線が、40ピンのコネクタランドに独立して引き出されているだけだった。

   ※ データバスは、16bit/8bit(80系制御)を、J2ジャンパーで選択できると、aitendoのHPには、
      しっかりと写真入りで説明されていた。
      (この時点では、J2をジャンパーするだけで、8bitバス設定になると思っていたのだが・・・・・)



■ 2013.5.8
  ・部品が届いたので、QVGA液晶治具を製作した。
   今回も使い回しできるように、ユニバーサル基板ベースとのスタック接続にした。


■ 2013.5.11
  ・ソフト検討を始める。
   とりあえず、
YS電子工作:斎藤氏の、RE0〜RE7をデータバスに使ったソースを殆どそのままで
   行くつもりでスタート。


■ 2013.5.13
  ・
YS電子工作:斎藤氏の、ソフト記述に疑問点あり。
   @ ライブラリヘッダファイル
      クロックのデファインが、80→ 20に何故か変更されている。
   → ライブラリソースの、この定数を使っている遅延関数の、Forループ数に変更ないことから、
      一時的にクロックを落としてデバッグしていて、元に戻すのを忘れているだけだと推測する。
   → 80のままの記述でよいはず。

   A ライブラリソース内の、delay_us関数
      斎藤氏が使っているのは、dsPIC33Fの場合のusec単位遅延で、今回は使えない。
      (クロックのデファインを、80→ 20に変更して辻褄を合わせたのかとも考えられるが?)
   → 下記が、dsPIC32MX用の「ループ遅延関数 usec単位」なので、これを使用

     /**********************************
     * ループ遅延関数 usec単位
     **********************************/
     void delay_us(unsigned short usec)
     {
        unsigned short i, Max;

        Max = usec * 640/Fosc;
        for(i=0; i<Max; i++)
        { }

   B ライブラリソースの関数の中で、変数型の記述に、unsigned short intという書き方をして
      いる箇所があった。
      私の知る限りでは、このような書き方をしているのは初めて見たので誤りと勝手に思ったのだが
      よくよく調べると、これは、32bit系特有で
      符号付32bit整数で、-2^31〜 2^31-1を扱う型になることが解った。(すいません疑って・・・)

  ・一応ソースを書き上げたので、コンパイル1回目
   液晶動作タイミングを取るために入れている、NOP記述のところでエラー発生
  → Nop()を、asm("nop")と定義しているところでエラーが出ている。
  → //#define Nop() asm("NOP")
     ※ 斎藤氏の記述にはNopの定義がされているが、これがあるとNopが再定義されている旨の
                コンパイルワーニングが発生
  →  p32xxxx.hの中で、Nop() _nop()として定義されているのでコメントアウトした。
  →  これでコンパイルエラーとワーニング:0になった。

  ・コンパイルOK後、動作確認を行う。
  → まずダメ
     バックライトが白く点灯しているだけ。
   <調査事項>
    @ QVGAキャリーボード上の40pinコネクタ部にて、VCC, RD, LED-Aピンの電圧をテスターにて確認
      → 3.32V OK
    A QVGA⇔ PIC間の配線確認
      → 液晶接続状態にして、QVGAキャリーボードの40pinランドと、PIC32MXのピン間にて導通OK
          B QVGAポート割付、変更したところの確認
      → 問題なし
    C 8bit/16bitのジャンパー確認
       J2がショートされているか?→ 問題なし
    D プログラムがRUNしているかの確認
       デバッグLEDを、遅延関数を使って、1秒毎にON/OFFを繰返す動作をさせて確認
      → 問題なし


■ 2013.5.14
  ・怪しいと考えている事項を調べる。
   それは、どうしてもデータバス幅の設定が正しいかが気になる。
  → まず、QVGAコントローラ:ILI9325のマニュアルを見ると、8bit/16bit(及びi80インターフェース)の
     設定は、IM0ピンを、'1'(VCC)にするだけでよさそうなので問題なしと見る。
  → 前から気にはなっていたのだが・・・・ 「JA1WBY」さんのHPの情報によると、
     「MO28C9325TP」には、8bit/16bit切替設定を、aitendoのHPの情報通り、J2をショートしても
     動かなかった旨が書いてあり
     どうも、液晶パネルと基板側の間で、IM0が繋がってないらしいのである。

  ・液晶パネルをキャリーボードから剥がさなければならないが、自分でもこの件を確かめることにした。
   液晶パネルは、キャリーボードと黒い両面テープで、斜め左右2箇所で固定されているだけ
   だった。
   ギターのピックで接続面の隙間を、こじってみたら割と綺麗に剥がすことが出来た。
   以下の、分解時のメモの通り、液晶パネルと基板側の間で、IM0が繋がっていないことが判明!!
   
フレキシブル基板の中で、IM0パターンは独立していて、フレキ接栓:11pin(IM0)との接続はなかった。

  → 液晶パネルのフレキ基板に実装されている、R1とR2が、IM0設定のための抵抗で
     デフォルトは、R1=未実装/R2=0Ω実装になっていて、IM0ピンはGND:16bit設定になっている。
     これを、逆にすればよい。
     つまり、R1とR2を入れ替えればよい。
     (R1=0Ω実装/R2=未実装にすれば、IM0ピンはVCC:8bit設定になる。)
     尚、J2のジャンパーは意味がないので、外してOK

      ただ実装されている抵抗が極小(1005サイズ)なので、私は外したR2=0Ωは使わず、R1のランドを
      細いワイヤでショート(ハンダ付)しました。

  ・上記処置を行ったら、液晶が動き出した。
   ざっと見、動いているようである。
   以下は、斎藤氏記述のまま動かした表示例(アスキー文字表示)です。
   この時点では、液晶の保護シートを付けたまま写真取りしたので、キズも見え、ちょっと見ずらいですが・・・


■ 2013.5.15〜 2013.5.17
  ・斎藤氏のテストプログラム記述での、動作確認は、ほぼ終了。
   ただ、あくまでプログラム例として公開されているようなので、不満点が残る。
   以下に、その不満点と、解決結果を示した。

   @ アスキー文字表示テスト
             モノクロGLCD(128*64ドット)の時の、ASCII文字描画関数の書き方をそのまま適用 しているので、
             文字表示位置が縦横逆になるなど、見にくいので、dsPIC33Fでの後閑氏のテスト画面 を実現させる
      よう修正した。そのテストプログラムは未公開なので自分で考えた。
      以下にその結果を示す。

   A テスト項目に、「2次元グラフ描画」と、「イメージ描画」が無い。
      
「2次元グラフ描画」に関しては、後閑氏HPにて、PIC24Fでの例で、QVGA液晶(今回のとは異なるが・・)
      を使った例があったので、これをPIC32MX用に移植してみた。
      また、「イメージ描画」に関しても、以前、モノクロGLCDの時のイメージデータ(後閑氏オリジナルの2点と、
      自作のイメージデータ:1点)を表示させた例があるので、その3つのイメージ画を、縦に並べて表示して
      みた。 
      以下にその結果を示す。

   


■ 2013.5.18
  ・これで考えていたテスト項目が全て実現できたので、今日は、液晶保護シートを剥がして、テスト表示
   の最終写真取りをしてみました。


<最終回路図>
 ・こちらから、どうぞ→ 2.8インチ液晶モジュール(TP付き)[M028C9325TP] 回路図」
                  「PIC32MX_カラーQVGA実験回路図」

<最終ソース及び、ヘッダーファイル>
 ・こちらから、どうぞ→ PIC32MX_QVGA_TEST.c
                  
colorlcd_libdsPICVH.c
                colorlcd_libdsPICVH.h
               ASCII12dot.h (12*12_フォントデータ: 後閑氏が作成された、アスキー文字データ)
                imagedata.h (イメージ・データ: 後閑氏が作成されたオリジナルに、WIN標準のお絵かきソフトで書いたオシロのイメージを追加しました。)


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ32へ →