種々の液晶表示器(有機EL:俗称OLEDも含む)の制御回路を自作する。文字表示液晶からOLED、モノクログラフィック液晶、高解像度・カラーグラフィック液晶までほとんど全ての液晶制御を解説。

FPGAやCPLDを使う場合の追加の注意:

Quartusで設計ファイルのコンパイルを更新する際の注意:この章の設計ファイル(CPLDやFPGA関係)を更新する際に新しいproject folderに、旧ファイル群をコピーして名前を変え、新しい設計フォルダーとしてコンパイルすることがある。その際、以下の点に注意。昔、Quartusでコンパイルしたオブジェクトファイル(pofやjicは昔のプロジェクトフォルダーの、それらのファイルにリンクされている。したがって、それらのオブジェクトを書き込んでも、昔の変更前のコンパイルフェイルが書き込まれるのみで、新しい設計は反映されない。故に、なぜか、新しい更新が反映されないことになる。これは、相当に筆者を悩ました。Quartusのバージョンがバグを含んでいるかと思って、種々のバージョンを試したが、全てダメ。要するに、新規のコンパイルオブジェクトの指定が昔のままだったため。書込オブジェクトの更新は、まず、書込ウィンドで書込ファイルを削除(Remove)する。その後、正しい、新しいフォルダー内の書込ファイルを"Add File”で選択し、それを書き込むことで正しく更新される。

 

以下の写真は自作した例。
(最初の画像が表示される時に、ブラウザーの種類によって、「縦のしましま」が出る場合がある。この場合、その次の写真に移動して本画像に戻ると、「しましま」が消えて、きれいに表示される。(本来の画像は「しましま」無し。)

Image_example

時計付きデジタルフォトフレーム:800x480 画素、 16-bit カラー液晶(共立デジット)。4-3章参照。

 

LogiAnaPanel

上記の液晶に関し、フォトフレームだけではしょうがないので、実際に測定装置に利用した例。自作ロジックアナライザー

 

Char_example

SharpGraph

データー表示器:480x272画素、24-bit フルカラー液晶(SparkFun)。4-1章参照。6-3章にも例あり。データー表示のみを安く行うには8章の方式が特にお薦め。

 

DataImage_Img

共立電子で売っているData-Image社のFG040346DSSWBG03。上記のシャプ製液晶と同等な仕様で、480x272画素、24-bit フルカラー液晶。シャープのよりも安い。ただし、視野角は良くない。特に上下方向の下側から見た場合、暗くなって色も正常に見えなくなる。なお、上の写真のようにグラフ表示に使用したりする場合は、あまり気にならない。カラー写真を表示するフォトフレームなどの用途には、液晶の取り付け方をうまく工夫して(例えば上記写真のように斜めに取り付け)、あまり下側から覗き込まれないようにする必要がある。(前記のシャープ製の液晶の場合は視野角に欠点は無い。やはりこの辺は価格が高いだけある。)詳細は6−4章を参照。そこでは低価格でカラーグラフ表示を行えるシステムの例が示されている。CPUはATMega168で液晶コントローラをBASCOMで制御。

同様のカラー液晶表示をより簡単に作成できる方式を8章に示す。現在はそちらの方がリーゾナブルな価格で作成できるので、他の章の方式に比べて8章の方式の方が良い。8章ではEPSON液晶コントローラをAVRからBASCOMプログラムで制御する方法について述べる。(6−4章にも一部、それがあるが。)安く簡単に済ますには8章を推奨。

 

BlueoOed

青色、有機EL(俗称OLED):3V駆動可能、高視野角、BASCOMのLCDコマンドでそのまま制御可能。2-3-2章および5章参照。
けっこう斜めの角度から写真を撮っているが、ちゃんと表示が映っている。(液晶ではなかなか、こうは行かない。)
すなわち、OLEDは自己発光なので普通の液晶よりも視野角が広く、斜めから見た場合でもコントラストが良いことが長所。

 

GOLED_SPI_Sys

128x64画素のグラフィックOLED(WinStar WEX012864E:共立デジット)をSPIインターフェースで制御。パラレルだと13本の制御線がいるが、SPI制御だと5本以下でOK。(写真には8本写っているが、電源1本+GND2本が含まれる。)これにより、ポートピンの少ないマイコンやポートの足りない場合でも接続可能。(ただし、メモリー容量は有る程度必要。写真で接続しているのはMega328。BASCOMで制御できる。)
一つ前の写真の解説にもあるように、OLEDはコントラストが良い。写真は蛍光灯の近所で撮影したが、蛍光灯の反射光にも負けずに撮影可能。SPI接続の詳細は3-3章を参照。カラーグラフでなくてもよく、少々、電源ラインにノイズが乗ってもよい場合には表示がきれいなのでお薦め(グラフも書ける)。

 

EPimg1

共立シリコンハウスで売っていたディスプレイコントローラー基板セット [ エプソンS1D13781カラーグラフィック液晶コントローラの評価ボード(S5U13781)+カラー液晶(TOPWAY LMT35KDH03: 320x240 dot, 8-bit x 3 RGB)+結線基板] を使ったフルカラー液晶の表示例。詳細は6章。写真はコントローラ基板をはっきりさせるために、画像処理で明るさを上げてある。(そのため、液晶表示のコントラストが付いていないように見えているが、実際はきれいに映っている。)液晶モジュールと制御基板とはフレキシブルケーブルでつながっていてFPCケーブルが折れ曲がりやすいので、写真のように下に段ボール板を敷いて、両者を同時に持ち上げるようにしてある。
8章にも同様な例がある.

 

DOGM128

低消費電流グラフィック液晶、DOGM128。表示時=300uA。表示オフ時、消費電流<=10uA。詳細は7章。使わない時には表示をOFFすれば写真にある電池(Li-Polymer 3.7V 110mAh)で1年はもつ(時刻や日付を更新しながら)。

 

最初の掲載以後の履歴: 

2011年11月:2011年9月の資料から、大改訂をしました(主に4-2章)。バグ修正、および新しい液晶のページをたくさん追加しました。
2011年11月後半:2011年前半に掲載した4-2章にけっこうバグがあり、差し替えました。(2011年後半に4-2章の部分を全部試作、完動させ、バグを修正しました。)

2011年12月:若干の情報追加を行いました。
新しい液晶のページをたくさん追加しました。(写真表示=フォトフレームの実現等)
設計のみでのバグを防ぐために、ほとんど全ての回路や方式を試作し、完動を確認しました。

2012年1月:OLEDの写真を追加。4-4章と5章を追加。副章の表示を整理。各章の一部を加筆。
      自作FPGA基板による4-3-2章の方式に対し、より作りやすい方式を追加しました(4-3-3章)。
      その際、円の描画についての完全ハード化についても追加しました(4-3-2-2章)。
       2012年6月追記:4-3-3章には、DE0-nanoに搭載されたSDRAMの制御法のVerilogソース(当方が独自で作成)も添付されています。今回の使用法はフレームバッファー用ですが、このソースはその他の用途にも利用可能と思われ、Verilogで記述されているのでユーザーによって改造可能です。

2012年3月:5章の写真を増やして、わかりやすくしました。

2012年4月:3.3V系で使用可能な文字表示液晶の情報を増やしました。(2章)

2012年7月:エプソン製 S1D13781カラーグラフィック液晶コントローラに関する6章を追加しました。

2012年9月:4-3-3章の添付ファイル中のDE0コネクタとGLCD信号との対応表(excel file)にFPGA設計データーとは矛盾する部分があったので、差し替え、圧縮ファイルを添付し直しました。

2013年4月:低消費電流型・液晶に関する7章を追加しました。

2013年5月:エプソン製 S1D13781カラーグラフィック液晶コントローラをBASCOMから使用する例を追加しました。(6章に追加)

2014年11月:リンク切れを修正。その他、少し書き換え。

2015年6月:グラフィックOLEDのSPIインターフェース制御例を追加

2015年12月:6章の追加情報として、8章を追加

2016年11月:最初の項目にQuartusにおけるオブジェクトファイル更新の注意を追加

 

注意:本ページの内容の利用等については、本ページの末尾にある免責事項を参照されたい。

その他:Mega168やMega328を使って制御する場合は以下の注意が必要です。その理由は、添付したBASCOMのプログラムが、Mega168や328のPortD.0, PortD.1を入出力ポートとして使っているプログラムであった場合、自作電子回路のページ(本ページの末尾にあるリンクをたどると行き着ける)の「BASCOMやAVRのクセ」を述べた7-0章の(1)を参照して、添付したプログラムを修正してください。(このページの3-1章が該当。)

 ATMega328を使っている場合は、そのプログラムの書き込みにあたっては、プログラム書き込みソフトに対してMega168か328の指定をしないとうまく書き込めないことがあります。

注:本ページの内容をプリントする場合、画像が多いために、相当時間、プリンタドライバーの準備に待たされる場合があります。気長に待ってください。

以下の追記事項は正しくない事が分かりました。その下の追記事項2を参照してください。

追加記事:Mega1284を制御ボードとして、SPI インターフェースを使う場合、BASCOM 2.0.xx以降ではConfig SPI 命令にバグが有るので注意(以下に記した追記事項2を参照)。また、Mega168や328ではConfig SPI命令でNoss=1とするとSPI信号が出力されないバグがある(以下に記した追記事項2を参照)。要は、AVRの本来の/SSピンを使う際には追記事項2に有るような注意が必要という事。
その他、BASCOMでプログラムした時におかしな現象が出た際は、(本ページの末尾にあるリンクをたどると行き着ける)自作電子回路のページの7章である「BASCOMやAVRのクセ」を参照すると解決する場合もあります。

追記事項2:上記の追記事項は正しくない部分がある。Config SPIに対してはBASCOM側にはバグは無い。これはAVRのハードの特性によるものであり、詳細は上記7章の(6)を参照。

 

概要:大坂の電気街、日本橋で 売られている各種液晶表示器や、その他で入手したカラーグラフィック液晶を制御する回路を紹介する。(秋葉原やネットでも同様なものがあり、それらにも適用可能。)なお、全体の系が3.3Vの場合は、AVRの書込器として、ATMEL AVR ISP MK-II が必要。(日本橋の共立やマルツにあり)

なんでやってたの?:
まー、学生が液晶の制御法(CPLDやFPGA設計まで)を学んでくれるのを期待して。そこまで理解してくれれば...。う〜ん、まっ、いいか!?#$。
また、学生がその他にもいろいろがんばって、オリジナリティー(それらを利用してその先)の発揮も。

まー、上記を気にせず、このページを見た人は、参考にしてください。
注:本ページの内容の利用等については、末尾にリンクのあるトップページにある免責事項を参照されたい。

 
制御ソフト:ほとんどBASCOMで制御:なぜなら、液晶制御命令が揃っていて、簡単だから。:別にCもあるかもしれないけど(AVR-Studio etc.)、その場合は、関数呼び出しに置き換えればよいし、関数がなければ関数を作って。(筆者は別のCPUで、Cもアセンブラもやったことがあるが、なるべく手抜きがしたいので、AVRについてはBASCOMが一番いい。:新しくCのライブラリを作るのは面倒だし、時間の無駄?)また、BASCOMではdouble floatまでサポートしている。(log, sinなどの算術関数はsingle floatのみ。)
なお、BASCOMでの制御が直接的には無理な高解像度カラーグラフィック液晶については、BASCOMでやろうがCでやろうが、それほど手間に変わりはない。

 

各章の概要:(以下に出てくる「目次に戻る」は、ここにリンクされています。)

1章.一般的な5V 文字表示液晶のBASCOMによる制御

2章. 3.3V系での文字表示
 2-1 3.3V液晶
 2-1-2 I2Cインターフェースの3.3V液晶
 2-2 5V液晶を3.3V系で使用可能にする方法
 2-3 3.3V 有機ELディスプレイ(OLED)とBASCOMによる制御(5章にも同様な例あり。)

3章.モノクロ・グラフィック液晶のマイコン回路とBASCOMによる制御
 3-1 128 x 64 dot (3.3Vのみで動作)
 3-2 160 x 128 dot (+5Vが必要(バックライト)。
             マイナス電源(液晶駆動のバイアス用)も必要。
             例ではそれをDC-DCコンバーターで+5Vから発生させる例も示す。)
 3-3 128x64 dot OLED(WinStar WEX012864E)のSPI制御

4章.カラーグラフィック液晶(CPLDやFPGAによる制御回路とそのBASCOMによる制御)
 4-1 480 x 272 フルカラー (表示がきれい)
  4-1-1 方式1 (CPLD + SRAM)。8ビットカラー。
  4-1-2 方式2(方式1をより簡易に設計)
  4-1-3 フルカラー化(フォトフレーム)。24ビットカラー。
     (同じ液晶をEpson社のコントローラで制御した16ビットカラーフォトフレームが6-3章にもあり。)
 4-2 320 x 240 RGB各1-bit カラー (低価格、タッチパネル付き )
  4-2-1 CPLDによるインターフェース (CPLD + 32kB SRAM)
  4-2-2 FPGAによるインターフェース (Frame-bufferをFPGA内部のSRAMで済ます方式)
  4-2-3 AVRマイコンとSRAMのみで安く制御基板を作る方法
 4-3 800 x 480 16ビットカラー(高コストパフォーマンス、高解像度)
  4-3-1 方式1: 簡易型。作りやすく、安定動作。(CPLD + SRAM)
  4-3-2 方式2: 16ビットカラーフォトフレーム。FPGAによる制御。作成は少し難しい。 (FPGA + SRAM)
  4-3-3 方式3:16ビットカラーフォトフレーム。 DE0-nanoのみで制御。
          作成は容易。(FPGAボードのみで制御:SDRAM搭載)
 4-4 4章の技術評価

5章. 液晶表示・汎用AVRボードの例

6章. Epson社のグラフィック液晶制御ICの実験
 6-1 概要
 6-2 EPSONの液晶制御IC(ディスプレイコントローラ) S1D13781について
 6-3 本ホームページで述べたグラフィック液晶への適用
 6-4 低価格カラーグラフィック液晶システムと、そのBASCOMによる制御
 6-5 まとめ

7章. 低消費電流型液晶
7-1 ストロベリー・リナックスのI2C低電圧キャラクタ液晶モジュール
7-2 Electronic Assembly社のDOGM162E-A
7-3 Electronic Assembly社のDOGM128L-6

8章. Epson社のグラフィック液晶制御ボードのAVRとBASCOMによる制御

 

注意:本ページの内容の利用等については、本ページ末尾の免責事項、またはここにリンクしたトップページにある免責事項を参照されたい。

注:本ページの内容をプリントする場合、全ページに渡る総画像数が多いため、相当時間、プリンタドライバーの準備に待たされる場合があります。気長に待ってください。
p.s. 上記に対しては、将来的には各節を分節化(各節ごとのHP化)して軽量化する予定。

 

 

(1)5V 文字表示液晶 (あまりにもありふれているので、写真は無し。)

 まずは一番簡単な 2行16文字のSC1602BSLB(バックライト付き)の制御から。
筆者はBASCOM-AVRを使っている。その言語で、Config LCD 命令を使うと、簡単に液晶の制御を行うことができるので非常に重宝している。通常はデーターとして4-bit(B7-B4)を接続し、後は制御信号のRS, E の2本のみで、合計、6本しかマイコンの信号線を使わないので助かる。接続例をPDFで示す。加えて、BASCOM-AVRのプログラム例を示す。(液晶の14ピンコネクターの内、5番ピンは最初からGNDに落としておくこと。)なお、 PDFで添付した回路はATMega168のIC直接ではなく、共立デジットのABL168ボード(Boot-Loader 168)との接続例を示している。 (リセットラインやクリスタルは基板上に既に乗っている。)

 注意:LCD(Liquid Cystal Display:液晶)モジュールの型番によって電源ピンが逆の場合があるので注意すること。VDD(=+電圧を与える)とVSS(=GND)のピンが異なることが多々ある。購入した SC1602BS では1番ピンがVDD(+電圧)で、2番ピンがVSS = GNDだが、同様なLCDで型番が異なるものでは、1番ピンがVSS = GND で、2番ピンが VDD(+電圧) と逆になっているものがある。 したがって、必ず電源ピンの番号を確認してください。逆に電源をつなぐとLCDモジュールが短時間で壊れます。(その場合、表示がされなくて、モジュールの裏側が相当に発熱しています。)

 BASCOM-AVRではConfig LCD命令による使用信号の定義後は、各種の液晶表示制御命令を使用できる。詳しくはインターネットで 液晶 BASCOM AVR などのキーワードでサーチすれば、様々なサイトで参考資料が見つかる。または、BASCOM-AVRのマニュアルを調べる。(Acrobat Readerで開いて、LCDでサーチすればOK。)

 Back-light LEDの点灯は、SC1602BSLB基板の14ピンコネクターから遠く離れた反対側にあるA、K金パターン付近の、J3をハンダでジャンパー接続し、あと1カ所、R9という端子に、22〜51オームの小さな抵抗か表面実装の抵抗を接続すれば、SC1602BSLBの14-pin コネクターから供給された+5VからLEDがドライブされる。(抵抗値は使用する電源電圧とマニュアルのLED電圧&電流から算出。5Vなら33 ohmでよい。)

 共立電子のデジットには16文字2行の他に、20文字x4行などもあり、表示文字数が不足する場合などに便利。この液晶もBASCOMで制御できる。 (16文字と20文字ではコネクターが異なることが多いので注意。16文字だと2列の7x2=14ピンが一般的だが、20文字だと1列の16ピンが多い。)デジットには8文字x2行のものもあり、ちょっとしたパネルメーターなどに便利(パネル占有スペースが小さい)。なお、16x2と8x2では14ピンコネクターは同じだが、電源の+−ピンが逆なので注意。
(+−電圧を逆に与えるのが、ICやモジュールに対する最悪のパターンで、だいたい、瞬時に壊れる。)

 

目次に戻る

 

(2)3.3V駆動、文字表示液晶

 マイコンシステムの系を3.3Vで給電している場合に、3.3Vで使用可能な液晶表示器が欲しいことがよくある。(なお、低消費電流型のものについては、7章にも追加記事が有る。)

2-1 3.3V液晶

 このような液晶でBASCOMで使用可能な物は日本橋ではマルツ電波のみにある。(SPI やI2Cインターフェース型の物は他店にもあるがBASCOMで使用する際はConfig LCD系の命令は使用できない。)マルツ電波にある物は上記(1)のSC1602Bに制御がコンパチブルであり、BASCOMからそのまま使える。3.3Vで使えるものの型名はLinkman, TC1602E-13A, TC1602E-25Aである。(コントラスト電圧の与え方が5V液晶と異なるので注意。使用した回路図は自作電子回路の6-11章の(2)にある。)筆者は、FPGA(3.3V入出力インターフェース)とAVR(3.3V駆動)を両方用いたために、3.3V系の電源で設計せざるを得なかった回路において使用し、余分なレベルコンバーターICを使わずに済んだので、基板サイズを抑えることができた。

2-1-2 I2Cインターフェースの3.3V液晶

 BASCOMのConfig LCD系の命令は使用できないが、3.3V用の文字表示液晶がストロベリー・リナックスから販売されている。(低電圧I2C液晶モジュール:ST7032iコントローラ。日本橋だと共立からも購入できる。)この液晶は低消費電流なので、バッテリ駆動のシステムにも便利。また、通信線は2本しか使わないので、AVRのピンが足りない場合でも使える。(普通だと6本(D7~D4, E, RS)が必要だが、SCL, SDAの2本でよい。)(小型の表示器の場合は250uAという低消費電流。ただし、AVRをスリープさせる場合、下段の「注:」を参照。)
 ただし、この液晶表示器は上記したようにBASCOMのConfig LCD系の命令は使用できないので、BASCOM側で相当する命令を作る必要がある。そのサンプルプログラムを添付する。 通常の液晶コントローラと異なり、少し特異な制御となる。RSという制御ビットはハード的には出ていないので、I2CでI2Cアドレスデーターを出した次のバイト中にRSビットを入れて送信し、その後に続くデーターバイトが命令なのかデーターなのかを指定する、といった通信方式である。
 サンプルプログラムではATMegaなどに装備されているハードウエアでI2Cバスを制御する例を示した。(ハード的に行う場合をTWIと呼んでいる。)なお、ハード的に決められたSCLやSDAピンを使わない場合は、ソフト的に行うことも可能であり、BASCOMのマニュアルを参照されたい。 Config TWIではなく、Config I2CDELAYでI2Cのクロック周波数を設定する点などが異なる。なお、インターネットのBASCOM命令の解説があるサイトの情報によると、 Config I2CDELAY 命令には少しバグがあるようなことが書いてあった。
 注:この液晶はI2Cバスのタイミングにけっこうシビアなようで、Mega168でやってみたところ、ハードウエアI2CであるTWIでは動いたが、ソフトウエアI2C(Config I2Cdelay命令で指定)ではうまく初期化できなかった。原因は不明(面倒なので波形観測をしてない)。その他、ハードI2CであるTWIで行い、AVRにPowerdownモードを使用して低消費電力化を図ったシステムにおいて、Powerdownから起床した後、I2C命令をAVRから発行する場合、ランダムにデッドロックする現象が見られた(起床後の最初の命令発行までにwaitms 1を入れていたが不具合は起きる)。これもAVR側の問題なのか、液晶モジュール側の問題なのかは不明。Idleによるスリープでは正常になるので、何らかのAVR内部のI2Cドライバハードのクロック・スリープの問題なのかもしれない(数十分に1回ランダムに起きるので追求が難しい)。低消費電流による時計を作成した際に時計が異常に遅れるので原因解明に手間取ったが、原因は上記の約10から20分に1回程度ランダムに起こるデッドロックとそこから抜け出す15秒程度のAVR側の計時停止であった。なお、あまりにwaitmsを長く入れすぎると、その間はフル電力モードでAVRは動作しているので、せっかくスリープをして消費電流を減らしたのに、それに逆行してしまう。

Gakkai_Timer

 この液晶を使った例を上の写真に示す。学会発表用のタイマーである。( Timer for Presenの表示がキータッチミスでTimer fot Presenになってしまっている。とほほ!)上の初期画面でSW3を押すとスタンダードモードに入り、その後任意時間設定モードを抜けてから、再度SW3を押して時間計測を始めると、7分で1鈴、10分で2鈴、15分で3鈴がブザーから鳴る。初期画面でB4, M2を選択すると、即、卒研、修論発表会用の時間設定になる(例、1〜3鈴で12、15、20分)。
 普通の市販タイマーではベルを3回、異なった時間に違う音で出すのは難しいが、この学会タイマーがあれば、簡単である。また、システムも写真のように小型なので(コネクタやタクトスイッチのサイズを見ればわかる)、PCに比べて講演会場での講義机のスペースもまったく占有しない。プログラムはBASCOMで書いてあり、プログラムを書き換えればその他の動作も可能。個人の机上での学会発表の練習用にも重宝している。(彼は自分のPCをすでに発表用にPower-Pointで使っていて他のプログラムは動かしたくない。特に動画再生もあるので、なおさら。他の学生も追い込みでPCでプレゼンファイル作成に忙しいし。)
 前記したようにI2CのデッドロックのためにAVRをスリープできないために、システム全体をあまり低消費電流にはできないが、学会発表用のタイマーという短期間の使用であれば問題ない。ちなみに上の写真のシステムの電源はプリント板の裏にあるコイン型電池(CR2032 = 3V)であり、これで1日の連続使用に十分耐える。
 このシステムの回路図とMega168のソフトを参考に添付する。 回路図に有るように1秒のパルス発生はATTiny45で行っており、1秒ごとにMega168に200usほどの負極性パルスでインタラプト0(INT0)をかける。ATTiny45部のソフトも添付する。 なお、Mega168を内部8MHz 発振器でクロック供給し、Mega168のTOSC1, TOSC2端子に32768Hzクリスタルを接続してMega168内部のTimer2をAsyncモードで使えばTiny45は不要であり、より簡単にできる。その例は回路のページの7−0章の(3)に記述してある。その他、回路図にある温度測定用のサーミスターは使っていない。 また、添付した回路図にある液晶バックライトスイッチのコネクタは、写真のボードは旧バージョンなので無い。なお、写真のボードがあまりきれいにできていないのは、ほとんどしろうとの学生が作成したためである。

2-2 5V液晶を3.3Vシステムで使う

2-2-1 5Vラインから3.3Vを発生しているシステムの場合

 3.3V電源を5Vより生成している場合は、3.3V駆動の液晶ではなく、普通の5V液晶(SC1602BSLBなど)を使うことが出来る。液晶のドライブ電源とコントラスト調整回路を5Vから給電し、AVRとの信号インターフェースは3.3VのAVRから行うだけでよい。これは、5V液晶のH/L信号電圧レベルがTTLレベルとなっているためであり、3.3V駆動のAVRでもその信号レベルを満たすためである。(このページの(5)章に参考回路有り)その場合、5Vラインがあるので、Back-Light LEDは5Vで光らせる。

2-2-2 5V液晶を 3.3Vで使うその他の方法(5V電源系がもともと無い場合。)

 Back lightを使わなければ、5V液晶の多くは3.3Vシステムでも以下のようにすれば使用可能。なお、Back Light LEDは4.2V以上は電圧が無いと光らないので、全てを3.3Vのみで行うシステムでは2-1章に述べた方法か、2-3章に述べる方法しか無い。

LCDlower5V

 図の回路に2つの例を示してある。5V液晶の多くはVDDとVSSの電圧差は2.7V以上あれば、内部の制御回路は動作する。しかし、3番ピンの液晶表示用バイアス電圧はVDDとの差が4.5V以上ないと液晶のコントラストを出すことができない。そこで、液晶モジュールのVDDには3.3V( = VCC)を与えておき、液晶のバイアス電圧(3番ピン)のみに、ある負電圧を与えてVDDとの差が4.5V以上になるようにしてやれば3.3V下でも表示させることができる。
 図の右にあるExample1では1.5Vの電池をマイナス電源として使っている。P2ピンの出力をP1ピンに与えれば液晶は表示される。1.5Vの電池で小型なLR44コイン電池で十分。試したところSC1602では0.2mAしか電池を消費しない。もし、電池寿命が気になるなら、単3電池でもよい。 または、リレーを付けておいて、本体の電源が入らない時には電池の電源ラインをOFFしておけばよい。コントラストの調整は回路図のVR1で行う。
 次の方式はAVRから出力したパルスを整流して負電圧を作る方法である。図の下側にあるExample2がそれ。P3出力をP1につないで液晶の3番ピンに負電圧を与える。VR2ボリュームでコントラスト調整。この回路ではMega168でプログラムでOC1A端子からパルスを発生している。したがって、Timer1を使っており、その分、Timer1は他の用途に使えなくなる。これを逃げるには図のCLKO端子からClock Inにつなぎ変える。CLKOピンはMega168ではヒューズビットを書き換えると、CPUクロックが出力される。これをパルス入力として使うとTimer1は空く。図の回路定数では10kHz以上の周波数であればよい。パルス入力のDutyは50%/50%が望ましい。(OC1Aを使用する場合は、BASCOMでは、Config Timer1 = Timer, Prescale = 1, Clear Timer = 1, Compare A = Toggleなどとする。その後、例えば、CompareA = 100, Start Timer1。)
 ここで使う整流ダイオードとしてはショットキバリアダイオード(SBD: 図では1SS106)を使う必要がある。普通のシリコンダイオードよりも順方向電圧降下が小さい。3.3Vのシステムでパルスをコンデンサ結合後、整流するとシリコンダイオードでは3.3/2 - 0.7 V = 0.95V、SBDでは3.3/2 - 0.4 = 1.25V。液晶のバイアスのためには1V以上の電圧は欲しいので、この差は重要である。
 Example1とExample2のどちらかを使えば、3V程度まで5V液晶を使用できる。Example1と2の違いは以下。1の電池方式は低消費電力のAVRシステムにも使える。それに対し、2の方式はクロックが止まると液晶表示が消える。AVRをPowersaveモードなどで使うと内部クロックを止めてしまうので上記のようになる。したがって、液晶モジュールに低消費電流のものを使う場合は、電池方式でやると全体を低消費電力化できる。(なお、電池の電源系にはリレーを入れない。)

 

2-3 3.3V駆動、有機EL、文字表示器(有機ELの俗称 = OLED、Organic LED)のBASCOMによる制御 (5章も参照)

 特徴:3.3Vのみで動作し、BASCOMで従来の液晶文字表示器のように制御可能。
(なお、ここに示したOLEDでは、そのためには少し余分なコマンドを与える必要がある。下記参照。それに対し、5章で説明するOLEDは余分なコマンドは必要ない。ただし、2-3章のOLEDの方が安定動作。)
 OLEDのコントラストは液晶と比べて非常に高い(ドットが自分で発光し、その他の部分はブラックのため)。
下の写真はその例(筆者の写真撮りが悪いため、少しピンぼけ)。 写真の発光色は黄色だが、デジットにはこのメーカーの白色もあり。 (なお、表示でのPC7はPortCの間違い。)

OLED_image

 共立デジットにOLED型の文字表示器(SO1602)があったので購入し、使ってみた。3.3Vのみで動く(VDDに+3.3Vをつなぐと表示器の基板内部で有機ELのドライブ電圧を発生してくれるため、その他の電源は不要)。OLEDは自身が発光するのでバックライトは不要でコントラストは液晶より格段に高く(液晶のようなコントラスト微調整はほとんど不要で高コントラストが得られる)、表示更新速度も桁違いに速い(デジットでのデモを見ると分かる)。また、仕様書を見るとVDD = +5Vでも使えるようであり、その場合、5V系のAVRにも接続可能と思われる。なお、SC1602液晶のような4ビットバスをサポートしておらず、8ビットバスでデーターを与える必要があるため、BASCOMで簡単に制御する際には、少しピン数の多いAVRで一つのポートが<B0>から<B7>まで揃って出ているAVRが必要である。
 BASCOMで動作させるには以下のような工夫がいる。まず、OLEDのコントローラーは前記の1602系液晶のコントローラーIC (例:HD44780)と似た部分は多いのだが異なっており、独自にコマンドを与えないといけない部分がある。(正しい初期化コマンドを与えないとOLEDの発光ドライブ回路がスタートしない。すなわち、真っ暗のままであり、表示がされない。)それに対処したBASCOMによるサンプルプログラムを添付する。 OLEDのコントロールICは4ビットバスをサポートしていないので、8ビットでデーターやコマンドをやりとりする必要がある。したがって、Config Lcdpin = pin, Port = Portx, ..とする必要がある(x = A, B, C, etc.)。Portxの8ビットを全て使うので、8ビット分が出力されているポートを持つAVRチップを使う必要がある。 EやRSは別ポートでかまわない。(5章にもOLEDを制御するAVRボードの例があり参照されたい。)
 BASCOMで制御可能にするキーポイントは以下である。初期化においては、Config Lcdpinを発行するタイミングに注意する必要がある。パワーON後に、最初にConfig Lcdpinを発行すると、その際にOLEDのコントローラーに初期化コマンドを送るが、それだと、OLEDにうまく表示が出なかった。すなわち、OLEDをドライブする内部電圧発生回路がスタートせずにOLEDが光らなかった(BASCOMが初期化の際に最初に別のコマンドを送っているのが原因と思われる。)。そこで、調べると、共立デジットが開示しているWeb-pageにどのようなコマンドデーターを与えるかの解説があり(デジット OLED でサーチすると見つかる。そこにデモビデオもある。)、パワーオン後、100ms待ってからディスプレイをイネーブルするコマンド(&H0F)を与えるとある。これをConfig Lcdpinコマンドよりも前に与える必要があり、別途、Portx、RS、Eを別名で出力ポートとして定義しておき、Portxを&H0Fにして、RS=0, EをL/H/Lと遷移させると表示が発光するようになる。要は、別途、それらのポートを出力ピンとして別名で定義しておき、それらを直接、BASCOMで制御する(サンプルプログラム参照)。なお、BASCOMではR/Wは常に L になっていると想定しているので、OLEDのそのピンはGNDへつないでおく。上記の処理をやった後にConfig LcdpinとConfig LCD文を行うとBASCOMのLCD命令などがそのまま使えるようになる。なお、Lowerline命令やLocate文はうまく行かなかった(OLED基板上の新型コントローラー内部のRAMサイズの増加や制御ビット位置の違いによるようだ)。 したがって、gosub nextlineというサブルーチン呼び出しを使ってLowerline命令の代わりにしている。その際にOLEDに与えるコマンドデーターについては、前記のデジットのWebサイトを参照。なお、UpperlineやCLS、および Cursor ON/OFFなどはBASCOM命令がそのまま使えるようだ。(あまり詳しくは試していないので、動かなければ上記同様にサブルーチンを作成して対処されたい。) 以上の対処法でほとんど普通の1602系・液晶文字表示器と同じようにBASCOMからLCDコマンド等によって制御できるので3.3V系システムには、OLEDは最適な表示器と思われる。(コントラストが高く、表示更新も高速。電力消費もLCD back-lightの半分以下。)
 なお、20文字x2行のものもデジットにある。注:16x2の物がSILコネクターであるのに対し、20x2の物は14-pin Headerコネクターとコネクターが異なる点に注意。この場合、コネクターが異なるので16x2対応で作ると、20x2には差し替えが出来ない。

 

2-3-2 その他の3.3V駆動OLED(本ページのトップに写真がある)

 5章にも他の種類のOLED(WinStar社:共立デジットまたはシリコンハウスにあり)の例を示しておいたので参照されたい。このOLEDはいろいろな色(赤、黄、緑、青、白)があり、発色がよくきれい。 また、3〜5Vの電源で動作し、SC1602系液晶とコマンドが完全コンパチブルなので、上記2-3章のようなコマンドに対する工夫をしなくても、そのままBASCOMのLCDコマンド系で動く。さらに、上記2-3章のOLEDと違って、4-bitデーターバスによるインターフェースもできる。 なお、使用にあたっては若干の不安定性が出る場合があるので5章の追補を参照されたい。

 

目次に戻る

 

(3)モノクロ・グラフィック液晶表示器 (7章にも低消費電流型のグラフィック液晶の追加記事有り。)

 グラフ表示などを行いたいことがあったので、グラフィック液晶表示器を使う必要があった。まず、単色型のグラフィック液晶表示器の制御について紹介する。(これらの表示器の多くは、モジュール内にRAMを内蔵しているのでAVR側は画像memoryを用意しなくてよい。) 両方の液晶とも、BASCOMから簡単に使える。

 使用した液晶表示器は2つとも共立のデジットにて入手可能である。1つめはTopway社のLM6063CFWで、128 x 64 pixelである。Back-lightのLEDを点灯する方法は+3.3Vで出来、購入時に付いてくるマニュアルを参照されたい。2つめはOPTREX社のDMF5001で、160 x 128 pixelである。DMF5001の液晶表示回路をドライブするためには-18〜 -20Vが必要であり、電源投入順が面倒であるが、後述する回路で解決できる。なお、DMF5001のBack-light LEDは+5Vでドライブ可能であり、+5Vに抵抗を入れて4.1V, 650mAでドライブする。 (Back-lightも入れると、消費電力はけっこう高い。)

 両方の液晶とも、BASCOMからはConfig LCD命令の一種であるConfig GraphLCD命令の系列から制御可能であり、その他の液晶制御命令も使えるので、ユーザーはそれほど苦労することなく、文字表示に加えてグラフィック表示(LINEコマンド等)も行える。これは、BASCOM-AVRが、それら液晶表示器内部にある液晶表示ICへのコマンドをサポートしているためである。これら制御を、例えばgccやPICでやろうとすると、けっこうな手間になり(ライブラリーやサブルーチン関数を作るだけで、相当な時間の無駄になる)、やはり、筆者がBASCOMを採用したのは正解だったと言える。

注:Config GraphLCDでポート定義をする際には、8ビットのデーターポートを一つの同一 I/Oラインにし、制御線も別の同じポートラインにしなければいけない。これはMega128やMega1284のように多数のポートがあるAVRでは容易だが、ポート別のI/Oラインが少ない小規模AVRでは厳しい場合もある。例えば、ATMega168ではPortDの8ビット全てを液晶モジュールへのデーターラインに一括して定義する必要がある。さらに、PortBまたはPortCの同一ポート5本を液晶モジュールの制御線として定義する必要がある。(データー線のポート、および、制御線のポートは、各々、同一である必要がある。)下記の章の回路図参照。

3-1 Topway社、LM6063CFW (128 x 64 pixel):共立デジットにあり。

Topway_image

 LM6063CFWを制御するAVRの回路例を示す。LM6063は3.3Vで動作するので、AVRを3.3Vで動作させて、インターフェースの電圧を合わせるか、またはAVR側が5Vならレベル変換IC(74LCXなど)で合わせてやる必要がある。(例示した回路はAVR自身が3.3V。AVRは内部発振器8MHzで動作。)制御を行ったBASCOMのプログラム例を示す。LM6063はエプソン社の液晶コントローラ(SEDxxxx)を使用しているらしく、BASCOMはそれをサポートしているので、そのことをConfig GraphLCD命令で指定すれば(参考プログラム参照)、後はBASCOMが自動的にいろいろなコマンド(キャラクター表示、LINEなど)をサポートしてくれる。

 このLCDを使用して、実際に学生のFPGA演習に用いたボードの例をこちらに示す。このボードにはgraphic LCD + ADC + DACが乗り、DE0 FPGAボードと40-pin Flat cableで接続することにより、音声信号の処理などをFPGAで行ってグラフ表示できる。 LCDの制御は同ボードに乗っているMega168が行っている。なお、本LCDを制御する例は5章にも別のAVRボードの例がある。

 もう一つの例を以下に示す。

PeltierGLCD

 ペルチェ素子による実用的なデジタル型温度コントローラー(Mega1284によるPWM制御)に使用した例。リアルタイムに制御温度の変化をグラフ表示できるので、温度コントローラーのPID制御設定値における応答がすぐに分かる。写真ではアンダーシュートやそれに続く微小な振動が見て取れる。その後、0.01度Cに制御は落ち着いている。(TとTsの差。詳細はリンクしたページを参照。)このシステムは全部デジタル方式でやるのでアナログ部分が無いため、グラフィック液晶部分を併せても簡易なハードウエアになっている。LM6063CFW はBASCOMでグラフィック命令がサポートされているのでこのようなグラフ表示が必要な用途には便利。(ただし、ドット数は少ないので表示の構成には工夫が必要。)このようなモノクロ液晶は2本以上のグラフをカラー弁別することはできないが、1つだけのグラフ表示に使用する際には、ドット数が少なくてもよい用途には、価格や周辺ハードから見ても最適と思われる。

3-2 OPTREX社、DMF5001 (160 x 128 pixel) :共立デジットにあり。(一辺試作したのだが、ばらしてしまったので、再作成して写真を撮影した)

DMF5001image

 前に作ったDMF5001を制御するAVRの回路図を示す(ABL128による)。また、そのBASCOMのプログラム例を示す。DMF5001の場合は、+5Vと-19V(VCCから見ると、マイナス二十数ボルトで、この電圧で仕様は定義されている。)の電源投入時の投入手順に制限があるように仕様書に記されており、それに基づいて回路設計を行った。回路図上部のリレーを用いた回路がそれである。リレーをドライブするには74HC14では足りないので、小型のPower-MOSFETを使った。(2SK2961:共立にある。)+5Vが立ち上がった後、AVRからGLCDをリセットするLCD_RN信号(負論理)がプログラムで出力され、それをディレイ回路で遅延してリレーをONし、-19Vを供給する。それまでは+5Vを供給。-19Vの元電源は、面倒なので18V ACのトランスを使って100V ACから作成している。回路図の-19V発生部にある2-pinのコネクタにはAC18Vが供給され、半波整流でDCを発生後、LM337レギュレーターでDC -19Vになる。5Vのみで行くなら、絶縁型DC-DCコンバーターの後にLM337もあり得る。
 DMF5001は液晶制御ICに東芝のT6963Cを使用しており、これもBASCOM-AVRでサポートされている。Config GraphLCD命令時に何も制御ICを指定しなければT6963Cが選択されるほど、よくモノクロ・グラフィック液晶の制御に採用されていたICのようである。Config GraphLCDの後は、BASCOM側が全てやってくれるので、ユーザーは関連するBASCOM命令(キャラクター表示、LINEなど)を発するだけでよい。

 再試作した回路、 ATMega168による回路も圧縮ファイルで示す。回路図はEagleで開くことができる(プリント板のボード図は適当。ユーザーで適切に修正されたい。)上記した以前の回路では別にトランスを必要としているが、今回の回路は+5Vから-24Vを発生する絶縁型DC-DCコンバーター回路(今回は共立シリコンハウスにあったTDK-Lambdaのモジュールを使用。Cosel製でも可能。)を使用しているので、電源は+5Vのみでよい。+5V to 絶縁 +-12V -> -24V電源として使い、その後、負電圧レギュレーター(LM337)によって-19V付近の電圧にする。そのボードによって上記の写真の表示を行ったプログラムを添付する。プッシュスイッチS1を押すごとに表示が更新するようにプログラミングされている。BASCOMによる制御の概要については、前のシステムと同様である。p.s. プログラム中のWaitms 300はConfigL Lcdの後に付けた方がよいかもしれない。なぜなら、LCD_RN信号が出力されるのはConfig Lcdを実行した際だと思うので。なお、添付したプログラムのままでもちゃんと動作していたが。
 この例ではATMega168というI/Oポート数の比較的少ないAVRで制御しているので、 その他に使える空きポートが少ないのが難点である(Port-DとPort-Cを使い切っている。)したがって、ADCやその他のポートを使用したい場合は、前記のATMega128や、ATMega1284などの使用が望ましい。なお、液晶表示のテストだけを行ったので、Mega168でも十分であった。

 DMF5001の問題点は、コントラストがあまり付かない点と、画素数が少なくて、グラフの表示解像度があまりよくない点である。(上記写真を参照。グラフは結構ドットが分離しているし、実は、45度以外の角度の線を引くと、あまりきれいでない。) その場合の対応としては、モノクロのコントラストであれば3-1章の液晶や、解像度では以下に述べるカラー液晶の方がよいかもしれない。

3-3 128x64画素のグラフィックOLED(WinStar WEX012864E)のSPIによる制御

 以下の写真参照。3種類の大きさのフォントによる文字表示+斜め直線の描画(曲線やドットも書けるが省略)。OLED画面の上から1番大きな倍サイズフォント、8x8標準フォント、6x8小さめフォントの例が表示されている。
 写真右の基板は共立デジットのAVR ATmega168汎用基板キットのプリント板を流用。それにATMega328(ピンコンパチ)を実装し、3.3Vを外部から印加(白いコネクタ)。汎用基板に配線するより、パターンが元々あるので、試作がすぐ完成するメリット有り(1時間以内)。このP板は、デジットで交渉すれば、基板だけ売ってくれるかも??

GOLED_SPI_Sys

 これまで3章で述べた単色グラフィック液晶は全てパラレルインターフェースである。これだとマイコンのI/O ポートを多数使ってしまい(データー線+制御線で十数本は必要)、I/O ポートが足りなくなることがある。そのような場合、シリアルインターフェースでグラフィック液晶を接続できれば、ポート数をほとんど使わないために、余ったポートでいろいろなことが出来、助かる。
 単色グラフィック液晶を調べてみると、幾つかSPIやI2Cインターフェース可能なものがある。一つはElectronic Assembly社のEADOGM液晶でRS-Componentsにある。もう一つは共立電子:デジットにあるWinStarのグラフィックOLEDである。今回はデジットのOLEDの例を示す。OLEDの方がコントラストが良いが、電源に突入電流が発生するので、アナログ回路が同一基板に有る場合はEADOGMの方がよい。なお、どちらを使ったケースでも、以下の方式は参考になると思われる。
 Winstarの場合は、その制御ICはSSD1305とデジットの資料にある。そのマニュアルをインターネットで探してダウンロードし、WinStar WEX012864Eの制御を推測した。SSD1305にSPIインターフェースであることを認識させるためにはBS2, BS1, BS0ピンに000を与える必要があると、SSD1305マニュアルの17ページにある。以下の写真のように、WEX012864の基板裏側にはゼロオームのチップ抵抗で接続されたJB1HとJB2Hの端子がある(J = Jumper, H = High)。すなわち、WEX012864の出荷時のインターフェースは8080インターフェース(BS2~BS0 = 110, BS0 =常に0)である。これをSPIに変えるには、ゼロオームのチップ抵抗を取り外し、JB1LとJB2Lの端子をショートさせるように再ハンダ付けすればよい(BS2~BS0 = 000, BS0 =常に0)。これでSPIインターフェースに変わる。(なお、別の設定をすれば、I2Cにもできる:SSD1305マニュアル参照。)


GOLED_back

 上の写真にゼロオームのチップ抵抗の場所を示す(既に取り外されて、新しい位置(その左右)にハンダ付けされている)。入手したOLEDは黄色いテープでマスキングされてシルクが読みづらいが、JB1H等が読み取れる。白い矢印の箇所が出荷時のショート抵抗の実装位置(8080インターフェース)。それらを取り外して、写真の位置に再ハンダ付け。(写真で白い矢印の両側に黒いチップ抵抗が有る箇所。ここのシルクはJB1LとJB2Lとなっている。)

 SPIで使う場合のポートピンの詳細はSSD1305マニュアルの18ページにある。それらを参考にした回路図(ATMega328マイコンによる)を以下に示す。 (そのPDFファイルも添付する。)

OLED_SPI_sys

Reset (/Res = PB1)、D/C = PB0、/SS = PB2 ピンは 回路図以外のI/O ピンでもよい。(/SSピンをプルアップしている理由はトップページから回路ページの7-0章のBASCOMの「くせ」の(6)を参照。)

 BASCOMによる制御プログラム例を添付する。 そこで使っているフォントファイルも添付する。一番小さなフォントは6X8で、普通のフォントは8X8で少しスペースが空く。一番大きいのは12X16である。全てテキストファイルなのでテキストエディターで開いて、コメントを参照。 これらのフォントファイルを添付したBASCOMソースは参照している。なお、MCS ELECTRONICSから供給された.FONTファイルを使う手もある。

 プログラムの要点は以下である。普通、グラフィック表示器をSPIインターフェースで使う場合は表示器内部にあるデーターRAMの内容を読めない。(内部RAMはパラレルインターフェースを採用した場合のみ読める。)この場合は文字表示のみを行う場合には問題にならない。ところが、線を引く等のグラフィックスを行う場合には問題が生じる。グラフィック液晶などのコントローラーは8ビットを縦方向に1バイト単位でリードライトしており、この場合、縦方向に1ビットづつ画素を描画していく縦方向のラインの描画では、前の1バイトを再度読み込んで、それにORしてビットセットする必要がある。すなわち、あるセクションの1バイトを読み取れる必要がある。ところが、グラフィック液晶等のコントローラーICでは、それが出来ない物が多い。(EAGOGMの最新型はI2Cでは読み取れる。)というわけで、ソフトウエアで線を描画できない。
 これを解決するには以下の方法を使う。マイコンのSRAM領域にグラフィック表示器のドットのコピーを用意する。そのコピーに対し、新しいドットデーターをORし(表示クリア時には全て0にする)、それを表示器にデーター送信する。これにより、線を文字に重複させて表示させたりできる。詳細は添付したBASCOMソースを参照。なお、今回は128x64 bit のドットデーターのコピーを必要としたので、合計、1kBのSRAM領域が必要。したがって、1kB以上のSRAMがあるマイコンが必要。これがATMega328 (SRAM = 2kB)を使った理由。その他、SRAMが2kB以上あるATMega128やATMega1284等でもOK。なお、線の描画等を行わず、文字表示のみにするなら、上記のSRAMコピー領域は必要がないが、これでは、なぜグラフィック液晶を使うのかの価値が無いかも?(文字表示のみの液晶でよかったんでないの?)注:パラレルインターフェースで接続される場合は、表示器内部のグラフィックRAMを読めることが多いので、上記は当てはまらない(BASCOMでも通常の線描画コマンド等が使える)。あくまでもSRAMがある程度あって、かつ、インターフェース線の本数を減らしたい場合に有効。WinStarのグラフィック液晶でもパラレルインターフェースでは内部RAMを読める。
p.s. EADOGMも最新型ではI2Cインターフェースでは内部データーを読める。
 もし、SRAM容量の少ないマイコン(例:Mega168以下、Mega8515、Tiny2313、Tiny861など)で同様なことをしたければ、Microchip社の23K256(共立やマルツで入手可)を使うと良い。(接続法や制御プログラムは自作電子回路のメインページ(本ページ末尾のTopPageへのリンク)から7-10章を参照。)このICはSPI制御でR/Wできる外部SRAMであり、32kBという十分な容量がある。このSRAMに描画データーのコピーを蓄えておけば、前記と同様のことができる。加えて、RAM容量も多いので、複数の画面を蓄積しておけば、瞬時に画面のページ切替といったことも可能。なお、BASCOMからのアクセスは配列としては認識されないので、別途、配列のアクセスと同様なことができるようなサブルーチンを作成する必要がある。

 その他:OLEDはLED駆動電流をチャージするために頻繁に電源電流に突入電流が発生し、電源線がノイズ的に不利になる。アナログ回路を併用せざるを得ない場合には普通の液晶(例:EADOGM)の方が有利。どうしてもアナログ回路と併用する場合は、OLED側の電源にLCフィルターを入れたり、OLEDモジュール付近の電源ラインに低ESRコンデンサーを挿入する等の工夫がいる。(本ページの5章末を参照。)
 または、アナログ処理のマイコンとOLED表示制御のマイコンを分け、両者間を光でGND絶縁する。(例:フォトカップラーでTX/RXシリアル通信により、そのコマンドによってOLEDマイコンが描画。例2:例1のフォトカップラーの代わりに、光オーディオケーブルとそのインターフェイスIC。(例:東芝TOTX1950等でGND絶縁。この方が高絶縁。)

その他2:ここで例示した制御プログラムをタイマーインタラプトなどのインタラプト処理と併用して使う際に、エラー(OLEDの表示がおかしくなったままになる現象)が出る事がある。解決法の詳細はBASCOMのくせの14節を参照されたい。

目次に戻る

 

(4)カラーグラフィック液晶

 実用に足るだけの解像度や表示能力を得るには、以下の液晶がよいかもしれない。なお、ここからが、少々、ハード的には複雑になってくる。これらのモジュールは画像メモリー(Frame Buffer) を内蔵していない物がほとんどなので、グラフィックRAMは制御側が持たなければいけない。そのため、メモリー容量としてはAVRに搭載するRAMサイズでは間に合わなくなってくるし、画素クロックごとのピクセル出力も解像度が上がるにつれて速度的に厳しくなってくる。(AVR側が、ビデオ制御以外の仕事を何もしない場合にはぎりぎり間に合う場合もあるが、そうすると、他の仕事ができなくなる。)したがって、CPLDやFPGAに画像メモリー制御や液晶表示制御を任せ、AVR側はそれとのインターフェースを取るという手法となってくる。以下ではその例を幾つか示す。

4-1では480x272 dot フルカラー液晶、
4-2では320x240 dot RGB 1-bit カラー液晶、
4-3では800x480 dot 16-bit カラー液晶を取り上げる。

なお、近年、Epsonから5U13781P00C100評価ボードという制御ボードが市販されており、こちらを使った方が安く簡単にできる。5U13781P00C100評価ボードに乗っているカラー液晶コントローラー、S1D13781は480x272までのフルカラー(8-bit x 3)のRAMを内蔵しており、RAMを外付けする必要が無い。試作例は6章にある。

 

4-1. Sharp, LQ043T3DX02 (480 x 272 RBG 各8-bit フルカラー) :高画質表示用

   ColorGLCD_photo

 写真は下記のColor Graphic LCDの使用例。(汎用 NiHバッテリーチャージャー。なお、その資料は添付していない。)カラーグラフにより4つのバッテリー特性を容易に判別できる。 (まだちょっとAVRソフトにバグがあって、図の中央右下に赤と青の余分なドットが出てしまっている。写真は緑色がうまく出ていないが、カメラのせいであり、実際はもっと鮮やかな色である。)

 ストロベリー・リナックスでインターネット通販されているシャープの480 x 272 画素(各 8-bit RGB)をCPLDを使って制御する例を示す。(もともとは、SparkFunなので、共立デジットでも取り扱いをしているようである。)これ用のタッチパネルもSparkFunから販売されているらしい。
注:最近SparkFunから購入した同等品、LQ043T1DG03 を使ってみたが、非常にコントラストが悪い。従来、SparkFunで売っていたLQ043T3DX02は上記の写真のように非常にきれいだったが、型番が少しだけ変わった LQ043T1DG03 では、まったくおかしい。2個買ったが同じだったので、私見では不良ロットに近い。良品であるLQ043T3DX02 の方はおそらく、まだ ストロベリー・リナックス には在庫があると思うので、SparkFunからは買わずにストロベリー・リナックス から入手した方がよい。(2014年11月時点)

 その他、少し視野角に問題はあるが、同等の性能で、より安い液晶の例が6-4章8章(カラーグラフを出すだけならこちらがお薦め。安い!)にある。

4-1-1 方式1 (CPLD + SRAM)

 CPLDは、たまたま手元にあったHuman-Data社のACM-005ボードを使用した。(なお、サンハヤトの感光プリント基板やCPLDに詳しければ、方式2の方が安くできる。ACM-005以外の例として、4-1-2や4-1-3ではデジットで買ったICやボードでやっている。)
このボードはAltera社のCPLDであるMAX-II, EPM240T100C5Nを搭載しており、同等以上の規模のCPLDやFPGAでも同様な制御は可能である。CPLDを使った液晶表示モジュールとのインターフェース部の回路図を示す。参考にそのボードパターン図を添付する。あわせて、それに指令を与えるAVR側の回路部分を示す。(以下、回路図参照。)AVRはMega128の乗った共立デジットのABL128 (Boot-loader 128)を使用している。2つの回路は20-pinのフラットケーブルで接続される。今回はそれほどカラーの種類は必要なかったので、8-bitデーターを上位ビットより、MSB~3bit = R, 次の3-bit = G、最下位2-bit = Bとして使用した。もし、フル24-bit RGBとしたい場合は、回路図にあるSRAMの個数を3個にし、AVR側からのインターフェース信号を増やすこと。(DataラッチとそのEnable信号の数を増加。)また、CPLD(FPGA)も、もう少しピン数の多い物を使う必要があるかもしれない。

 注:回路図の40-pin FPCコネクターの名前は間違っているかもしれない。上側コンタクトと下側コンタクトのサフィックスが。ストロベリー・リナックスからLCD購入時に付属してきたやつは、確か、下側コンタクトだった。初期に設計で想定していたやつと逆だった。まー、LCDのフレキシブル・プラスティック・フラットケーブをプリント板のどちら側に折り返すかの差だけだったので、なんとかなったのだが。

 信号電圧レベルは、AVR側は5Vで、CPLD側は3.3Vなので、インターフェース部にはレベルコンバーター(74 LCX)が入っている。また、液晶モジュールのロジック信号は2.5Vなので、CPLDとの間にレベルコンバーターが入っている。(2.5V I/O voltage入出力可能のFPGAを使うなら省略できる。)液晶モジュールのBack-light LEDは28Vほどの電圧がいるので、Cosel社のDC-DC converterで+5Vから+-15V = 30Vを昇圧し、2SC1815 x 2個を使用した定電流回路によって18mA ほどでBack-light LEDをドライブしている。

 部品の入手先を以下に示す:
LQ043T3DX02 カラー液晶(40-pin FPC コネクター付き)、ストロベリー・リナックス通販
(または、共立デジット)
カラー液晶用、Back-light LEDコネクター、共立電子デジット、黒い0.5mmピッチ4極コネクタを流用。
(なお、添付したボードパターン図では、ピッチはそのようになっていないし3-pin。変更が必要。)
SRAM CY7C1049DV33-10ZSXI, 共立デジット
62.5MHz Xtal OSC (FOX-HC53 62.5MHz), RS-components(共立デジットでもあるかも?)
2.5Vレギュレーター:LM1117-2.5, RS-components(共立デジットにも同等品があるかも?)
DC-DC コンバーター(5Vから30Vへ昇圧):COSEL_ZUW1R50515, 共立電子シリコンハウスやデジット
20 ohm か50 ohmトリマ抵抗、共立電子デジットで探すとある。
CPLDボード(ACM-005-240), ヒューマンデーター社通販
その他、74LCX ICなど、共立電子

 MAX-II, EPM240T100C5Nの設計データーを示す。回路図とVerilogファイルのみを示す。多ビットのD-FF等は回路図を見て、読者側で別途、MegaWaizardで定義し直して欲しい。この構成では、もう少し、いろいろな機能を実装したかったが、この集積規模では、これでLE数が95%ほどまで行ってしまった。 (少し実験的に試作した回路なので、ちょっと汚い。もうちょっとシェープアップできると思うけど、面倒なのでこれで済ませている。)

 AVR側の回路で重要なのは、LQ043T3DX02液晶モジュールには仕様書に示されたように信号線のイネーブル順があり、それを満たすためのインターフェース回路の工夫が必要であることである。回路図の4ページ目にある部分で50ms以上のディレイを作っている部分がそれに相当し、かつ、前述のCPLD回路内部における1msディレイカウンターの部分もそれのためである。

 AVRによる制御プログラムの例を示す。液晶モジュールの方には文字キャラクターROMが無いので、AVR側からキャラクターのドットパターンを打つ。そのためのキャラクターデーター(7x9 dot/ char)はプログラムの最後にデーターとして入っており、Program用Flashにストアされ、LoadLabel(asciic)でアドレスが参照される。(プログラムをBASCOMで読んで、control-FでLoadlableをサーチすれば場所が分かる。)また、Cpeek(addrs)でバイトを取り出す。さらに、アスキー文字列では、Varptr(S)やInp(Saddr)も使用している。また、それらの際にはユーザー独自のコマンドを作成できるSub-module宣言なども使っている。詳細は添付プログラムとBASCOMのマニュアルを参照。

 完成したシステムによる表示の例を上記した写真に示す。今回は、バッテリー充電器を作成する際に充電曲線のカラーによる弁別が必要であったためにカラーグラフィック液晶が必要であった。本液晶モジュールの難点といえば、少々、表示サイズが小さいことであり、そのため文字が小さくて見づらいことであるが、グラフの分解能は高い。(トータル文字数や行数を少なくすれば、見やすい2倍サイズの文字を使う手もある。BASCOMプログラムにおけるLcd_Lprintサブルーチンにその例を示してある。

 p.s. この回路では必要なSRAMの容量より、実は使ったSRAM(CY7C1049DV33-10ZSXI)の容量が2倍多いので、Hは1024までとってある。無駄な分は設計によってスクロールやページ切替などに使える。

 

4-1-2 方式2(方式1をより簡易に設計)

方式1と同様に、より簡単な回路で8-ビットカラー表示する回路とシステムを示す。 (多くは方式1と同様なので、それらの資料も参照) この方式のみ、未試作。(レベルコンバーターを省略できることに気がついた。)
方式1との違いは、方式1では液晶のロジックレベルに対して、レベルコンバーターICを使っているが、方式2ではCPLDのBank2のVCCIOを2.5Vにして、それらを省略している。また、AVRとのインターフェースを少し変えてある。その他のCPLDによる液晶制御部は方式1と同じなので、それら資料を参照されたい。
方式2の方が方式1よりも簡単な回路になり、かなり安くできる。
 AVR側の電源は3.3Vとし、CPLD側のBANK1 のVCCIOを3.3Vにして、インターフェースをとる。

なお、この回路のみ、試作していないが、基本的には4-1と同様な方式であり、動くはず。
また、4-1-1や4-1-3は完動しているので、バグがあると思ったら、4-1-1 or 3の資料を参照。
(4-1-3はSRAMを3回読むが、4-1-1や4-1-2は1回のみでよい。)

試作設計でのCPLDで液晶を制御する部分のEagleによる回路データーを圧縮ファイルで添付する。
CPLD側のQuartusファイルを圧縮ファイルで添付する。
制御法は4-1と同様であるが、AVRとのインターフェースにはSPI IFを使っている。
SPI IFなので、コネクターの本数が少なくてすむ。
注:CPLDやAVRのピン番号は方式1と異なっているので、方式1で添付したBASCOMプログラムのピン番号は変える必要がある。また、パラレルからSPIのインターフェースに変わっている。(下段を参照。)

ハードの概要:
 Altera CPLD (Max-II, EPM240:共立デジットにあり)で制御。
 画像バッファーはSRAM, (Cypress CY7C1049DV33-10ZSXI:共立デジットにあり)を使用。
 このメモリーで2ページ分が取れる。ページ切替も可能かと思う。

液晶のバックライト電源は+5VからCoselの+-15V DC-DCコンバーターで作る。
トランジスターで定電流回路を作り、18mAほどを供給。

液晶のロジックレベルが2.5V系なので、CPLDのBANK2のVCCIOを2.5Vとする。
BANK1は3.3VのAVRと接続するので、VCCIOを3.3Vとする。
CPLDのIOB1-2ピン入力は、パワーオンリセット遅延をつなぐので、
シュミットトリガー指定をする。

2.5V電圧の発生はLP38691DT2.5(マルツ)を使ったが、このICの3端子ピンは入出力逆なので、
他の2.5V IC(たぶん、デジットにある)を使った方がよいかもしれない。

水晶発振器は表面実装の62.5MHzを使った(RS-components)が、
普通の60MHz近辺のやつでも可能と思う。

CPLDはSV2コネクターの信号でAVR (Mega168, 328, 128, 1248など)とやりとりして、
AVRからの表示命令や画素ドッのSRAMへの書込を制御する。

CPLD設計データー:
 設計データーは上記に添付したが、その方式は上記4-1章のMAX-II, EPM240T100C5Nの設計データーと同様なので、それも参照。なお、ピン番号は異なる。(Eagle 回路図を参照)Bank別でインターフェース電圧(3.3V or 2.5V)を変える必要有り。(液晶側は2.5V、AVRインターフェース側は3.3V)
 方式1でのAVRとのインターフェースはパラレルでやっているが、方式2ではSPIを使うので、そのように書き直す必要がある。なお、方式3もSPIでやっているので、その資料も参考になる。
 設計はQuartus II 9.1で行った。シミュレーションが容易なため。
 Quartus II 11.0でもコンパイルできる。(シミュレーションは少々面倒。)

AVR側ファイル
 制御等を行うAVRボードの例を圧縮ファイルで添付する(Eagle project)。
 また、そのプログラム(BASCOM)をColorGLCD_Sharp_SPI_IF_tst1.basとして添付する。
 なお、これら2つは、参考例であり、実際に動作確認はしていないので注意。

 

4-1-3 方式3(フルカラー化)

 CPLDと少し容量の多いSRAMによって、24ビット・フルカラー化 (きれいなフォトフレーム)

24bit_image1

 上記のシャープの液晶は、RGB各8ビットの入力があり、24ビットフルカラー化が可能である。
その例を以下に示す。この方式は試作してある。サンハヤトの両面感光基板で作成。
上記の写真では、ぼけているが、実際は非常にシャープで、色もきれいであり、視野角も広い。
(画質を重視する向きには、後述のパチスロ液晶より良い。)

全ての設計ファイル群を圧縮したファイルを添付する。その各フォルダー内部のREADME.txtを参照されたい。

 方式は、各8-bit RGBデーターのために、画像表示をするのに、ある程度大容量の高速SRAMを3回読み、ラッチ(R,G,B)。余った時間でSRAMに画像データーを書き込む時間を確保する。画面のハードウエアによるクリアは、これまでの方式と違い、RD address(画面スキャン)のアドレスを使い、その間にSRAMのWE信号をイネーブルする。(CPLDのゲート数が満杯に近かったので、この方式を用いた。)

 この方式で、きれいに24-bit フルカラー画像(いわゆるフォトフレーム)を表示できる。

 なお、今回の設計ではcy7c1059という1MB SRAMを使ったが、cy7c1049という下の容量(512kB)を使っても試作できる。cy7c1059へのアドレッシングは{Y-address, X-address}というシフト演算による合成であるが、480 x 272では512x512分のメモリー容量が必要になる。それに対し、Y-address * 480 + X-addressといったかけ算と足し算によるアドレス生成をすれば、480x272分のメモリー容量で済む。これにより、より小さなサイズのcy7c1049 RAM 1個でも足りることになる。そのためには、添付したCPLDの設計ファイルのVideoCtl.v のassign RD_Addr = の部分を積和型に書き換え、AVR側のBASCOMプログラムのLcdpsetサブルーチンにおけるシフト演算によるアドレス計算を積和計算に変えれば良い。これにより、安いメモリーでフルカラー化も可能。(この場合、システム構成はほとんど前章の4-1-2章と同じであり、実は4-1-1章や4-1-2章のシステム構成でフルカラー化が可能であったことが分かる。)

その他、4-3-3章にあるように DE0-nanoボードなどを使う手もある。(4-3-3章を参照して、それを変更すればOK。)DE0を使えばRAMは大量にあるので、多数枚の画像を蓄積しておける他、各種のグラフィック処理も任意にハード化できる。

また、6章にあるように、Epsonのコントローラーを使う手もある。(その場合は480x272では1枚の画像のみ。)6-3章にEpsonのコントローラーを使用して実際に制御した例を追加しておいた。

 

目次に戻る

 

4-2. Kyocera, KCG047QV1AE (320 x 240 RGB 各 1-bit) :カラーグラフ表示用

KCG_image

かなりバグがあり、その他にもバグがあったので差し替えました。(全ての回路は実際に試作し、動作を確認しました。) 

 共立電子デジットで売っている京セラの KCG047QV1AE(320 x 240 RGB 各 1-bit)を制御する構成について述べる。このモジュールはタッチパネルも実装されている点が4-1の液晶モジュールよりもよい。しかし、解像度は4-1より低く、RGBの濃度もRGB各1ビットしかない。なお、共立電子デジットで購入する際にはその他の部品(バックライト点灯用の陰極管放電電源や特殊コネクタなど)も購入する必要があるので、店の人に聞くこと。

 この液晶モジュールの画素構成法は少し変わっており、Pixel Clockでラッチされる最初の8-bitは第1画素のRGB 3-bit + 第2画素のRGB3-bit + 第3画素のRG 2-bitより成り、次のPixel Clockでラッチされる8-bitは第4画素のB 1-bit + 第5画素のRGB3-bit + 第6画素のRGB 3-bit + 第7画素のR 1-bit、以下同様、より成るという、少し変則的なマッピングとなっている。(3 x 8-bitを経由すると最初に戻る。)

 この液晶モジュールは、AVRのみでも表示できるようで、店のデモでもATMega168で表示をしていたが、AVRにその他の仕事もさせようとすると、ちょっとしんどそうなので、液晶モジュールを制御する部分をCPLDやFPGAで設計してみた。このモジュールは画像メモリーを持っていないので、外部にメモリーを置く場合は、メモリー(32kBまたは64kB)の読み書きを制御する必要がある。内部に同等のRAM容量のあるFPGAの場合は、内部メモリーを使用できるので、メモリーインターフェスの設計は軽減される。

 メモリー容量を32kBで済ますには、アドレッシングA を A = (Y * 240 + X) * 3 / 8とする(演算はCPLDやFPGAで簡単に出来る)。それと異なり、Xを0〜511、Y = 0〜255とアドレッシングすると、 512 * 256 * 3 / 8 = 49kBほどとなって、64kBのRAMが必要になる。どちらを選択するかは設計次第である。今回は入手の容易な32kB RAM仕様で設計した(SRAMはデジットにある)。

4-2-1 CPLDによるインターフェース (CPLD + 32kB SRAM)

 CPLDによる設計例を圧縮ファイルで添付する。各フォルダーのREADME.txtファイルを参照。 テストするBASCOMファイルも入っている。

32kB外部SRAMを使った例を示す。設計では、使い慣れたAltera Quartusで行ったため、MAX7000シリーズCPLDのEPM7128SLC84-15(デジットにあり)を使った回路を示すが、同等で入手製の良いXilinks XC95108でも同等の事が出来ると思う。外部RAMとしては、例えば、日立HM62256 (256-bit = 32kB、80 ~ 120 ns access time)で可能であり、日本橋ではデジット、トーカイなどで入手できる。CPLDの設計図で、RAMという部分の付いた信号、および、oen, wen 信号がRAMに接続される(n はnegative logic = 負論理の略号)。その他はAVRと液晶表示器への信号線である。4-2-2のようにFPGA (今回はCPLD)側で3ビットを8ビット中から抽出してくれるような設計ではないので(4-2-2のようなメモリー構成が24ビットでなく、8ビット構成なので少々無理がある)、8ビット中のどの位置に設定したい3ビットがあるかは、AVR側のソフトで判定しなければならない。AVRとのインターフェースはSPIであり、信号線数を減らしているので小さなAVR(例、ATMega168)でもインターフェース可能である。 CPLD側の回路図でパターンが通っていない丸い部分は液晶取り付けネジのスペースである。

 AVR側からの制御はAVRボードで以下のように行う。まず、書き込みたいアドレスを算出し(上記のように8-bit中にRGB 3-bitが埋め込まれている。その8-bitデーターの アドレス[A = (Y * 128 + X) * 3 / 8]を求める)、それをSPI I/FでCPLDに設定。Busy線がHになるまで待つ。その後、SPI I/Fでデーターを読み込む。その8ビットデーターの中に、設定したいRGB 3ビットを埋め込み直し、SPI I/FでWriteする(書き込まれたかはBusy線がdis-assertされたかで分かる)。これで、所望のRGB 3ビットがRAMに書かれる。CPLDは、別の並行プロセスでRAMデーターを液晶に表示転送しているので、RAMに書き込めば表示に反映される。 BASCOMプログラムの例では、PCよりHyperterminal経由でABL168ボードにUSBシリアルインターフェースでコマンドを送り、テストを行う。この方法は自作電子回路のページの(7)章、7-1章、1-3節(USBインターフェースから命令文を受け取る方式)で概要を述べてあるので、そこを参照されたい。

 AVRボードは下記のFPGAによるものと同じ物を使った。(コンパチで使用できる。)タッチパネルの読み出しは、下記のFPGAに対するBASCOMファイルの、タッチパネル部分を参照されたい。 添付したAVRボードの回路図では、タッチパネル端子に与える電圧のスイッチにMP4212というMOS-FETモジュールを使っているが、MP4212は入手が困難になりつつあり、代替えとしてはN-PハーフブリッジPower-MOSのようなICが使える。共立にあるSP8M4(ローム社)というICを2個使えば、MP4212を代替えできる。また、RS-Componentsでは、IR社製などに似たようなモジュールがたくさんある。

 

4-2-2 FPGAによるインターフェース (Frame-bufferをFPGA内部のSRAMで済ます方式)

 前回の資料では、けっこう、バグがあったので、この新しいバージョンを参照されたい。リンクファイル等も大幅に差し替えた。(ファイル名が同じでも内容が変わっている物が多い。)やっぱり、ちゃんと試作しないといろいろな見過ごしがあるものだ。(すいません。) 

 まず、全てのRAMをFPGA内部のSRAMで設計した例を示す。回路ではAlteraのCyclone IIIの一番小型のFPGA, EP3C5E144C8を使用した。(Cyclone IIの小さなやつではメモリー容量が足りなかったため。)RAM部はFPGA内部にあるので、設計は楽である。FPGAチップはDigikeyより購入したが、それほど高価ではないため、コストパフォーマンスはそれほど悪くない。(その他の部品はRS-componentsより入手可能。)なお、144ピンをハンダ付けするのが結構厳しい向きには、FPGAボードモジュールをHumanDataから購入する手もあるが、少々、高価かもしれない。FPGAチップのみで作成する際の回路図を添付する。Cyclone-III FPGAはDigi-keyより入手。


 このボードは価格的にはコストパフォーマンスは悪くないが、試作はいろいろ大変なので、簡単に液晶を制御するには、4-2-1の方法を勧める。4-2-2の方法は、制御部の回路面積を小さくしたいときのみ有効と思われる。

 実は、このボードの試作にはけっこう苦労した。下写真はそのボード。初期の回路図にバグがあったり、電源ラインを強化したり、後述の苦労をしたので、いろいろジャンパー等がはっている。

KGLC_photo1

 裏面の写真を示す。両面感光基板を使ったので、GNDの結線を強化してある。

KGLCD_photo2

 さらに、問題だったのは、上の写真の中央部(その裏側にFPGAがマウントされている)に大きなドリル穴があるように、このFPGAのICパッケージの裏にはGNDに落とさなければならないパッド(ICの裏に銀色の4角電極)があり、それをGNDにつながないとFPGAが正常に動作しない(写真では黒い線でドリル穴を通してGNDベタパターンから奥の銀色のパッドにハンダ付けがある)。これは、使用したCyclone-III E144パッケージに特有な配線で、Cyclone-IIのほとんど類似のTQFP144と異なり裏面パッドが存在し、放熱のためではなく、GND接続が必須なため。すなわち、上の写真、および添付したEagleのパターン図にあるように、最初にP-板に5〜6ミリの穴を開けておいて、そこからGND線をそのパッドにハンダ付けしてやる必要があることだ。これが分かるまでは、けっこう苦労した。なにより、FPGAにUSB-blasterから書込が出来ないという症状が出たから。(FPGAが死んでいるかと思った!)そのため、無用にGND強化線をはわせたり、ジャンパーのトライや無用な保護ダイオードの配線をするはめになってしまった。 IC裏面のGNDパッドの存在は、マニュアルのごく一部に、それとなく書いてあるだけなので、最初は放熱パッドかと思った!

 

 全体のシステムとしては、AVRと14-pinコネクターを通してSPI I/Fで通信を行うことにより、少ない信号本数でキャラクター表示やグラフ表示を容易に行うことが出来る。AVR側からインターフェースするボードの回路例を示す。BASCOM側のプログラムを添付する。FPGAボードへのインターフェースでは8ビット中の下位3ビットのみが有効画素(RGB 各1ビット)に対応するよう、設計されている。アドレス設定レジスターは A = Y * 240 + X として設定する(そうしないと大きいRAM容量が必要になる)。AVR側は、必要なドットをアドレッシングして設定した後、単にRGB3ビットを書き込めばよい。(クリアするには&B000を書けばよい。)FPGA内部のRAMは24-bit幅構成になっており、そこからFPGAが画素に対応する3-bitを抽出してくれるような回路になっているので、AVR側は8-bit中の3-bit RGBの位置を気にしなくてよい。

 液晶に付いているタッチパネルの駆動や読み取りは、上記のBASCOMファイルとAVR部の回路図を参照されたい。MP4212というPower-MOS H-bridge ICをうまく使うことで、タッチパネル電圧がうまく読み取れるようになっている。 (MP4212(東芝製)は製造中止で入手困難になりつつある。代替えとしては、共立で売っているSP8M4(ローム)を2個使う手がある。)

4-2-3 AVRとSRAMのみで安く済ます方法

 せっかく低価格で売られているので、アマチュア的手法ではあるが、安くドライブ回路を作成する方法を考えてみた。

 概要:4-2-1や4-2-2とは異なり、LCD表示中に邪魔せずに画素書き込みはできないが、アマチュア的に使う場合は一旦,表示が途切れてもかまわないなら、以下の方法で安くできる。

[1] Mega1284 + 32-kB SRAM + TTL2個による方式(試作済み)

 回路図をPDFで添付する。その制御プログラム(BASCOM-AVRで記述)を添付する。このプログラムをAVRに書き込むと、SW1を押すごとに表示が切り替わる。表示の機能を制限すればフリーのBASCOMでもコンパイルできるかもしれない。外部から制御する際は、SWセンス部分の代わりに外部制御ルーチンを挿入すればよい。

 回路図を見てもらえば分かるように、表示制御回路の構成はATMega1284、SRAM(HM62256-10、32kB SRAM、デジットにあり)、その他、ありふれたTTL2個のみである。これでLCDに種々の画像表示を行うことができる。おそらく、前記の方法と比べ,一番安くできる。前記の方法ではCPLDやFPGAの書き込み器を購入しておく必要があるが、本方式ではBASCOMのみがあればよい。また、電源も+5Vのみなので、安いAVRの書き込み器のみでよい。

 ATMega1284は4つの8ビットポートの入出力があり、それらのSPI書き込みラインで占有されたポート以外をフルに使用する。キーポイントはPortAに出力するデーターをSRAMの下位アドレスビットとLCDのピクセルクロック=PCKとして使用することである。PortAのLSB=PortA.0は画素クロック=PCKとして使用し、PortA.1~7をSRAMのアドレス A0〜A6に割当てる。PortAを+1づつインクリメントしながら出力するとPCKのパルスが高速にトグルでき、自動的にSRAMへのアドレスも進む。使用したKCG047QV1AEのCP入力(PCK)は約2MHz = 500nsほどで出力する必要があり、Mega1284のCPUクロックに20MHzクリスタルを使って、アセンブラ命令を使用すれば十分に間に合う。アセンブラ命令はBASCOMで「$asm」と「$asm end」で挟み込むと,その中に記述できる。(添付したプログラム参照。)このようにしてPortAのデーターをインクリメントしてPCKとSRAMアドレスの下位アドレス(A0〜A6)を2MHzほどで更新できる。上位アドレスであるA7〜A14は水平ラインのスキャン開始時にPortAの値を74LS374にラッチしておいて、一つのH-lineでは更新せずに固定して使用できる。これは、使用したLCDの画素構成が320x240で、水平方向のバイト数が320x3/8 = 120 < 128、垂直方向が240 < 256となっているためである。すなわち、水平方向には7-bitのアドレス、垂直には8-bitのアドレスビットがあればよい。また、これより、32-kBのSRAMでよい。PCKビットはPortA.0を使用するが、そのビットは、タイミング的にLoadパルスを与える場合などには、1にホールドしておく必要がある。(PortA.0からインバーターがPCK出力までに入っているので、PortA.0=H=1ならPCK=Lとなる。)ところが、A7アドレスビットへのラッチ(74LS374)の入力はゼロをセットしなければならない場合もあり、このためにPortB.1ポートでPCKをLにできるようにしてある。 PortB.1 = L なら、PortA.0の値がどのような値になっても74LS00のゲート回路でPCKはLのままに保たれる。

 PortCはSRAMデーターのR/WをAVR側から行う8ビットポートである。なお、画像表示期間においてはConfig PortC = Inputとして入力ポートにして、SRAM出力とは衝突しないようにしておく。(同時にSRAMの/RDや/WRもソフト的に適時切り替える。)SRAM(VRAM)に書き込む際には、Config PortC=Outputとして出力に切り替える。

 その他のLCD制御信号(Load, FRM)はソフト的に適当なタイミングで出力する。VRAMに書き込む際は表示が乱れるので、適時、DISP制御線をON/OFFするとよい。(添付したソフトを参照。) ただし、DispをONにする場合に、表示までに少し時間遅れがある(LCD側の特性)。
 その他、回路図に記載されたSW1〜SW3は上記したソフトにおけるテスト用であり、外部のメインCPUからMega1284基板を制御する場合は必要がない。これらの余ったポートはメインCPUとの通信制御等に使用できる。 前記したサンプルプログラムではこれらのスイッチを押していくとグラフィック表示がいろいろ出るようになっている。

 本システムの外部との通信は以下による。一番簡単なのは、USARTのTXD0/RXD0を利用したシリアル通信であり、そのためのピン確保と3ピンコネクターへの接続を付けてある。TXD/RXDによる通信が遅すぎる場合は、SPI I/Fを利用すると良い。/SSピンにつながっているテスト用のLEDを外し、スレーブモードのSPI I/Fを使用するとよい。なお、TXD/RXDのシリアル通信でも、あまり高速に更新データーが来ない限りは、VRAMのデーター更新はMega1284側で行うので、十分な性能が確保できると思われる。その他、タッチパネルの読み込みは外部の別のメインCPUが行なえばよい。あくまでもMega1284はLCDのドライブ部分であり,前記のCPLDやFPGAの代わりを行う部分である。

 実際にUSARTによるシリアル通信を行ってみた。やってみると以外と面倒な対応が必要であったので 、以下に参考資料を添付しておく。 液晶表示制御部分は上記に述べた基板そのものである。それをスレーブとし、以下のMega168で作成したメイン基板からTTLレベルのRS232Cインターフェース(TXDとRXDしか使わない)を経由して制御する。Mega168によるメイン基板の回路図を添付する。メイン側のBASCOMプログラムを添付する。また、メインからの制御に対応した スレーブ側のBASCOMプログラムを添付する。
 通信のためには、まず、メインとスレーブ間を3本の線(TXD, GND, RXD)でつないでやる。その際、クロス結線でつなぐ。(メインのTXDとスレーブのRXDを、メインのRXDとスレーブのTXDをつなぐ。)なお、2つの回路図にある3ピンコネクターの同一番号どうしをそのままつなぐと,クロス結線になるようになっている。接続後、メインとスレーブの電源を入れ、メイン側の文字表示液晶に”Open COM test”という表示が最初に出てくるので、 メイン側のSW2押しボタンスイッチを押す。もし通信が確保されたなら、ACKという応答が返ったことが液晶に表示される。(返らない場合は、10秒後にTime-outという表示が出る。)パワーオン後は一度はこれをやっておくこと。通信が確保されたので、以後はメイン側のSW1スイッチを押して行くとモードが切り替わるので、そこでSW2を押すと、それが実行される。具体的にはメイン側からRS232Cでコマンドがスレーブ側に伝達され、スレーブ側で実行された後、メイン側に"ACK"という応答がRS232Cを経由して返る。 どのような機能があるのかは添付したプログラムを参照。
 この方法で難しかったのは、パワーオン後にはシリアル入出力のバッファーの値が不定になっており、メインとスレーブのどちらが先に立ち上がるかによってうまく通信の接続が起動しない場合があったため、プログラム上、いろいろ工夫を要したことである。また、スレーブ側は普段はカラーグラフィック液晶の制御に手一杯なので、RXDラインを取り込む暇がないため、BASCOMにあるBuffred INPUT (Config Serialin ... で定義)を指定する必要がある。指定後、Enable Interruptsとして、シリアル入力に1文字くるごとにインタラプトで入力バッファーに取り込む。 Config Serialinとした場合の入力バッファーのクリアはBASCOMのClearコマンドで行う。
 メイン,スレーブともPrint文でシリアル出力するが、そのバッファーにはパワーオン後にはゴミデーターが入っているため、それらを吐き出す必要もある。また、メイン側の入力バッファもゴミが入っているので、パワーオンスタート後に吐き出しておく。(Inkey() のある部分がそれ。)
 もう一点、Mega168によるメイン基板の回路図を見るとRXDとTXDの回線に基板から出る前に74LS04が入っている。この回路は重要で、もし、直接、メインのMega168のTXD/RXDをスレーブのM1284のRXD/TXDにつなぐと以下の不具合が出ることがある。74LS04の無い場合でも、Mega1284とMega168のパワーオンが完全に同時であれば、ほとんど動くことが多い。ところが、当方でメインとスレーブの電源に別電源を使って実験をしていると、Mega168基板の電源が立ち上がっていて、Mega1284基板の電源を後で入れた場合、デッドロックする現象が見られた。その際、Mega1284基板へは通常の100mA以下の電流(液晶モジュールへの電流供給を含む)ではなく0.5Aという大きな電流が流れていた。この原因は、AVRを構成しているCMOSのラッチアップ現象である。このようになるとパワーオン後に正常にスタートせず、シリアル通信も開始できなくなり,全体のシステムがデッドロック状態となる。なお,ここでスレーブのリセットスイッチを押してやるとシリアル通信もできるようになるが、電流値は0.5Aから下がらない。すなわち、内部的にもどこかでラッチアップしている。このような状態では、いつかはICが壊れてしまう。以上より、CMOS ICであるMega168とMega1284の入出力を直接つなぎ、電源の投入順に時間差があるのがまずい。(同一電源とした場合でも、基板が分かれていてそれら基板のコンデンサー容量や電流消費量が異なる場合などに、2つのCPUの電源印可立ち上がり時間に遅れがあるような場合は,問題が発生する。)この問題を解決するには、異なる電源立ち上がりの生じるCMOSの入出力どうしを直接つなげずに分離することである。そのために74LS04という、CMOSではない、それほどドライブ能力が大きくない、TTLが分離バッファーとして入っている。これによってラッチアップやデッドロックの問題は解消された。

 以上より、4-2-1や4-2-2章の方式と比べて外部とのインターフェース性能には少し限りがあるものの(画像表示を邪魔せずにデーター入出力ができない)、KCG047QV1AE本体の価格以下で汎用的なグラフィック表示基板が作成可能である。このシステムの要点は、安い構成で、いかに高速にビデオ制御信号と同期して画像データーを高速出力するかである。(制御信号と同期がとれないと,ダメ。) なお、4-1章や4-3章のような、より高速なビデオデーター出力が必要なものではこのような方式は無理。

[2] その他の考えられる方式:

 AVRとSRAMのみを使うその他の方式としてはこのようなものもある。AVRのMega128(例:デジットのBoot-loader128ボード)やMega8515(デジットにICあり)は外部SRAMインターフェースを持っており、それへのRead アクセスを定常的に起こすことにより(BASCOMでアセンブラー記述が必要かも?)、LCDへのビデオデーター出力を得るものである。ただし、設計のみ行っただけであり、上記のMega1284の方が簡単であるためそちらを先に試作したので、この方式は試していない。(回路図にバグがあるかも?)なお、VRAMデーター書き換えへのR/Wはこちらの方がハード的にサポートされているので高速。価格は前者よりは少し高い。
 もう一つの方式としては、ARM M4を使う手もある。評価基板はそこそこ安く(前記よりは高い)、CPU内のRAM容量もM4では32kB以上ある。ただし、制御は結構複雑かもしれないのでチャレンジになるかも。(筆者は、この基板をLCD制御のみに使うのはあまりにもったいないので,試していない。YouTubeなどには似たようなシステムでのデモ動画もあるらしいが、他の制御も行わせるとインタラプトやDMA制御等の扱いが複雑で、データー入出力や他の制御に対する余裕が無くなる可能性有り。単にデモ的に液晶表示をさせるだけならよいのだが。)
 最後に、後述の6-3章に述べているEpsonの液晶ディスプレイコントローラー(十分な容量のSRAMを内蔵)の利用もあり得る。こちらの方がARM M4よりはシステム構成上は良いと思う。(もったいない部分が無い。)ただし、やはり、本節の方が作りやすくて安いかも。(なお、量産品ではEpsonの方が良い選択と思われる。)

目次に戻る

 

4-3 共立電子・デジットで売っているパチスロ液晶 :高解像度カラー

 高解像度で、カラービットも多い(800x480 dot, 各ドット=RGB総合16-bit)。かつ、安い!

注:どうやら、この液晶は品切れになってしまったみたい?このサイズや画素数を買うなら、AITENDOにある可能性が高い。ただし、ピン番号は異なるかも?
表示をFPGAダイレクトではなくAVRを介して行い、かつ256色でもよい際は6章8章の方が安くできる。(FPGAダイレクトよりは少し遅い?)

Pachi_image0

写真で見ると分かるように、データーのグラフ表示には高解像度・大面積もあって、非常に向いている。
(写真は少しピンぼけだが,実際はくっきりしている。)

Pachi_image1
図形表示の例。(FPGAによる制御の場合(後述)は図形描画はハード化されているので高速。)

Pachi_Image2
フォトフレームの例。

PTCAnal
自作ロジックアナライザーに利用した例。

 ジャンク液晶でも800x480という高解像度で、16-ビットカラー表示の出来る液晶を制御する例を示す。
 メリット:コスト・パフォーマンスが高い:低価格で高性能を得ることが可能。 なお、少し低視野角。
 16-bitカラーで、フォトフレームにもけっこう使える。(上記写真) なお、16-bitでもカラービットが少し不足するので、疑似輪郭が出てしまうが。(基板のパターンカットをすると6x3=18-bitまで可能。)

このパチスロ液晶のデーター(推測)を添付する。デジタル系のドライブ信号は シャープの液晶にコンパチのようであるが、液晶モジュール自体は台湾製でもあり、少し性能が低いかも(比較して、低視野角、低コントラスト)。 しかしながら、通常のアマチュア用途には十分と思われる(上記の写真参照)。

 

 以下に、液晶を製御する3方式を紹介する。

4-3-1 方式1: 簡易型。作りやすく、安定動作。(CPLD + SRAM)

CPLD (MAX-II)で制御した例を圧縮ファイルで示す。 詳細は、各フォルダー内のREADME.txt等を参照。
カラーグラフや文字を表示するのに十分な8-bitカラーを行う方式。上記の写真の上2枚まで可能。サンハヤトの両面感光基板で作成。 この方式は比較的簡単に作成可能。図形表示はハード化されていないので、AVRマイコン側で処理し、ドット描画でSRAMに書き込んでいく。
 部品の入手先を以下に示す:
液晶: 共立デジット
SRAM CY7C1049DV33-10ZSXI: 入手先=共立デジット
CPLD (MAX-II)、型番は上記の圧縮ファイルを参照 : 入手先=共立デジット

 

4-3-2 方式2: FPGAによる制御。作成は少し難しい。 (FPGA + SRAM)

Cyclone-IIで制御した例を圧縮ファイルで示す。
上記の写真3枚とも可能。(フォトフレームも可能)
なお、このボードの試作は非常に苦労したので、もし予算があるのなら、次節の資料にあるDE0-nanoによる方式の方がずっと楽である。 (なお、大量生産するには本方式の方が安いかも。)このプリント基板は外注で作成。(FPGAの実装下部にスルーホールが幾つかあり、感光基板ではちょっと大変。(スルーホール配線の厚みでFPGAが浮き上がってしまう。))
 方式2と3ではグラフィクス(線や円)の描画はFPGA内にハード化されており、方式1より高速に描画される(方式1ではAVR側がピクセル描画を一点ずつ行う)。詳細は添付資料を参照。
 部品の入手先を以下に示す:
液晶: 共立デジット
SRAM CY7C1049DV33-10ZSXI: 共立デジット
FPGA (Cyclone-II) : 共立デジット

 このボードはなかなか動作が安定しなかったが、EP2C5T144の足ピン配置で初期のボードを設計したため、EP2C8T144で必要なVCCINTとGNDの合計4本が未接続であるためと思われる。EP2C5T144では信号入出力である以下のピンがEP2C8T144では電源線となっている。(27, 80 = GND、26, 81 = VCCINT)

 

4-3-2-2 上記と同じ方式ではあるが、より作りやすい方式を別章(XMegaのBASCOMによるプログラミングの3章)に示す。(この方式ではFPGAのプリント基板をおこさずに、全てユニバーサル基板で作っても動作する。ただし、少々高くなる。)そこで述べている方式の特徴としては、本ページの4章に述べてある円の描画(BASCOMが一部、sin(delta theta)などの計算を肩代わりしている方式)を全てハード化したことである。詳細はその章を参照されたい。なお、そこでのインターフェースはパラレルでやっているが、ポート数の少ないAVR用に本ページにあるようなSPIシリアルに設計し直すことも可能である。(その設計は読者に任せる。)なお、そこでの方式では使用したFPGAボード(ACM301)の入出力引き出しピン数に限りがあるため、カラービットの深さは8ビットであり、フォトフレームは無理である。(主に、グラフィックスやグラフ表示用に使用するのがよい。)

 

4-3-3 方式3: DE0-nanoのみで制御。作成は容易。(FPGAボードのみ:SDRAM搭載)

DE0-nanoで制御した例を圧縮ファイルで示す。詳細は、各フォルダーのREADME.txtなどを参照。
DE0-nanoボードと共立デジットのBoot-loader-M128ボード(ABL128)を使った例である。
当然、Cyclone-IIと同等以上のことが出来る。(上記3つの写真とも可能。16-bitフォトフレームも可。(液晶モジュール自体は6-bit x 3 RGBなので、パチスロ基板内のGNDへの接続2箇所をカットするなら、18-bitカラー化も可能。))また、使用する液晶を24-bitフルカラーのもの(4-1章)を使えば、さらにきれいなフォトフレームを簡単に作成できる。(なお、その際はFPGAの設計に修正が必要。)
この方式では、ユーザーはほとんどプリント基板を起こさなくてよいので、作成は容易である。(AVR側の部分はABL128ボード、ユニバーサル基板、サンハヤトやダイセンの変換基板で完成。)

画像バッファーメモリに使用するSDRAMの制御はけっこう面倒なのだが、添付したQuartusファイルをそのままQuarus-II ver.11(フリーのWeb-Edition)でコンパイルすればよい。(設計の詳細は圧縮ファイルに添付されている。)
 部品の入手先を以下に示す:
液晶: 共立デジット
DE0-nano: 共立デジットまたはシリコンハウス


以下の写真にシステムの概観を示す。

nano?phot0

全体の構成写真。一番上の基板=サンハヤト・ユニバーサル基板上にデジットAVR基板(boot-loader 128)+その他(スイッチ、SD-Cardスロット、5V to 3.3V ロジックレベル・コンバーターICなど)。
真ん中=DE0-nano基板。一番下=デジットで売っているパチスロ基板から不要なICを取り外したもの。
非常に簡単なシステム構成でこれが出来るところがメリット。(ただし、DE0-nanoの代金がかかるが。)

nano_photo2

上の写真は、いわゆる、フォトフレームを実現した例。

nano_photo3

DE0-nano部分。2つのGPIOでAVR基板とのコミュニケーション、液晶とのインターフェースを、各々、行っている。 詳細は添付資料を参照。

 このDE0-nanoを使った方式は、測定装置の自作の章で自作ロジックアナライザーの波形表示に利用されている(下の写真)。100MHz sampling, 64k点の高速SRAMはDE0-nanoの内部に余ったSRAMを使う事で簡単にできる。

WComp

 

目次に戻る

 

4-4 技術評価

 以下に現時点での4章に採用した方式の評価をしてみる。これは技術屋には重要なことである。

 前記の4章で採用したCPLDやFPGAを使用した方式の短所、長所を論じる。
 ARMやXMega等の高性能CPUを使用した制御方式とも比較する。

4章のシステムの長所・短所

0. 長所:SPIインターフェースで少ないAVRピン数で、簡便に制御可能。

1. 画像のような大容量データーを転送する際に、遅い。
 これはSPIインターフェースを採用したことが影響している。AVR側のポート数に余裕があればパラレルインターフェースにより改善される。なお、現在、フォトフレームの速度制限をしているのは、SDCカードインターフェース(single-line SPI)読み出しの遅さであり、SDHCに加盟してそのインターフェース規格(parallel)を使用すれば、より高速化が可能と思われる。(大学では無理?なぜなら、フォーラム(有料:メーカ向け)に参加する必要があるから。)
 SPIについてはXMegaや一部のARMにあるようなDMA方式もあるが、フォトフレームに関してはSD-Card読み出しがボトルネックになっているので改善はほとんど無い。また、SPIインタフェースはコマンドやデーターの送信にランダムに使っているので、必ずしも高速化のメリットは受けない。
 SD-Card媒体以外に、ATA-HDDがあり(AVR-DOSでもサポート)、その場合は、基本的にはパラレルなのでもっと高速になると思われる(でも、システムサイズは大型化!)。なお、USBに関しては検討していないが、これも、ダイレクトにアクセスできれば(仮想COMポートでない)、改善があると思われる。
 その他、ファイル読み出しにはAVR-DOSを採用しているが、ここが遅い可能性もある。ARMのDOSシステム(Linux etc.)を採用し、その画像ファイルの読み出し・再生方式を採用すれば改善する可能性はある。(32-bitの方が高速なため。および、クロック周波数やRISC命令等の差。)

p.s. 筆者はフォトフレームを作るために4章のシステムを試作したのではなく、 あくまで、そのシステムに付随した遊びの要素のためであることを付記しておく。(ちゃんとしたフォトフレームを目的とする場合は、一からアーキテクチャーを再考察する方が望ましい。(ほとんど全てをFPGA側に行わせ、ユーザーインターフェースとパラメーター設定等をCPU側にもたせる、等の切り分け。))

2. グラフィック液晶の制御を全てCPU+DMAでやるかどうか?
 全てやった場合:CPUは、DMAによるバスの空き時間が少なくなるため(CPUがSRAMや入出力ポート等をアクセスしにくくなる)、複雑な処理の時間遅れや、高速応答性に問題が生じる。
 DMAを使用する場合は、VideoのEnable (Display)やHSync, VSyncとの同期が難しい。one pixel-clockもずれるとダメ。XMegaで検討してみたが、ここまで同期を取るのは無理なようだ。(相手が非同期なI2Cインターフェースのグラフィック液晶での例はあるが。) 特にビデオデーターとPCK (pixel clock)との同期を取るのは不可能に近い(バースト転送間に空き時間がある)。(DMAで送られたデーターをラッチする信号としてPCKを使用するため、PCKとの同期は不可欠。)さらに、分解能が高い液晶の場合、容量の大きいRAMが必要であるが、外付けのSRAMを使うと、画素クロックの速度に間に合わない。(32MHzのXMegaでも、DMAは32MHzで起こらない。外付けLE1-LPC接続の高速SRAMでやってみたが、32MHzの1/5程度の速度だったので、最低でも6.4MHz以下の画素クロックの液晶でないとデーター転送できない。)また、SDRAMだとXMeag-Aでも4-bit深さしか扱えないのでカラービットはR/G/B 各1ビットの3-bitまで。
 画素数の多い液晶を扱う場合、ARMのような速いCPUで全てソフトで処理するのはARMのCPU-CKが高速なら、なんとか間に合うかもしれないが、ほとんどCPUの処理資源はそれに占有され、他の処理は待ち状態になりやすいと思われる。 また、ここでもビデオクロックとの同期が問題となる。

3. 最適解。
 以上より、ほとんどCPU処理とは関係のないVideo系を分離するのが正解。4章では全て分離型の例を示した。なお、4章で使用したSPIインターフェースは遅いので、Frame buffer部とのインターフェースはパラレルにするなどして、なるべく高速化するのがよい。(AVRのポートピンの数に余裕がある場合。)筆者はポート数の多いXMega128Aでパラレル型を試作したところ(そのページの(3)を参照)、転送時間は大幅(数十倍)に改善された。そのシステムの写真を示す。詳細は上記のリンクを参照されたい。

XMega_CGLCD

 写真右側=XMega ボード、左=デジットパチスロ液晶。

 もし、デジタルオシロにする場合はFrame bufferと密結合になるが、その場合は、FPGA側にADC制御とData bufferへのストレージを行わせ、ピーク値等の抽出も行わせた後、それらデーターによる全体の制御やグラフィックスのパラメーター設定の計算をCPU側が解析してFPGA側に渡すのがベスト(FPGA側でそれらのデーターを元にスケーリング計算して描画制御を指令する)。オシロの場合、CPU側のADC制御では、普通、ほとんどスピードが間に合わない。
 したがって、無理に全てをCPU側が背負うといびつなシステムとなり、性能が下がる。以上はXMegaやARMで検討した結果である。ARMの場合はAVRと比べて32-bitでもあり、処理性能は高いが、やはり、全部を処理するなら無理な部分や、システムとして、いびつになる要素も多い。(ARMは最近の「はやり」ではあるが、AVRと比べて、32-bitやクロックが速くなって処理速度は速くなっただけのことだけのように思われる(I/O, ADC等の装備はほとんど同等)。確かに画像ファイルのデコードは速いのだが(JPEG等)。)
 これらのことがらは、WindowsやMacのパソコンでグラフィック基板やグラフィックプロセッサーが別ボードや別IC+Video-RAMとなっているのと同じ理由がここにある。まー、全てARMに背負わせてしまうような、あまり複雑なデーター処理や高速応答を要求しないシステムならそれでもよいのだが。(例:低価格フォトフレーム?SDRAMを制御できるARMにSDRAMを抱き合わせで。ARMはSDRAMの制御で、けっこう満杯?) なお、グラフィックプロセッサー側へのデーター転送にDMAを使うのは有効と考えられる(ただし、どのような信号でストローブをとるかの問題は残るが)。

4. グラフ表示の高速化
 表示するYアドレスをFPGA内部のSRAMに転送ストアしておき、適当な規格化定数を送信して(または、FPGA側で判断)、FPGA側にグラフ描画させる方式もあり得る。この場合、グラフの表示はけっこう高速化できる。この手法は4章のFPGA設計データーを書き換え、AVRとのインターフェース定義とそのプログラムを書き換えるなら可能である。

p.s. 筆者としては、4章を拡張して自作オシロを作る気にはなれない。なぜなら、テクトロやアジレントのオシロの精度や高速性、トリガーのかかり(特にこれ。ハードのプロならわかる。テクトロやアジレント等はここが違う。「アナログ部分」が違う。これは通常のデジタル処理では対応できない。)、はアマチュアのデジタルオシロでは到達不可能と思われる。したがって、プロの見方としては、絶対、テクトロを買った方が安い! 共立シリコンハウス3階や上新テクノランド1階のテクトロの中古でも、アマチュアの作成品や訳の分からないメーカーのデジタルオシロよりも優れた性能が得られます(性能が全く違う!以上、筆者の私見)。

p.s.2 4章の液晶表示回路の使用目的は、低速度のデーターロガー向けである。センサーからのデーターをグラフ表示するのを目的に作成されている(例:4-1章の写真)。

 

目次に戻る

 

(5)液晶表示・汎用AVRボードの例

M1284_Univ

 液晶表示回路へコマンドを与えたり、BASCOMから直接液晶を制御する場合のAVRボードの例を写真に示す。なお、既に前章でもいろいろなAVRボードの例を示してあるが、この章で提示するのは、「全部入り」AVRボードである。これまで説明した多くの液晶表示器や液晶制御回路にインターフェースが取れるようにしてある(写真右側の4個のコネクターから接続できる)。(3-2章の液晶のみ不可。なお、別のマイナス電源を追加すれば可能。)まー、「全部入り」という欲張ったオーバースペックのようなボードだが、いろいろな液晶を試してみるには向いているかもしれないので、参考までに添付しておく。(なお、本ボードを作成した目的は学生の学習用である。) 加えて、このボードにはXBee無線モジュールもおまけで搭載されている(写真中央上部の2列コネクタ)。(離れた別のAVRボードとの間でデーター交換やデーターロガーにも使用可能。このボード上のコネクタ(SV4)には空いたADCピンが幾つか出してある。) その他、プッシュスイッチやロータリーエンコーダー、および左中央部にGPIOとADCのコネクター(20ピン)がある。
 写真で上部右から2つ目の10ピンコネクタはSPI インターフェースで信号接続をするカラーグラフィック液晶制御回路 への接続用で、このホームページの(4)で述べられたSPIインターフェース型のカラーグラフィック液晶の制御基板につなぐことができる。

 本ボードは、 以下の各種液晶を制御可能。
1. SC1602 系・5V文字表示液晶。 (3.3V系AVRから制御する例。2-2章を実現した例。)
  注:SC1602でない16x2文字液晶表示器で+VCCとGNDのピンが逆番号になっている物があり、注意。
 (+−電圧を逆に与えるのが、ICやモジュールに対する最悪のパターンで、だいたい、瞬時に壊れる。)

2. SO1602 16x2文字 OLED。(2-3章の例。)
  注:20x2文字 OLEDの場合はコネクター変換の必要性有り。

3. 3-1章のモノクログラフィック液晶。

4. 4章に示されているSPI インターフェースで信号接続をするカラーグラフィック液晶制御回路。

1〜3の写真を以下に示す。

M1284_LCDM1284_OLEDM1284_Topway

写真左側より、一般的な文字表示液晶(SC1602)、OLED(WinStar社、有機EL 16x2文字、青色:共立デジットに有り。非常にきれいな色です。下の写真の記事も参照。)、TopWayの単色グラフィック液晶(128x64 dots、デジットにあり)。
 その他、想定していないような他の液晶もいろいろ実験できる。

M1284_OLED20x4

 上記写真は共立デジットで売っていたWinStarの20文字4行のOLED(緑色)を実験している例。16行2列のOLED用コネクターから1列ヘッダーピン(共立シリコンハウス)で取り出している。ロータリーエンコーダの取り付け位置がもう少し下にあればよかったのだが、OLEDの縦幅が20x4文字では大きく、ロータリーエンコーダの軸に引っかかってしまったので、このようにした。基板を再度作成する際は、縦幅にマージンをもうけて、ロータリーエンコーダの取り付け位置をもっと下にした方がよい。このOLEDは非常にきれいな色(純緑色)でコントラストも液晶とは比べ物にならないぐらい良好、かつ、高視野角。(写真では保護フィルムを張ったまま撮影してしまったので、何となくぼやっとしてますが、実は非常にくっきりしています。)
 なお、WinStar社のOLEDは現在、若干、不安定性があり、それに対する対策はこのページの末尾に添付しておくので、それを参照。
 WinStarのOLED(緑色)は実験したところ1.8Vまで、ある程度の輝度を保って動作したので、例えばNiH充電池x2=2.4Vのような低電圧のモバイルシステムでも使用可能と思われ、便利である。(通常の液晶では3.3V対応のものでも3Vを切るとコントラストが付かなくなってしまい、使えない。)注:WinStarのOLEDのカタログ上の仕様は3Vまでであり、それを下回る電圧での使用は 、あくまで仕様範囲外であることを断っておく。なお、このOLEDは液晶よりは電流が流れる(16x2文字、緑色で10mA強)。ただし、液晶のバックライト点灯時よりは低電流。

 以上のようにこの基板が1枚有れば、ほとんど全ての液晶やOLEDの実験ができる。

 回路図をEagleファイルで添付する。(圧縮フォルダーで、それをEagle Projectとして内部を開くと回路図とパターン図を見ることが出来る。)注:パターン図で、液晶取り付けネジ穴の位置は適当に配置したので、多くは実際よりずれている。液晶取り付けネジ穴の位置は読者で修正されたい。
 「全部入り」だが、どれか一つの液晶のみをそれに対応したコネクターに実装して使用する。その際、BASCOMプログラムもそれ用に書き換える。使用するプログラムの詳細については前章を参照されたい。なお、入出力ポートピンの定義は本ボードに対応するように書き換える必要がある。このボードのBASCOMプログラム例を圧縮ファイルで添付しておく。その解凍フォルダー内のtst2プログラムではプログラムの最初の部分にあるLcdtypeの定義文を=0にするとSC1602 LCD、=1にするとSO1602 OLEDに対応できるようにしてある。(BASCOMコンパイラーにおけるコンパイル制御指示子の使用例。)tst3プログラムは3-1章のLM6063 グラフィック液晶を使用する場合のプログラム。なお、4章の液晶を制御する場合は本ボードのSPIインターフェース用の10ピンソケットを使用するが、そのプログラムは添付していない。(4章を参照して作成されたい。)

 使用したAVRチップはポートピン数の多いATMega1284の40ピンDIPパッケージを使用した(デジットに有り)。これにより、十分に液晶ポート類を制御するピン数の確保、スイッチ類の入力ポート、XBee制御ポート等を確保でき、かつ、ADC+GPIOの余りポートも確保できた(なお、ADCとして使わない場合は、GPIOに転用できる)。また、ATMega1284は内部SRAMを16kB 持っており、簡単なデーターバッファリングや信号処理にも十分な量と思われる。SRAMはMega128(4kB)よりも多い。また、Mega128はDIPパッケージが無く、作成が面倒だが、Mega1284は作成が容易。提示した回路はユニバーサルボードでも作成できる。さらに、Mega1284は倍速SPIモードが可能であり、グラフィック液晶とのSPIインターフェースにかかる時間を短縮できる。(BASCOMからの倍速モードの設定については、Mega1284をカラーグラフィック液晶の制御コマンド発生ボードとして使っている4-3-2章、および4-1-3章において添付したBASCOMプログラム中を探すとあると思う。)

 本AVRボードにはその他にロータリーエンコーダーと3つのプッシュスイッチ(タクトスイッチ)が乗っており、それらによってモード切替等を出来るようになっている。プッシュスイッチにはチャッタリング除去回路(デバウンス回路)を付けてあり、エッジトリガーのインタラプトにも対応可能になっている。また、ADCやGPIOのために20-pinコネクターを付けてある。加えて、XBee(ソケット変換基板を経由)も搭載できるようになっており、これによって離れた別のセンサーからのデーターの時系列変化をグラフィック液晶に表示させたり、また、本ボードのADCで読み取ったデーターをPCへ送信させたりといったことが出来るようになっている。まー、あとはユーザー(当方の場合は学生)のプログラム次第といったところ。(う〜ん。ほんま、できるんやろか?(FPGAやCPLDまで理解して?)まー、期待しましょう。やれば、なんとかなる!?)

追補:WinStar社のOLED(共立デジットにあり。非常にきれいで高コントラスト)の不安定性に対する対策。

以下の添付ファイルを参照。この不具合は4ビットバス・モードでよく出る。8ビットバス・モードでも出るようなら、添付ファイルにあるような対策をする必要がある。
追記1:AVRのSPIによるプログラム書き込みをする際はポートに様々な出力が出るため、EやRSラインは任意に変化して出力を出したりするので、その後、電源を一旦切って、再投入してやるしかOLEDのコマンドレジスターをリセットできないことがある。
追記2:OLEDへの電源ライン(VDD-VSS間)に1k ohmから330 ohmの抵抗を挿入しておく方が良い。WinStarのOLEDのコントローラは電源電圧が相当に下がっても昔の設定(8-bit dataの上位4-bitか下位4-bitか)を覚えており、パワースイッチをOFFした後に再度電源を投入してもその設定がリセットされず、正常な動作とならないことがある。そのためにはOLEDの電源電圧を早くゼロにするために、VDD-VSS間に低い抵抗を入れておいて印加電圧を放電し、OLEDにかかる電圧を短時間にゼロに戻して、その(lower or higher 4-bitの)設定を忘れさせるようにする必要がある。なお、あまりに低い抵抗を入れると、それだけで電流消費が増してしまうのでケースバイケースのトレードオフによって決定されたい。

以下の追記事項は正しくない事が分かりました。その下の追記事項2を参照してください。

追加記事:Mega1284を制御ボードとして、SPI インターフェースを使う場合、BASCOM 2.0.xx以降ではConfig SPI 命令にバグが有るので注意。詳細は上位ページの自作電子回路の7-0章(BASCOMのくせや問題点)の項目(6)を参照。

追記事項2:上記の追記事項は正しくない部分がある。Config SPIに対してはBASCOM側にはバグは無い。これはAVRのハードの特性によるものであり、詳細は修正した7.0章の(6)を参照。

 

目次に戻る

 

 

(6)エプソンS1D13781カラーグラフィック液晶コントローラを使ってみた

(買って試しただけなので、オリジナリティーはほとんど無い。
なお、使用法や本ページで述べたシステムとの比較(6-26-3章)については参考になるかも?)
注:最近、BASCOMの制御下で480x272のカラーグラフィック液晶システムを試作した。けっこう良い。詳細は6-4章を参照。
組み立てにあたっては、J5コネクターはボックス型のコネクターだとその下の基板上の表面実装コンデンサーに接触して正常にマウントできないので、ヘッダー型のポストを立てるだけにする。6-4章の写真参照。
 

6-1 概要

 共立シリコンハウスで、ディスプレイコントローラー基板セットというのを売っていたので、それを使ってみた(デジットにもあり)。セットの内容は、エプソンS1D13781カラーグラフィック液晶コントローラの評価ボード(S5U13781)+フルカラー液晶(TOPWAY LMT35KDH03: 320x240 dot, 8-bit x 3 RGB)+ この液晶へS5U13781から液晶への信号線(FPCコネクタ)の配置を合わせるための結線基板などがセットになっている。その他、もしデモソフトを実行する場合は、画像データーをPCからS5U13781へロードするためにFTDI社のUM232Hという基板(共立にあり)がいるので、同時に購入する必要がある。また、必ずしも必要でないが、マイコンでS5U13781を制御するデモソフトを試行する場合は、ARM (STM32)の基板=STM32 VL-Discovery(共立とマルツにあり)も購入する必要がある。(なお、共立の店員さんに聞くと同じ情報がより詳しく聞けると思う。)
 STM32基板の必要性については、以下にリンクした「画像が表示されるまでの手順の4の系統1、2に関する記述」を先に読むと良い。

EPsys1

 EPSONのデモ表示を行うために必要な構成を上の写真に示す(ただし、全てが必要なわけではない。後述を参照)。その他、S5U13781には+3.3Vの電源がいる。その電流は実測で180mA程度だった。(液晶のバックライトLEDに流す電流値の設定を20mAより上とするならもっと必要になる。なお、今回の共立のセットでは設定は20mAとなっている。電流設定は写真中央にあるS5U13781基板の上側にある赤と黒のジャンパーでセット。Enable(赤のジャンパー)と20mA加算(黒のジャンパー)の2つを刺せば、20mAとなる。)
 写真の解説:(写真は各基板がうまく見えるように画像処理で明るさを増してある。そのため、液晶の画像表示が少し薄く見えてしまっているが、実際には正常なコントラストで表示されている。)写真右側=Topwayの320x240画素フルカラー液晶、写真中央=EPSONのS5U13781デモ基板とその上右に共立セットに入っている結線基板をソケット差し込み、写真左側下=ARM-CPUのSTM32 discovery基板をユニバーサル基板上にマウント、写真左側上=UM232H基板とEPSON基板へ差し込む50ピンコネクタ。写真では以下に述べる系統1の方式で画像表示している。
 結線基板は別の液晶への変更も考えて、シリコンハウス3Fにあるコネクターを使用して抜き差しできるようにしてある。なお、平行した2つの50-pinコネクターどうしが引っかかる場合があり、その場合は、マルツにある50-pinヘッダーを、少なくとも、その1個に使うとよい。
 液晶モジュールと制御基板とはフレキシブルケーブルでつながっていてFPCケーブルが折れ曲がりやすいので、写真のように下に段ボール板を敷いて、両者を同時に持ち上げるようにしてある。
 その他、mini-コネクターを持ったUSBケーブル(写真左下)が必要。また、3.3V 0.2A程度の電源も(例:共立シリコンハウスにある3.3V0.5A, ACアダプターとその出力を受けるコネクタ)。 および、UM232Hを接続する28-pin DIP ICソケット(幅広型)。最後に、以下の系統1の方式でやるならFlashメモリにS5U13781 基板から電源を供給するためにJ1ピンに刺すジャンパーが1個。(写真では結線基板に隠れ気味で見えにくいが、黄色いジャンパーが S5U13781 基板 の中央下部に見えている。)

 今回のレポートでは、EPSONの作ったデモソフトの実行しかしていない。(この点には、まったく当方のオリジナリティーはない。なお、苦労した点の記述や注は参考になるかも?)以下にその情報を示す。(なお、共立の店員さんに聞くと同じ情報がより詳しく聞けると思う。)その他に本ページに示したLCDコントロールシステムとの比較に関する考察も示しておいた。(これにはオリジナリティーはあるかも。)
 写真にある「招き猫の画像」は、元の画像ファイルのサイズを320x240にし、Graphic converterというソフトでppmファイル(ヘッダー=P3である、アスキーデーターによる画像データーの形式)に変換してから、以下に述べる系統1の方法でS5U13781 EPSONボード上のFlashメモリーに書き込んだ後、STM32によるFlashからS1D13781カラーグラフィック液晶コントローラ内部のSRAMへの転送で表示している。

 共立のセットの使用方法:共立のディスプレイコントローラー基板セットを買うと、1枚の資料が付いてきて、そこに書いてあるEPSONのWebサイトから以下にある資料(PDF)とソフト関係の圧縮ファイルをダウンロードする。
 画像が表示されるまでの手順:
1. 資料、x94ag007.d01 (S5U13781R00C100 Demonstration Manual for Topway LMT035KDH03 rev 1.0).pdf(英文サイトではこのような名前になっていたが、日本語サイトでは少し違う名前かもしれない)を印刷して、まず、前半をよく読む)。また、S5U13781R00C00_Reference_Board_J10.pdfもダウンロードしておくとよい(S5U13781の回路図が載っており、コネクターのピン番号やジャンパーの設定がわかる)。
2. x94ag007.d01 (S5U13781R00C100 Demonstration Manual for Topway LMT035KDH03 rev 1.0).pdf(英文サイトではこのような名前になっていたが、日本語サイトでは少し違う名前かもしれない)の資料にあるフリーソフトやライブラリを指定のWebページからダウンロードしてインストールする。(MS Visual-C++、UM232Hの制御ソフト、STM32のライブラリ、IAR社のEWARM(STM32 ARM cortexのプログラム開発ソフトで32kBまでのフリー版))
3. EPSONのサイトからデモプログラムや画像データーの圧縮ファイルもダウンロード(Topway LMT035KDH03用をダウンロード。)それを解凍し、指定のディレクトリに配置する。注意として、資料に指定されたディレクトリに正確に配置しないと正常に動作しない。(画像をS5U13781にロードできないことが起こる。)なお、一番上位のプロジェクトフォルダーはデスクトップに置いてもよい。
4. デモ画像の表示には以下の2系統の方法がある。
 系統1:PCにある画像データーをUM232Hを用いてS5U13781基板上のFlash メモリーにロードする。(資料、x94ag007の3.2章参照。)すなわち、USBを経由して、UM232HでSPIインターフェース経由でFlashメモリーに画像データー(EPSONロゴ画像+カラー画像4枚)が書き込まれる。(Flashなので、電源を切っても画像は残る。)注:FlashにはS5U13781基板上のJ1ジャンパーで電源を印可していないといけない(資料では抜けている。)当然、S5U13781基板には3.3Vの電源(0.2Aもあればよい)を供給する必要がある。UM232Hの方はUSBバスパワー。
 次に、ARM CPUのSTM32基板に、そのソフトを書き込む(資料の3.3章)。STM32基板はUSBバスパワー。
 最後に、資料の3.4章にあるように結線して、STM32をリセットスタートすれば、画像が表示される。(注:液晶のFPCコネクターのピン数はS5U13781基板のコネクタよりも1ピン少ないので、1番ピンを合わせて、挿入する。)Flashに画像が書き込まれていて、STM32のプログラムも正常に書き込めていれば、後はS5U13781基板に3.3Vの電源を与えて、STM32 discovery基板のリセットボタン(黒いボタン)を押すとデモ画像の一連の表示が開始される。STM32側はUSBからバスパワーで動作する。 なお、FlashにはS5U13781基板上のJ1ジャンパーで電源を印可していないといけない。
 系統1の動作は、先にFlashに書いておいた画像データーをSTM32がSPIで読み込み、別のSPIラインでS1D13781液晶コントローラーの内部RAMに書き込むといったものである。オシロで見てみると、概算、約10M bpsぐらいで通信しているようである。
 注:Flashメモリに対するSPIラインはリンギングに弱いようで、普通につなぐとノイズの乗った画像しか表示されなかったりする。STM32のP3コネクタからS5U13781基板のJ4コネクタ47番から50番につなぐケーブルは1本おきにGNDにしたフラットケーブルを使うと良い(計8本)。STM32基板の方のGNDはSTM32基板のP2の1番ピンとP1の50番ピンにGNDが出ているのでそこにつなぐ。S5U13781基板側ではJ4の45、46番がGNDなので、そこにつなぐ。(上記の写真を見ると分かる。)このようにすれば、EPSONの資料に出ているダンピング抵抗無しに、確実に高速通信できる。
その理由:ダンピング抵抗をあまりに高くするとエッジがなまって正常に通信できなくなったりする。また、上記の方法は抵抗値のカットアンドトライが不要。もし、より高速な通信(数十Mbps)をする場合には、ドライブ側のドライブ能力にもよるが、ケーブル終端の終端抵抗として各信号ラインとGND間に150 ohm 〜330 ohmを入れる方法が通常使われる。または、各信号ラインごとにVCCへ330 ohmとGNDへ470 ohmなど。(1本おきにGNDにしたフラットケーブルのインピーダンスがおおよそ150 ohmなので、ターミネーター抵抗として入れる。)なお、ハード屋の視点から言えば、dumping抵抗を入れるのは、それでもリンギングがとれない場合の最後の手段ではあるが、結構有効な手段でもある。ただし、カットアンドトライに陥りやすく、オシロでしっかり確認していく作業が必要。(何となく、うまく行ったではダメ。温度などが変わると不具合が続出したりする。)それよりも、フラットケーブルで接続してGNDを1本おきに入れ、必要なら適切な終端をする方がハード的にも正統な方式である。 (なお、プリントパターン上、どうしても1本おきのGNDリターンを確保できないRAM ICアクセスラインの場合などには数十オームのdumping抵抗が使用されている。)

 系統2:UM232Hを用いて、直接S1D13781へ画像をロードして表示する。(資料4章参照)PCからの画像はPC上のCのソフトによってPCからUSBでUM232Hに入り、SPIインターフェースでS1D13781の内部RAMにロードされる。したがって、系統1にあるFlashへの事前書き込みは不要。

 以上より、系統1ではSTM32+EWARM+STライブラリおよびUM232Hが必要だが、系統2でやるなら、UM232H基板と、その関連ソフトとライブラリのみでよい。

 その他:なぜか、試作したセットの液晶の画像表示が目視では「ちらつき」気味。デモソフト(rev.1)のPLL設定やフレーム更新速度がまずいのか(フレーム/sec.が低すぎか?、またはフレームレートが60Hzに近くて関西の60Hzの蛍光灯照明とビートが出ている?)、または、Back-light LEDをドライブしているS5U13781基板上のDC-DCの問題かは不明。(どのようにセットが動くのかだけに興味があったので、面倒なので原因は追求していない。)それに対し、本ページの4章で作成した液晶システムの表示はちらつくことはなかった。 また、6-3章で試したShrapの液晶表示でも「ちらつき」無し。

 

6-2 EPSONの液晶制御IC(ディスプレイコントローラ) S1D13781について

 長所:480 x 272 pixelまでのフルカラー液晶を幅広く制御できる。また、当然、8ビットカラー、16ビットカラー、3ビットカラーなどにも対応できる。SRAMは384kBを内蔵し、内蔵PLLによって液晶のクロックに合せられる。16-bitデーターなどに対し、カラールックアップテーブルも内蔵。
 オーバレイメモリを有し、その表示領域をハード的に移動できる。
 フェード効果(画像表示デモを見ると分かる)を使える。 
 SRAMを内蔵しているので、小型のカラー液晶の制御を行う場合、スペース的に全体を小さくできるのでよい。
 加えて、Back-light LED用の定電流DC-DCコンバーター回路(20mAおきに設定可)もS5U13781基板には乗っている。

 短所?:本ページにあるデジットのパチスロ液晶のような大きな画素数(800x480)にはフルカラーはできない。384kBの内蔵RAMでは800x480へは8-bit出力(または、8ビットから16ビットへのLUT)となるようだ。したがって、4-1-3章に述べた表示(フルカラー480x272画素)には使えるが、4-3-2章4-3-3章のような800x480画素のフォトフレームは無理。なお、EPSONの別の液晶表示ICを使うと、外部にSDRAMを付けて、800x480でもフルカラーのできるものがあるようである。
 S1D13781は広い範囲のグラフィック液晶の制御が可能であるが、そのためには多くの設定レジスターを適切に設定する必要がある。このへんはマニュアルを読み込む必要があるので、少し面倒である。(なお、幾つかの液晶に対する各レジスター設定値の例はEPSONのサイトにある。)
 文字表示用のハード機能は無いようである。したがって、CPU側で文字表示のドット生成と画像メモリまたはオーバーレイメモリへの描画を行う必要がある。(これに対し、4章全般で述べたFPGAによる方式の幾つかでは文字表示ハードを内包している。したがって、多くの文字行を高速に表示・更新したいケースではこちらの方がよい。)
 線分や円の描画ハードも無いようである。グラフィクス用途にはあまり向かないかも?(これに対し、4章で述べたFPGAによる方式の幾つかでは専用ハードを内包しており、高速描画。 ) 注:EPSONのその他のICを調べていないので、上記のような機能を持っているものもあるかもしれない。

 S1D13781のレジスターはメモリーマップされており、ある範囲のアドレスをR/Wすると対応するレジスターがR/Wされる。(カラールックアップテーブルも同様にメモリーマップ方式。および画像RAMも。)SPI I/Fの場合は、アドレスデーター(トータル19-bit)は送信パケット中の最初の方の数バイトによって伝達される。バーストモードを有するので、画像データーなどを次のアドレスに書き込む際はアドレス指定を省略でき、高速転送に寄与する。
 S1D13781はCNF0~2ピンによって各種のパラレルインターフェースやSPIインターフェースなどを選択できるようになっており、S5U13781基板上のJ2ジャンパーで設定される。購入時はJ2ジャンパーは全て抜けているのでSPIインターフェース設定である。マイコン側のI/Oピン数が多ければ、パラレルインターフェースにすれば画像の転送速度は向上する。その際、 ダイレクト方式ではアドレスバスも必要。インダイレクト方式の場合は、データーバスにアドレスも重複して送信する。(詳細はマニュアル参照)

 

6-3 本ホームページで述べたグラフィック液晶へのS1D13781の適用

 共立シリコンハウスでは6-1章で述べたTOPWAYの液晶(320x240)込みのセットの他に、S5U13781基板単体でも売っており、これを使用すれば4章で述べた方式(CPLDやFPGA + SRAM)よりも少し安くできると思う。ただし、S1D13781の制御レジスターなどの書き込みは面倒。学生の教育の面から見れば、液晶制御やCPLDまたはFPGAといったデジタル技術の基本を習得させるには4章の方式の方が良い(単にコントローラのレジスタ設定では原理が身に付かない)。また、システムに固有な機能をインプリメントする場合にもFPGAの方が優れている。
 それに対し、量産などのコスト面ではEPSONの制御ICに分がある。また、製品化においては小型液晶に対しては小さなスペースで済む。

 現在、S1D13781のマニュアルが読みきれていないので、本ホームページで述べたグラフィック液晶への適用は完全にはできていないが、以下の液晶には適用可能と思われる。
注:最近、480x272型の液晶について試作した。BASCOMで制御できた。6-4章を参照。

1. 4-1章のSparkFunのSharp LQ043T3DX02 カラー液晶(480 x 272 RGB各8-bit)、ストロベリー・リナックス通販、または共立デジットにあり。
 S5U13781基板でフルカラー対応可能と思われる。なお、その際には以下の対応が必要。
 LQ043T3DX02はデジタル用のVCC電源に標準で+2.5Vが必要であり、かつ、アナログ電源用のAVDDに+5Vを要する。4-1章ではCPLDやFPGAを使っているので、そのあるバンクのVCCIOを2.5Vにすることにより、うまくインターフェースレベルがとれている。なお、LQ043T3DX02の仕様書によればVCCのmaxは3.3Vでも良いようなので(absolute max は4.5V)、このラインと信号ライン(L = 0.2VCC, H = 0.8VCC)もS5U13781基板の3.3V系で行えると思われる。ただし、AVDDの+5Vは別途、供給する必要がある。その他、 VCC系の信号ラインの電圧が心配なら、74LCX系などのレベル変換ICを使う手もある。
 Sharp LQ043T3DX02(480x272)に似た液晶の制御例はEpsonのサイトに資料とプログラムがある。その液晶はXiamen Zettlen Elctronics(中国製)のATM0430D5であり、SharpのLQ043T3DX02と同じく480x272 dot, 8x3bit full-colorである。大きさも4.3インチであって、同じ表示サイズである。ATM0430D5はインターネットで見ると秋月電子で売っていた。必要な電源も3.3Vのみでよく、LED電流も20mAとSharpのとほぼ同じである。(なお、SharpのLED電源はFPCコネクタではなく、別コネクタから与える必要がある。接続可能なコネクタはデジットにある4-pinの黒いやつ。(そうのうち、1番と3番のみを使う。)Xiamen Zettlen Elctronics(中国製)のATM0430D5の価格はSharpのLQ043T3DX02より少し安い(デジットのLQ043T3DX02との価格を比較)。
 ATM0430D5のタイミング仕様を見ると、LQ043T3DX02のタイミング仕様とほとんど同じなので、EpsonからのATM0430D5制御プログラムをそのまま使用できると思われる。LQ043T3DX02のFPCコネクターはS5U13781基板にあるFPCコネクタと同じ0.5mmピッチなので、1番ピンを合わせて挿入して取り付ければ、ATM0430D5と同じように接続できる。その際にはATM0430D5とは結線が違うので、S5U13781基板のFPCコネクター部への50-pinヘッダーコネクタ間の結線を適切に行うこと。
 ATM0430D5(中国製)とSharp LQ043T3DX02の比較であるが、やっていないので正確なことは言えないが、両者の仕様書を見ると両者とも同じ480pixelの表示エリア水平幅(95mm)であるが、Sharpの方はpixel pitchが仕様より0.198x0.198mmという正方形ピクセルが稠密に並んでいるのに対し、ATM0430D5の方は0.66x0.198mmの短冊状と有効画素面積が水平方向に小さいようである。すなわち、Sharpの方が実質的に画像が表示されている面積が圧倒的に大きい。また、表示に関する光学特性も仕様書を比較するとSharpの方が良い。これより、おそらく、Sharpの方がきれいな画像となり、かつ視野が広くなると思われる。以上より、安く480x272カラー画像を試すならATM0430D5で、きれいな画像を求めるなら SharpのLQ043T3DX02になると思われる。(なお、4-1章の最初にある「注」を参照のこと。)ただし、あくまで仕様書などからの推測であり、試してはいないことを記しておく。

 上記の考察を元に、実際にSharp LQ043T3DX02をS5U13781基板につないで画像表示させてみた例を以下に示す。

ep_sharp_photo

写真6-3-1: 上の写真はその例。 S5U13781基板によるSharp LQ043T3DX02 のフォトフレーム。 写真では分からないが、視野角やコントラストも良好。写真のピントは少しだけぼけているが、画像分解能も良好だった。

ep_sys1

写真6-3-2:全体の構成。(組み立て前。)S5U13781基板にあるFPCコネクタは下接点型であるので、LQ043T3DX02液晶は裏返しの状態で接続される。LQ043T3DX02 の backlight LEDのコネクターは別コネクターになっており、写真の黒いコネクタで接続される。このコネクタ(4極)はデジットにある。3極のみ使う。FPCを奥に入れすぎてもうまく接続されない。いろいろな挿入位置で工夫されたい。(ちゃんとコンタクトできていれば、画像無しでも液晶全体がうっすら光るはず。)写真では液晶=写真のLCDはまだ裏返っている(コネクタ面方向の関係で)。これをよいっしょっと起こせば、写真6-3-1のようになる。 そこでは,液晶の裏側に黒いプラスチック発泡板をショート防止のために挟んである。写真を見ると分かるように液晶のフラットプラスチックケーブル(FPC)は写真下側にずれてFPCコネクタに接続されていることに注意。(後述を参照)

ep_sys2

写真6-3-3:組み立て後。STM32基板とS5U13781基板を50-pinコネクタで接続。液晶への信号ラインに対応する信号線を接続するために、S5U13781基板上に結線基板(裏側に50-pinコネクターが2つ)を挿入。

ep_sys_kessen

写真6-3-4:結線基板を拡大。中央に赤く見える(実際はピンク色に近い:カメラの色補正無し)多数の細い線はワイヤリングペンのポリウレタン線。

 制御は6-1章で述べた方式であり(系統1を使用)、EpsonのサイトからXiamen Zettlen ElctronicsのATM0430D5用のプログラムをダウンロードして、それを以下のように少し変更して使用している。ATM040D5の同期信号はDEというH-syncとV-syncの複合したコンポジット同期信号であるが、SharpのLQ043T3DX02はH-syncとV-syncの分離信号である。ATM040D5のプログラムではS5U13781基板からはSync信号として正極性の分離した同期信号(H-syncとV-sync)は出るが、Sharpの液晶は負極性の同期信号が必要であるので、以下のようにプログラムを書き換える。Epsonから提供されているATM0430D5を制御するSTM32のプログラム(プロジェクト)をEWARMで開く。その中のS1D13781フォルダー中のincフォルダーの中にS1D13781.hというヘッダーファイルがある。それを開き、#ifdef LCD_PANEL_ATM0430D5 の範囲内にある(他の液晶に対する#ifdef領域もあり、そこにも同じような定義文があるので間違えないように)、
#define S1D_INSTANTIATE_REGISTERSの下の以下のレジスター設定値を変える。レジスター2C番と30番はH-syncのパルス幅とV-syncのパルス幅を設定するレジスターであるが、その7-bit目が1であると、正極性の同期パルスとなってしまうので、これを0にする。すなわち、{0x2C, 0x0090}, となっている部分を{0x2C, 0x0010}, と書き換え、{0x30, 0x0082}, となっている部分を{0x30, 0x0002}, としてbit7=0に書き換えると、負極性の同期信号となる。その後再ビルドしてSTM32 discoveryに書き込めばよい。
 SharpのLQ043T3DX02 への結線表をPDFで添付する。LQ043T3DX02のVCCへは S5U13781基板 から+3.3Vを供給する。(前記考察から、これでも動作するはず。)J9コネクターのAVDDに対応するピンには、外部から+5Vを与えた。写真6-3-2にあるように+5Vを主電源にし、それから3端子で3.3Vを作ってS5U13781基板 に与えるようにして、+5Vを確保した。液晶へのDISP信号(Display enable)へは、単に3.3V(VDD_IO)を与えておけばよい。写真6-3-2にあるように、 LQ043T3DX02 の backlight LEDのコネクターは別コネクターになっており、そこにS5U13781基板 からのLED+, LED-を与える。LED電流は20mAとする。(LQ043T3DX02のLED電流のmaxは20mAなので、これより多く設定しないように注意。すなわち、電流設定ジャンパーを1個を超えて入れないように。入れるごとに20mAづつ増加する。)
 注意として、S5U13781基板にあるFPCコネクタは下接点型であるので、写真6-3-2にあるように液晶は裏返しの状態で接続される。LQ043T3DX02 のFPCケーブルの1番ピンをS5U13781基板 のFPCコネクターの1番ピンに合わせた後、FPCコネクターのプラスチック板を下げて 固定する。これで電源を与えてSTM32(USBバスパワー)のリセットスイッチを押せばEpsonの一連のでも画像表示が始まる。写真6-3-1ではそのうちの1枚(Image2_480x272.ppm)を入れ替えて表示させている。(注:Image1を入れ替えると、UM232HによるFlashへの書き込みステップがなぜかうまく行かなかった。Graphic converterで変換したファイルのヘッダーが少し違うのかもしれない。Image1を正常なものにしておくと、いっぺんImage1にあるヘッダー(画像サイズ等)の情報を読むと、後の画像ファイル(Image2 etc.)は同等と解釈してロードしてFlashに書き込むようである。)
 結線表にある J5とJ9コネクター間の配線はけっこう混み合うので、写真6-3-4にあるように、(電源ラインを除いて)ワイヤリングペン(Vero社)で行った。ワイヤリングペンが無ければ、直径0.2ミリほどの、細いポリウレタン線(共立シリコンハウス3F)でもよい。ポリウレタン線は被覆をやや強めの半田ごてで暖めてやると被覆が取れ、半田が付くようになる。
 写真6-3-3のように組み立てた後、裏返った液晶を表が見えるように裏返すと、写真6-3-1のようになる。液晶の裏にあるアルミ板が下の結線基板やS5U13781基板とショートしないように、写真では黒い発泡スチロール板が液晶の下に敷かれている。注:液晶のFPCケーブルを無理に曲げないように。無理に曲げると断線したりする。
 Epsonの480x272画素液晶へのデモソフトのコメントを見ると、実は480x272画像については8-bit x 3 のデーター深さをFlashにストアしておらず、その24-bitデーターを16-bit化した後にストアしているようである。そうしないとメモリー容量が足りない。(S1D13781の内部メモリーも384kBなので、8-bit x 3 で480x272画素をストアすると「Epsonロゴ」の画像(overlayプレーン)を蓄積しておくメモリーがなくなってしまう。そのため、画像の深さは16-bitにしておき、それをLUT(Look-up-table)によって24-bitへ変換し直して表示するという方式をとっているようである。それでもLUTがうまくできているのか、疑似輪郭等は見られなかった。(なお、320x240画素の液晶の場合は、LUTは使わず、8-bit x 3のままでやっているようである。)
 写真6-3-1の液晶に表示された画像を注意深く見ると、水平方向に少し右にずれていて、画像左側に最右端の画像の折り返しが見られる。これはATM040D5の設定とLQ043T3DX02 の設定の違いによる。したがって、前記のS1D13781.hヘッダーファイル中の値(H-sync positionやH non-display period等)を調整する必要がある。(今回は同期信号の極性反転しかしていない。)そのへんは、LQ043T3DX02とS1D13781のマニュアルを参照して、読者で行われたい。 また、ARMのプログラムとS1D13781レジスターの設定を変えれば、8-bit x3 深さの真のフルカラーも可能である。なお、その際はoverlay-plane表示はコントローラー内のメモリー容量不足のため利用できない。

2. 4-3章のデジットにあるパチスロ液晶(800x480 16-bit color)。
 S1D13781の仕様書を見ると、内蔵RAM容量が足りないので、800x480画素では4-3-1章のような8ビットカラーのみ対応可能で(カラールックアップテーブルの利用は可能と思われる)、4-3-2章4-3-3章のような16ビット・フォトフレーム化はできない。 なお、Epsonの型番の異なる別のコントローラーでは外付けのSDRAMによって可能なようである。
 筆者の感想では、このようなコントローラーを使うよりは4-3-3章に紹介したDE0-nanoやFPGAによる方式の方が作りやすいかもしれない。(コントローラーという固定ハードにした場合、SDRAMのrefleshやバースト転送、および画素データー書き込みなどのタイミングを画像表示時間中にいつ入れるか等のレジスター設定がたぶん複雑。ただし、そのICのマニュアルは読んでいないが。)また、DE0-nanoのFPGAのゲートは余りまくっているので、任意の高機能(ハードウエアによる、スクリーンクリア、線分や円の表示、および文字列描画などのグラフィックス)をFPGAのプログラム次第で任意に実現できる。ただし、DE0-nanoを液晶コントローラだけに使うにはコストパフォーマンスは相当悪いが。以上より、専用プリント基板を起こすなら、数量にもよるが量産品に対しても、安いFPGAと、そこそこの容量のSDRAMという組み合わせとのトレードオフになるかもしれない。加えて、 最近はFPGA内にCPUを取り込む動きもあり(CPU部をハード化したものも出てきた)、CPU込み込みならシステムの適合領域によって十分に価格競争力がある可能性がある。

3. 4-2章の液晶(RGB各1ビットで8-bitデーターに3+3+2-bitで送信)は、S1D13781への「シングルカラー8ビットパネル(フォーマット2)」という設定で使用できるようである。 詳細はS1D13781のマニュアルを参照されたい。 筆者は現在既に簡単なCPLD回路(4-2-1節)で完動してしまったので、面倒なのでトライしていない。 また,アマチュア的には4-2-3節のようにけっこう安い構成でもできる。
注:最近、試作した。けっこう行ける。詳細は6-4章

 

その他: EPSONのデモではマイコンはSTM32 (ARM)を使っているが、別にインターフェースをとればよいだけなので、AVR、PIC、H8等でも行うことが可能。AVRの例では、4章に述べたようにSD-Cardに画像を蓄えておき、それをSPI I/FやパラレルI/FでS1D13781 に転送するとよい。見積もりではSTM32の方が速度的には速いが、それほど圧倒的というわけでもなさそうである。(4章でのフォトフレームにおける表示速度は主にSD-Card読み出しの遅さで決まっている。SD-HC等にすればよいが、アマチュアでは仕様が手に入らない。なお、Epsonのデモでは一旦、Flashに書き込んでおき、そこからファイルシステム無しに直接読んでいるので速い。)この考察から、STM32のCの使い方を覚えるというやり方に対して、BASCOMで手軽にやる方が開発は容易という面も捨てがたいところである。なお、SPI I/Fでやる場合はMega1284やMega168を使うとTinyなどのAVRの2倍速の速度を出せるので有利である。(3.3V時の最大クロックである12MHz ClockでSPIは2CK時間の6M bps。それに対し、今回のセットにおけるSTM32での実測は10M bps強。)また、XMegaやM1284のようにピン数が多ければ パラレルI/Fとする手もある。その他、ARM cortexの売りである32-bit CPUも、実際の制御関係の用途ではほとんど8ビットで足りるので、それほど魅力的ではないかもしれない。それらを考えると、どちらを選ぶかは、手軽にやるか本格的にやるかの選択になると思われる。
 筆者の私見ではあるが、最近はARMが、はやっているようであるが、筆者は高速性やリアルタイム性が必要な部分はCPLDやFPGA、または本節に取り上げた専用ICで、別モジュール部分として設計してしまうので、あまり必要性は感じていない。どちらかというと32-bit CPUで、そこそこ高速であることはかえってそれに捕われて、全てをソフト処理しようとして設計を難しくしてしまう場合がある。それよりも専用の高速ハードをCPLDやFPGAまたは専用ICで作って、別の遅い(ユーザーインターフェース専用の)簡易なCPU(PIC, AVR, H8等)から起動した方が楽に設計できる場合が多いし、ぎりぎりのソフト設計で機能追加に対する余裕が無くなるということもない。ソフト開発上も、あまりにも豊富な機能を有している複雑なCPUを使わない方が早く設計を完了でき、例えばAVRではBASCOMなどの簡便なソフトによる速い開発も有利。その設計指針に基づくCPLD, FPGAによる専用ハード化の例は4章にその例がある。(それらは安いARMでは速度的に無理かメモリーが足りない。また、そこそこの高性能ARMで全て行うとその処理にかかり切りになってしまって、別のプロセスが実行しづらくなる。) すなわち、全体のシステム設計における最適な切り分けとコスト・パフォーマンス積という工学的考察が重要である。 なお、小規模システムにおいて主な処理(浮動小数演算等)を高速に実行する必要があり、その外部に画像液晶表示を行う必要がある場合には、メインの処理をARM Cortex M4や専用FPGAまたはDSPなどに負わせ、画像制御をFPGAや専用ICに担わせるのが最適設計と思われる。 以上より、将来への熟慮した切り分けが重要であり、それを変に一つにすると、バージョンアップ時にシステム再設計となって、過度な開発費用や再設計、および次世代出荷への多大な遅延という事態が発生する可能性がある。 (以上は筆者の私見)

 
最後に:もし、BASCOM-AVRの液晶表示コマンド体系にS1D13781がインプリメントされるなら、BASCOMユーザーは即、使うと思う。 現在、BASCOMではフルカラーグラフィック液晶コントローラを指令するコマンド群は残念ながら無い。その理由としては、おそらく、世界標準的なコントローラICが定まっていないせいと思われる。この点、Epsonにはがんばってほしい。(RGB各1ビットのグラフィック液晶コントローラに関してはEpson製を制御できるBASCOMコマンド体系が存在しているが。)用途にもよるが、 量産品に関してはおそらく、FPGAよりはEpsonの方が部があるように思われるので。

6-4 低価格カラーグラフィック液晶システム:BASCOMからコントロールして、簡単にカラーグラフ表示

DataImageImg

 共立デジットでEpsonのS5U13781P00C100評価ボードと480x272ドットのフルカラーグラフィック液晶であるFG040346DSSWBG03を、セットで5千円で売っていた(2013年5月時点での価格)。これは安い。4-1章で紹介したシステムではCPLD+SRAMなどで組み立てていたが、だんぜん、上記のセットの方が低価格にできる。このセットをBASCOMから制御した例に付いて以下に述べる。BASCOMの下で動くようになれば、各種のデーター表示器などを簡単に実現でき、少し難しいARMなどを使わなくても、これまでのBASCOMの財産が生きる事になる。

 以下の例ではS1D13781が乗っているS5U13781P00C100評価ボードをATMega168からSPIインターフェースで制御する。Mega168ボードはATMega168汎用基板(デジット)を使用し、電源ラインに直接3.3Vを供給する。
液晶コントローラーとのインターフェースはSPIでPortB.3~5のSPIラインをつなぎ、/SSラインのみPortB.1より与える。
(BASCOMのConfig SPI命令にはバグがあり、EpsonボードとのSPIインターフェースにおけるバーストモードではPortB.2を/SS信号としては使用できないため、このようにする。詳細は添付したプログラムソースを参照。)
追記:上記は正しくない。Config SPIに対してはBASCOM側にはバグは無い。これはAVRのハードの特性によるものであり、詳細は回路のページの修正した7.0章の(6)を参照。


 本システムは主にカラーグラフ表示に適している。例えば、多点温度計の複数グラフをカラーで弁別表示等。

FG040346DSSWBG03液晶(共立で2千円)
 480x272 8-bit x 3 (RGB)フルカラー液晶。
 SpurkFunより売られているシャープ製のカラー液晶とほぼ同等の性能。(なお、上下方向の下側で視野角が狭い。)
ただし、そうとうに安いので、コストパフォーマンスは良い。FG040346DSSWBG03は、Epsonの例にあるXIAMEN ZETTLER製LCDパネルATM0430D5に同等であるので、その例にあるソフトで動作する。なお、パネル信号変換において、以下のピンは異なる。3 = NC。

システム
 カラーグラフ表示用なので1ピクセルのデーターは8-bit。それをコントローラー内部のLUT1でフルカラーに疑似カラー変換。(8-bitにすることにより、データーの描画速度は速くなる。)
 Mega168ボードはATMega168汎用基板を使用して3.3V電源を供給し、これをEpsonボードにも供給した。なお、同じくデジットで販売されているBoot-Loader 168等の基板も使用可能。その際はSPI I/FのMOSI, SCK, /CSラインに分圧抵抗(例:330ohm + 470 ohm)を入れて、5V信号を3.3V信号に落とすか、または74LCX125でレベル変換すること。また、5Vから3端子レギューレーターで3.3Vを作って、Epsonボード側に供給すること。3.3V側の消費電流は約220mAほどだった。
 以下に全体の写真を示す。

DataImage_Sys

 単にATMega168ボードからSPIと電源線(3.3V)をつなぐだけで動く。BASCOMで書いたプログラムソースを添付する。(添付したソースではやっていないが、Mega CPU系ではSPIクロックの倍速ビットがあり、Config SPI命令をやった後にSPSR=1 として倍速指定すれば、SPI転送が速くなるので、ソフトの処理スピードもある程度速くなる。)

 上の写真中央に見えている茶色のプリント板はパネル信号変換基板で、添付の資料のように配線する。 変換配線基板は下の写真を参照。 中央に赤く見える多数の細い線はワイヤリングペンのポリウレタン線。 ポリウレタン線 の絶縁被覆は半田ごてをあてていると熱ではがれるので、ハンダが付くようになる。ワイヤリングペンを持っていない場合には、ポリウレタン線 はコイル用の電線として売っているので、それを使えば良い。(例えば、共立シリコンハウスの3Fにある。)写真でその他の太い配線はGNDや電源。

DataImageCon1

DataImageCon3

 パネル信号変換基板を抜いた写真。(使用する上で設定する必要のある、3つのジャンパーが挿入されているのが見えている。)50ピンのヘッダーコネクターが2個ある。(J5コネクターはボックス型のコネクターだと下のコンデンサーに接触して正常にマウントできないので、ヘッダー型のポストを立てるだけにする。写真参照。)
写真右の変換基板はエプソン側の2つのコネクターの間隔は2.54mmピッチよりも少しだけ狭くなっているため、以下のように作成する必要がある。
 まず、2つの50ピンコネクターを中途までさして、その上にユニーバーサル基板(サンハヤトICB88)をうまく差し込み、少しコネクター全体を差し込んでからハンダ付け。その後、ユニバーサル基板ごと抜いてから配線。 このようにする事によって、以下の写真のようにコネクターは変換基板面に対して少し斜めになって取り付く。

DataImageCon42

 その後、裏側の変換配線を行う。配線後、エプソンのボードに差し込み、液晶のプラスチックケーブルを一つ上の写真にあるように1番ピンを合わせて接続すればよい。ケーブルのコネクターはその写真の一番上にある黒いタブをピンセットで上に押し上げ、プラスチックケーブルをピンを合わせて、少し奥までちゃんと挿入し、ピンセットで黒いタブをもとの位置まで押し下げればケーブルが固定される。コネクターのコンタクト金属板はコネクター下側なので、プラスチックケーブルのコンタクト面も下側にして挿入しないといけない。したがって、ボードに対して液晶は裏側を向く。液晶の表示面を見るためには系全体を裏返しても良いが、普通は液晶のプラスチックケーブルを折り返して、以下の写真のようにする。

DataImageConf

 液晶を折り返してある。なお、下にある変換基板とショートしないようにプチプチを敷いて絶縁してある。このシステムは3.3Vで動くので、写真の例では単3アルカリ電池2個で駆動している。なお、これだと5時間ぐらいしか保たないので、普通は通常の電源でドライブした方が良い。

Mega168とEpson 5U13781P00C100評価ボードとの接続など(2つ上の写真も参照)
 SPIのインターフェースは3.3Vレベル。
(AVR出力が5Vなら、前記したレベル変換が必要。なお、AVR側が5V系でもMISOはそのままAVRの入力につないでもよい。)
PortB.5 = SCK = EpsonボードJ4 28ピンへ
PortB.4 = MISO = EpsonボードJ4 30ピンへ
PortB.3 = MOSI = EpsonボードJ4 29ピンへ
PortB.1 = /SS = EpsonボードJ4 27ピンへ

その他、
EpsonボードJ4、 1と2ピン= GND
EpsonボードJ4、 3と4ピン= +3.3Vを供給
EpsonボードJ4 、45と46ピン= GND

EpsonボードJ1ジャンパー:関係無し。
EpsonボードJ6、7ジャンパー:ボード上の水晶発振器からクロックを供給するように設定。
(ジャンパー無し。ジャンパーをしない。)
EpsonボードJ2ジャンパー:全部抜く。(CFG = 111 設定=SPI I/F)
EpsonボードJ3ジャンパー:液晶のバックライトに20mAを供給するように設定。
(J4をボード左側に見るようなボードの向きで、J3の左側2個の部分にジャンパー2個を入れる。)

 以上の配線(特にパネルインターフェースのJ5とJ9間)を間違えなければ、BASCOMのプログラムをAVRボードに書きかんだらすぐに動きます。(なお、添付したプログラムはFreeのBASCOMのコンパイル容量を超えるので、有料版が必要です。ただし、BASCOMの有料版は安いので(1万以下)、買っておいて損は無い。)Mega168を使用した場合、Flush占有率は66%ほどなので、その他の機能追加もできる。より大きなメモリーが必要な場合はMega328に差し替えればよい。

 先に添付したBASCOMの .bas ファイルはテキストエディターで開けるので、それを参考にしてアセンブラやCで書き直してもよい。添付したプログラムにはEpsonコントローラーへのレジスター設定がコメントで記述されているので、このように設定すれば良い。BASCOMのプログラムで何をやっているかの解読は、以下のサイトが参考になります。
http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/BASCManu/BASCManu.html
 アセンブラやCでの書き換えにあたっては、主にハードウエアSPIインターフェース部を書けば、基本部は動作できる。アセンブラで書くなら、例えば、CQ出版の「AVRマイコン、リファレンスブック」や「AVRマイコン・プログラミング入門」という本を買って、サポートページというページに載っているサイトからソースをダウンロードして、その中のSPIルーチンを利用するとよい。
また、Cならインターネットで「WinAVR SPI」というキーワードでサーチするとたくさん例が見つかる。
また、ATMELのATMega168のマニュアルなどにはSPIの項にアセンブラやCによるSPIレジスタの初期化や転送ルーチンのコード例が載っている。
 なお、当然ながら、上記のBASCOMプログラムを解読して、PIC、H8などにインプリメントすれば、そこでも同様なことができる。主にEpsonコントローラの設定を参照して、あとは適当にソフト全体を組み立てればよい。

 本章で述べた方式を使って、6-3章にあるシャープの液晶もAVRで制御できる。液晶コントローラに与えるパラメーターを少し変えればよい。そのプログラム例(BASCOM)を添付する。なお、変換基板の配線は6-3章に述べた物を使う。

 

6-5 まとめ

 以上より、S5U13781基板は、少し小型のフルカラー液晶でデジタルフォトフレームを作成する際に、便利なコントローラーであると思われる。 また、このページで述べてきたカラー液晶のほとんどを制御できるので、わざわざCPLDやFPGAを使わなくてもよくなった。このページのカラー液晶制御を設計した時点ではEpsonのボードが発売されていなかったため、CPLDなどが必要であったが、今後はEpsonボードを使った方が簡単に安くできる。なお、液晶制御の学習やCPLD, FPGAの練習などにはこのページの例がまだ参考になると思う。
 Epsonのボードは480x272画素までフルカラーをサポートしており、また、8-bitデーターからルックアップテーブルで24-bitカラーにできるので、簡単なCPU(ATMega等)で計測器を作成する場合にカラーでグラフ表示ができるため、今後、非常によく使用する事になると思われる。また、上記のような8ビット疑似カラーデーターであれば800x480画素までサポートしているので、4-3章で述べたパチスロ液晶も制御できる。
 非常に便利なコントローラーができたものである。(3千500円ぐらいの低価格。CPLD or FPGA+SRAM + FPCコネクタ+両面感光基板+1.2Vレギュレーター等、などの組み合わせでは、少量な数量では、到底この価格は出せない。)

目次に戻る

 

(7)低消費電流型の液晶 (モバイル機器向け)

持ち歩きのできる小型機器を作成する場合、低消費電流型の液晶表示器が欲しい事がある。以下の3つを試してみた。(以下の3種とも3.3V付近の電圧で動作する。)

7-1 ストロベリー・リナックスのI2C低電圧キャラクタ液晶モジュール

 16x2行、文字表示型。バックライトを使用しない場合、消費電流は250uAとできる。インターフェースはI2C。 その他の詳細については2-1-2章に既に述べてある。

7-2 Electronic Assembly社のDOGM162E-A(RS-コンポーネンツより入手)

 16x2行、文字表示型。バックライトを使用しない場合、消費電流は250uAとできる。インターフェースは4-bit, 8-bitパラレルおよびSPI。 この液晶の使用例は回路のページの6-14章にある。

7-3 Electronic Assembly社のDOGM128L-6(RS-コンポーネンツより入手)

 128x64ドット、モノクロ、グラフィック液晶。バックライトを使用しない場合、消費電流は300uAとできる。インターフェースはSPI。 (なお、MISOラインは無いので、液晶内部のRAMの内容は読めない。書き込みのみ。)
 この液晶はパワーダウンモードを持っており、Display OFFとDisplay all points ONコマンドを連続して発行することにより、表示を消す事で消費電流を10uA以下まで落とす事ができる。なお、再度パワーダウンから復帰した場合も画像RAMの内容は保存されている。(復帰はパワーダウンの逆順でDisplay all points OFFとDisplay ONとする。)したがって、機器を使用しない場合は液晶をパワーダウンさせておくと、機器の電池は非常に長持ちする事になる。併せてAVRもPower-save モードに入らせる事により、機器全体の電流消費を10uA程度に抑える事ができ、共立電子で売られている小型軽量Li-Polymer電池の110mAh(下の写真、右を参照)を使う場合、1年以上、電池が持つ事になる。(表示をONしっぱなしにする場合は主に液晶が300uAを食うので、110mAhの電池だと2週間程度。800mAhの少し大型のLi-Polymerなら3ヶ月強。)

clock_calender1

clock_calender2

 上の2つの写真に使用例を示す。上の方の写真はクロック(時計表示)、下の写真はカレンダー表示。このシステムはメモ代わりに用いられる。カレンダーで日付を選ぶと、その日のスケジュールが表示される。(写真は添付していない。)スマホと比べて電池のもちが非常に長いので、頻繁な充電は必要ない。(未使用時に表示をOFFする使用法を採用すると写真にある小型電池で1年はもつ。)

 このシステムの回路図液晶の制御プログラムの例を添付する(プログラムは液晶制御部のみを示す)。 なお、回路図にあるmicro SC-Cardは抜いておかないと10uAレベルは達成できないのでSD-Cardを使用した後はそれを取り外す。また、タッチパネルインターフェースは現在は使っていない。その他、添付したプログラムの最初にあるコメントに記されているような種々の低消費電力化への対策がとられている。 そこに記述されている低消費電流化に対応したICはRS-Componentsから入手できる。回路図の部品名には一カ所誤りがあり、図面右上の3端子レギュレーターの名前はMC78FC00ではなく、MC78FC33である。
 プログラムの最後にある3つの$Include文は文字パターンファイルを読み込むコマンドである。大きな文字=12x16ドット、通常サイズ=8x8ドット、小さな文字=6x8ドットの3種類を読み込んで、各々、最適なサイズを使用している。上の方の写真は大きなサイズと通常サイズを、下の方の写真は小さな文字を使っている。文字パターンファイルはBASCOMに付属してくるパターンファイルを少し書き換えて作る(TextEditor = WordPadなどで)。 まず、BASCOMフォルダーの中のSAMPLES/LCDGRAPHフォルダーを開くと、そこに幾つかのフォントファイルが有る。フォントファイルの最初にあるラベル(例えばFont8x8: )を削除する。次の行の$asmはそのままにし、次に続く行にあるフォントサイズの定義行を削除する。この行は例えば8x8フォントの場合、.db 1, 8, 8, 0 などとなっている。これはBASCOMではGraphic LCD関係の文字表示サポートコマンドで文字構成ドットの参照に使うが、今回は使用しないのでこれを削除する。(削除しないと添付したソフトで使用した場合はそのバイト数だけずれた文字ドットが出てしまう。以上を行った後、別の名前でセーブし直して、それをIncludeする。
 添付したプログラムにはLCDをパワーダウンするサブルーチンと再度パワーアップするサブルーチンも記しておいた。詳細はプログラム中のコメントを参照されたい。
 DOGM128のSPIインターフェースはMISO線を持っていないので、LCD内蔵のRAM内容を読み出す事ができない。したがって、線分や曲線を描画する場合は、Mega1284中のRAMに一辺バッファリングしておき、そのバッファー内容を書き換えた後に、それをLCDに転送しないといけない。(文字の場合は縦8ドットごとに全てを書いてしまうので、バッファーを使わなくてもできる。)曲線描画のように8ドットの読み出しとその中の1ドットの書き換え後の再書き込みが必要な場合のみ、上記の対応が必要。Mega1284は16kBのRAMを持っているので、十分、バッファリングは可能である(128x64 dot = 8kB)。以上の理由により、BASCOMでも多くの描画コマンドはDOGM128に対してはサポートされていない。このへんは少し残念な点である。
 添付した回路図のVSENSEとVDATA信号に関連した部分はLi-Polymer電池の電圧低下を検出するための回路である。(関連ソフトは添付していない。)Li-Polymer電池はある程度以下に電圧が低下した後でも使用を続けると劣化する特性を有する。従って、電圧低下を検知してユーザーに通知することが必要となる。回路ではVSENSEラインをL(ほぼGNDレベル)にすると青色LED(3V弱から電流が流れる)+ 1SS400ショットキバリア・ダイオード(0.2V付近から電流が流れる)+ 22k ohm抵抗によって構成される直列回路に電流が流れるようになる。もし、電池の電圧が3.3V + アルファー(回路で使用している3端子IC(MC78FC33)の電圧降下=10mV ~ 100mV)以上であれば電源ラインは3.3Vであって、電流が流れて22 k ohmの両端に十分な電圧が出てAVRのADC2に入っているVDATAラインに一定の電圧が検出される。ところが電池電圧が3.3V以下になると、22 k ohm両端の電圧は下がっていく。ところがこの場合、AVRに印可される電圧もMC78FC33の出力電圧が下がるので(定電圧設定値の3.3Vを下回るので)、VCCに接続されたAVCC(AVRのADC基準電圧AREFとして使用)も下がるため、当初はAD変換された結果の値もあまり下がらない。ところが、ある電圧以下(この場合は2.8V) まで下がると、LED+Diode3を通過できる電流は非常に少なくなり、(ダイオード特性の非線形性。注:温度依存性があるので、ある程度マージンを取る事。)22 k ohm によって発生される電圧はAVCC電圧よりも相対的に十分低くなる。したがって、この電圧低下を検出する事によって電池電圧の低下を検出できる。(実際のソフト設計においては可変電圧電源からシステムに電源供給しながら、AVRが認識している電圧値(3.3Vを下回ると正しくない電圧値になるが低下傾向)を液晶に表示して、ソフトでの設定値を決めると良い。)なお、VSENSEラインをAVRの出力ピンで制御しているのは、瞬間的にパルス的にVSENSEラインをLにするためである。もし、VSENSEラインを常にGNDに接続しておくと、その分、常に電流が流れてしまい、システムは低電流化をできなくなる。測りたい時のみ、AVRの出力ピンをL(GND)にすれば、その時のみ電流消費とできる。もう一点、低電流化のためには、普通はStop ADCでADCを止めておき、測る時のみStart Adcとすること。なお、Start ADCの後には、Waitus 250 等のウエイトを付ける事。Start ADC後は、すぐにはADCが起動できない。(AVRとBASCOMのマニュアル参照。)
 設計したシステムにおいては液晶表示がONされている際に(300uA以上の電流消費)、10秒おきにモニターするようにしている。そこで検出電圧が設定値を下回ると液晶表示にWarning messageが出るようにしてある。 p.s. Mega1284は2.8V以下でも動作可能であり(内部8MHzオシレーターでは1.8V程度まで動作)、電池電圧の低下によって定電圧値以下に3端子レギュレーターの出力電圧が下がってもAVRは動作し続ける。以上により、Li-Polymer電池の2.8V以下での使用による劣化を防ぐことができる。 (液晶表示がOFFの場合は10uAレベルの電流消費なので、おそらく、電池劣化はあまり起こらないと推測される。)
 注:いろいろ調べるとLi-Polymerの終端電圧は2.8Vではなく、3.0Vといった記述もあるので、3.0Vに電圧降下検出電圧を設定した方が良いと思われる。

(8)Epson社のグラフィック液晶制御ボードのAVRとBASCOMによる制御

8-1 EpsonのS5U13781R01C100ボードを使った例

 大阪日本橋の共立電子産業(シリコンハウス、およびデジット)で2in1という液晶セットが売っていたので、購入し、実験してみた。このセットは非常に安い(たしか、なんと、セットで2500円!だったような気がする。もう忘れた!)箱の中身は、4.3インチ、480x272画素、24-bit フルカラー液晶( Data-Image社のFG040346DSSWBG03)とEpsonの新しいコントローラーボード(S5U13781R01C100)の2つが1つの箱に入っている(要は2 in 1)。 FG040346DSSWBG03 液晶は画像を表示した場合は6章に述べたように視野角が若干狭いが、グラフィクスに対しては十分である。セットに入っているEpsonの新しいコントローラーボードは6章で述べたS5U13781R00C100 の簡易型であり、R00とR01の違いは、R01はSPI I/Fのみのインターフェースで、かつ、画像を蓄えておくEEPROMが乗っていない。また、 液晶のピンを変換するコネクター部は簡略化されており、多くの標準的な4.3インチ液晶や3.5インチ液晶をピンジャンパー無しでそのまま接続できるようになっている。6章で4.3インチ液晶を使った際はR00ボード上のピン番号変換ソケット部にジャンパーをはわす必要があったが、R01では、2in1 セットの液晶を使う際には何もする必要が無い。

img3

上の写真は2in1セットにより、カラーグラフィックを表示した例。一番上が4.3インチ液晶。左下がEpsonのボードでこの二つがセットで売っている。右下にはEpsonボードを制御する小型のAVRボード(ATMega168ボード:共立デジット。ダイレクトに別電源から3.3Vを与えるようにしてある。)がある。そのAVRボードからSPI I/Fで制御する配線(GNDを入れて5本)がEpsonボードのJ2コネクターに走っている。その他、AVRボードに供給された+3.3V電源から、Epsonボードに+3.3Vを供給する線が2本、ボードのJ1コネクターに走っている。ここで、電源は+3.3Vにしないといけない(Epsonボードの仕様)。
 単にこれだけで動く。なお、以下に少しだけジャンパーやDIP SWの設定が必要なので、述べておく。

Epson_jumper

EpsonボードのJ2, 6-pinコネクターの5番ピンからSPI の/SSを供給する際にはR5にゼロオームのショート抵抗を実装する必要がある。写真中央の緑の線がそれ。なお、これを行わない場合はJ3のコネクターから/SSを供給することもできる。今回は面倒なのでJ2から供給するようにジャンパーした。
 写真の中央下に有る、小さな白いキーのDIP SW (SW2)は、セットについてきた液晶のバックライトLEDの電流がtyp. 20mAであるので、以下のように設定する。SW2上に記述のあるS1とS2はON。S3とS4はOFFとする。こうしないと、もっと電流が流れて、液晶のバックライトが壊れるかも?

epson_connect

全体の配線を写真に示す。写真中央のR01基板左側の6-pinコネクターがSPI I/F用。R01基板下の1列コネクターがJ1で、電源供給用。それらのピン番号はEpsonのページからR01の資料をダウンロードし、そこにある回路図を参照。なお、回路図は小さいのでPDF readerで拡大して調べる。 1番ピンのマークはボードの白いシルクの矢印や、コネクタ裏面のランドパターンが1番だけが四角いので分かる(他のピンは丸)。

 AVR側の配線をPDFで添付する。そこにあるように、注意として、本来のSPI I/F /SSであるPortB.2は/SSとして使用しない。これはEpsonボード側が/SSに信号を出力することもあるようで(実際は調べていないので未確認)、そのような場合、AVR側はSPI Masterではなく、Slaveの処理も行ってしまい、結果としてAVR側からはうまく制御できないという事例があったためである。したがって、添付した回路図ではPortB.1を/SSとして使っている(PortB.2以外ならどの出力ポートでもよい)。なお、PortB.2はプルアップしてあるが、その理由については、別ページの「BASCOMのくせ」を参照。なお、Epsonボード以外のSPI I/Fを使う素子(常にSlave)に対する/SSとしてPortB.2を使ってもよい。

 表示を行ったBASCOMのソースを添付する。R01の水晶発振子の周波数は1MHzであり、R00の24MHzとは異なるので、PLL設定レジスターの設定値は6章とは異なる点に注意。 (添付したBASCOMソースを参照。)これでデモ画像が出る。 著作権は主張しないので、ユーザーの責任での改造は自由。(なお、本ページの最後にある免責事項を参照。) 今回の試作ではAVRはATMega168を使って、Flash占有率は約70%だった。より大きなFlashを有するMega328やMega1284などを使えば、もっといろいろな作業(各種測定データーのAD変換・読み込みや、それらのデーター処理)を、余裕(Flash, SRAM容量)を持ってする事が出来る。

 このEpson R01ボードはArduino用に作られたらしく、共立ではArduinoボード(このボードは8-bit AVRではなく、Atmelの32-bit ARM)もセットにした4in1セットも売っていた。なお、このArduinoだとC++でやらねばならず、また、8-bit AVRよりも高価。筆者はこれまでのBASCOMのソフト資産を生かしたかったのと、簡単、廉価なAVRでやりたかったので、今回の作成となった。この構成は、ATMegaによる 簡単なスタンドアローン(PC接続なし)自作実験装置で廉価なカラーグラフ表示を実現する際に使える。

8-2 EpsonのS5U13781R00C100ボードを使って、3.5インチ液晶の例

6章ではEpsonのS5U13781R00C100ボードによる4.3インチ液晶の例を述べてあるが、共立からR00とセットで売られている3.5インチ液晶のカラーグラフィックに対するAVRとBASCOMの例は示していなかったので、ここで述べておく。(この節に述べているボードは、R01ではなく、R00に注意。要は8-1節のボードではなく。6章で述べた前のバージョンのEpsonボード。)
 今回の試作で使用したセットは、共立の3.5インチ液晶セットである。それに入っている液晶はTopway社のLMT035KDH03であり、これに合わせたピン番号変換基板も同封されているので、ピン変換部はジャンパーをはわせることなく、すぐに使用できる。LMT035KDH03はカラー濃淡画像を表示しても十分な性能があるので、そのような画像を表示したい時はこのセットを買うのもよい。

LMT035

試作したシステムは写真のようなもの。(写真ではけっこう照明の背景光が強いが、十分に視認できている。要は液晶のコントラストが良い。)この構成ではATMega168でEpson R00ボードをBASCOMで制御。R00基板のコネクターのピン番号等は6-4章を参照。注意として、Epson R00ボードの液晶とつなぐFPCコネクターは全部で55ピンあるが、液晶の方は54ピンしかない。したがって、1ピン余るが、それを以下のようにうまくコネクター接続の調整をしないと画像は映らない。Epson側の55ピンコネクターの1番ピンに、しっかりと液晶側の1番ピンがはまるように、位置をしっかり合わせる事が重要。
 上の写真のシステムのBASCOMソースを添付する。LMT035KDH03 に合わせた同期信号(HD, VDなど)を発生するように、6章の4.3インチ液晶とはEpson R00コントローラーのレジスター設定値が少し異なる。 その他は6章も参照されたい。

 この3.5インチ液晶をR01ボードで制御する方法もありえる。その際は、上記のBASCOMプログラムを参照すれば同様にできる。(注:R01の54ピンコネクターにLMT035KDH03を変換無しで接続できるかは検討していないので、読者で調べてください。)BASCOMのプログラムはR01ボードを使う際はR01上の水晶発振子(1MHz)とR00上のそれ(24MHz)とは周波数が違うので、PLLレジスターの設定値を変える必要が有る。参考プログラムとしては8-1章のBASCOMソースを参照。


p.s. 共立では今のところ、LMT035KDH03とR01のセットは販売していないようである。個別に買うしかないかも?

免責事項:当サイトを参照して試作および商用した機器による
人的、商的、および財産的損害等については当方は一切責任を負いません。
あくまで技術的資料として参照し、利用者の責任においてご利用ください。
当サイトに添付されたソフトを参照、利用、および改変して、試作および商用した機器による
人的、商的、および財産的損害等については、前記のハードウエアに対する事項と同様に、当方は一切責任を負いません。
あくまで技術的資料として参照し、利用者の責任においてご利用ください。

目次に戻る

トップページへ