趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

Mcufriend 2.4インチLCD を使ってみました

Amazonを見ている時、少し高いと思ったのですが、2.4インチのLCD
購入者レポートが好評だったので私も購入しました。
ところが、私の所に送られて来たものは、最初はバックライトのみが点灯し
全く動作しないものでした。(日頃の行いが悪い?)
でも、めげずに検討した結果、様々な問題が出ましたが、いずれも解決する
事が出来て上手く使える様になりました。
ちなみに、購入者レポートが私のものとは違っていたので、購入先を変更して
合計で4台買って見た結果は次の様でした。

  バックライトの点灯   4/4 (ここまではOK)
  動作不良        4/4 (全滅)
    内訳 なにも出ない           2/4 (半数)
                     パネルを押すと出たり消えたり   2/4   (半数)
       タッチスクリーンのX座標が逆  1/4

いずれにしても、Amazonの購入者のレポートとは大きくかけ離れる結果でした。
私には厄払いが必要なのかも知れません。

更に、eBayを見ていたら400円程度で同じメーカの新型が出ていましたので
こちらも購入して調べて見ました。新型は旧型の実装上の問題点が解決されて
いる様で、Amazonの購入者レポートを書かれた方々には新型が送られて来た
のかもしれません。

でも、旧型も以下の対策をすると全数問題無く使える様になり、2.4インチの
LCDを利用できる快感を味わう事ができる様になりました。ただ残念なのは、
SDのライブラリがUNOのプログラム領域を3割位消費するので、その点が
悩ましいと思いました。(これに関しては、FAT16専用のライブラリに変える事に
よりメモリの利用率を98%から82%に下げられる事が判りました。)
以下にこちらで行った検討結果をまとめました。

なお、新旧の区別は使用しているLCDコントローラの種類で行うのが良く、
電源を接続した時、最初にスクリーンが白く光るのが新型のコント―ラで
黒だと旧型のコントローラの様です。バックライトが点灯して黒の場合、
下記の旧型の問題が発生している可能性がかなり高いと思われます。
Amazonからの購入であれば、下記のライブラリで動かなかったと連絡すれば、
別のものを再送して貰えると思います。(再送は多分新型)連絡後、下記の
旧型の対応を検討をしてうまく行けば、新旧の両方ものが利用できる様になる
かと思います。(今は、旧型は希少価値かと思いますが)

<2.4inch LCD の概要>
  購入した「2.4inch LCD]」は240x320のLCDにタッチスクリーンとマイクロSD
  のインターフェイスを装備したもので次の様なものでした。
  イメージ 1
    イメージ 9

  1.中国 MCUFriend 社製
  2.Arduino UNO および MEGA 用のLCDシールド
  3.LCDのコントローラは 型名:r61526, 解像度:240x320,
         16bit (library : r/g/b = 5/6/5bits)カラー
          新型のコントローラは、型名:ili9320
  4.新型はハードウェアによるスクローリングと反転機能をサポート
  5.LCDはノーマリーブラック型(リセット後は黒画面)
          新型はノーマリーホワイト型(リセット後は白画面)
  6.タッチスクリーンは4線式
  7.マイクロSDインターフェイスを装備

LCDの動作状況>
  ライブラリのexamplesフォルダ内の一つを動作させた時の状況は次の様に
  なります。(デモは旧型によるものです)
 
   

 
<関連資料>
   データシートおよび関連資料はメーカの次のURLから入手可能です。
       URL : http://www.mcufriend.com/down/class/
   イメージ 2

    動作に必要なライブラリは次のURLから入手可能です。
       グラフィックドライブ
         URL : https://github.com/prenticedavid/MCUFRIEND_kbv
                ---> ライブラリの名前からはこのメーカのデバイスのものの様です。
                      UTFTとの互換性を保つための UTFTGLUE.h も用意されています。

                  https://github.com/adafruit/Adafruit-GFX-Library
                ---> 上記のライブラリで使用されていますが、既にAdafruit系の
          他のグラフィックのライブラリを使用中の場合はそのまま
                          利用できます。


       4線式タッチスクリーン
         URL : https://github.com/adafruit/Touch-Screen-Library
                     ---> ピンの割り付けは、このライブラリで定義されているものと
                              同一でシリアルモニタへの出力はそのままで確認できます。

<事前対策>
  それぞれの機能のチェックを進めていく中で次の様な対策が必要でした。

   [実装上の問題解決] (新型ではこの対応は不要です)
    数点注文しましたが、送られて来たものは、いずれも、最初は動作しません
    でした。調べた結果、次の様にパネル下のアルミ板端とフレキシブル基板
    実装された部品が接触している事が判り絶縁用のテープ処理で対応しました。
    イメージ 3

   [グラフィックライブラリの問題解決](新型ではこの対応は不要です)
    グラフィックライブラリはそのまま利用すると次の問題が発生しました。
   (ライブラリが古いとRとBが入れ替わった状態となります。最新のものを
  ご利用下さい。)

       1.起動時にLCD画面が暫くホワイトアウトして正しく表示されるまで
             時間がかかる。

    そのため、色は反転したものでしたが、ホワイトアウトの症状は無かったので、
    上記のメーカのWEB上で公開されているカラーバーのスケッチを参考に
     LCDの初期化シーケンスを変更しました。
    これにより、上記の問題は解決されました。(ただし、試行錯誤での検討結果
    ですので、ベストな初期化シーケンスでは無いと思います。)

    イメージ 4

   [タッチスクリーンの問題解決]
    タッチスクリーンのライブラリは、描画の無い単独ではそのまま利用できまし
    た。ただし、上記のメーカのWEB上で公開されているサンプルをこの4線式に
    置き換えて、描画を伴う状態で実行させて見た結果、次の問題が有る事が判明
    しました。
    
       1.タッチスクリーンの情報を取得後、描画の動作が出来なくなる。
       2.タッチを続けても、途中でタッチが解除される。
       3.タッチを繰り返すと、右側を押しても、左側の座標位置となる事がある。
            (Xの値のみで、Yの値には問題は有りませんでした。)

    この問題に関して次の対策をしました。
    
       1.タッチスクリーン用のポートがLCDコントールのものと共用で、タッチ
             スクリーンを起動するとポートの入出力状態が変化するのが原因の様
             でした。その為、タッチスクリーンを起動して座標を取得したら、
             ポートの入出力状態を元に戻す様にしました。
       2.タッチスクリーンのライブラリを解析すると、座標の取得に2回の読み
             取りを行っていますが、2つの読み取り値の差が大きい時はデータを
             無効とする為にタッチの解除の応答をしている事が判明しました。
             その為、タッチは継続しているがデータは無効で有る事が判る様に
             ライブラリを変更しました。

             イメージ 5

       3.左側の座標を取得した時、再度読み込みを行い、誤作動による読み取り
             エラーが少なくなる様にしました。

     タッチスクリーンに関しては、以上の処理内容を次の2つのファイルにまとめ、
     それらをメインのスケッチのフォルダに置いて利用できる様にしました。 
 
       タッチスクリーン処理ファイル(メインスケッチのフォルダに置いて利用)
                 イメージ 6

   [SDインターフェイスの問題解決]
    SDインターフェイスに関しては、単にレベルコンバータが入っているのみで、
    なんの問題も無いと思っていたのですが、ArduinoのSDライブラリにファイル名
    の長さの制限が有り、最初、その点が不明な為、確認に時間が取られました。
  (ファイル名は8文字以内、拡張子を含めて全体で12文字以内の様です。)  

    [その他の問題解決]
      ビックフォントの有効化
       イメージ 7

      タッチスクリーンのX座標が反転している時の対策  (新型の時は必要の様です。)
       イメージ 8

<テスト内容>
   2.4inch LCDのテストは下記のライブラリのサンプルスケッチを利用し、
     必要な変更を加えてから動作をさせて確認をしました。
    (その過程で上記の対策をしました。)

         1.LCD表示部分   ---> いずれもスケッチの変更不要
               MCUFRIEND_kbv\examples\GLUE_Demo_320x240
                                     "             \graphictest_kbv

              (旧型で、修正ライブラリを使用する場合はこちらのものを使用)

          2.タッチスクリーン   
          Touch-Screen\examples\touchscreendemoshield 
                                  ---> 変更不要

                メーカWeb\1481074001\UTouch\examples\Arduino\xxxxxx
                                  ---> 変更必要 こちらのライブラリのexamplesを参照

          3.マイクロSD
                ArduinoライブラリのexamplesのCSピンを4から10に変更して利用
                      SD.begin(4)  ---> SD.begin(10) に変更
               
          総合テストは、上記2のメーカのWEB上で公開されている他の方式用の
    ライブラリ内のサンプルである Touch_QuickPaint を、この方式用に
            変更した上で、描画内容のSDへの書き込みと読み出しの機能を付けた
            もので確認しました。ただし、プログラム領域の使用率はUNOでは98%
            に達し、更なる機能の拡張にはMEGAを利用するか、その他の手段が必要
            な事も判りました。
            総合テストのスケッチはこちらからダウンロード可能です。
    (これは、FAT32対応のもので98%のプログラムです。新しいIDEと古い
                UNOのブートローダ
組み合わせでは書き込みが終了しない様です。)

       テストコード等ダウンロード先一覧

            旧型用の修正グラフィックライブラリ(動作サンプル含む)
            修正タッチスクリーンライブラリ(動作サンプル含む)
            総合テストスケッチ(古いUNOのブートローダでは書き込みできない様です)

<テストの状況>
     タッチスクリーンテスト(4種類の一つ)
  

     総合テスト