● 実験テーマ100
「PIC24F_カラーOLEDの表示実験_2」
(今回は解像度の高い、1.5inch
128*128dot 16bitカラーOLEDの表示実験です。ちょっと輝度が低いのが気になりますが・・)
以下、この実験の顛末記です。
■ 2017.12.6
・マイHPの、実験テーマ更新も、今回で、節目の100回目。
ちょっと高価だが、キャリーボードもあっってスマートなので、1.5inch
128x128dot 16bitカラーOLEDの表示実験
にしようと思う。
<使用OLEDの概要: 販売先=aitendo>
@ OLEDモジュール: NVK-128SC008F
"韓国製:Neo View KOLON"→ 2480円
A コントローラIC: LD50T5128M "韓国製:LDT
INC."
B キャリーボード: IFB-NVK-128SC008F
"aitendo"→ 150円
・ただ、Web上を検索しても、日本人で未だこれを動かした記事は、無い様子。
一人だけ記事があったが、成功してなく保留にされているようだ。→ このサイトです。
なので、aitendo HPにある資料と、コントローラICのデータシートだけを頼りに、チャレンジということで
不安はあるが、おもしろいかも。
この位解像度があれば、MP3プレーヤの表示器として使えそう。
・早速、aitendo
HPにあるコントローラICの、データシートのリンクをクリックすると、手違いなのか、SSD1355
"香港製:SOLOMON SYSTECH"
が出てくる。ブロック図を見ると、 LD50T5128Mとはだいぶ異なっているので互換品という訳ではないようだ。
それで別サイトからダウンロードした。
今度のは、VDD=2.8Vtyp, VCC=16Vtypとちょっと特殊な電源電圧設定。
VDDの方は、3.3Vが上限ではあるが、絶対最大定格では、4.0VまでOKなようなので、通常通リ、3.3Vにした。
消費電流のことを考えれば、2.8VのレギュレータでPICも含めて動かした方が良いと思うが今回は実験なので良しとした。
またVCCだが、モジュール内部にDC/DCは内蔵されてないので、別途用意する必要がある。
この前のテーマで使った、LT1172CN8だが、リファレンスの抵抗値を変えれば、15Vを、16Vに変更することが
出来そうなので最初はそれで試してみることに。
■ 2017.12.8
・LT1172CN8のデータシートを見たが、16Vまで出力可かはよく判らなかった。
電圧設定の式を見ても、スイッチング式なので、さまざまなファクターが絡んできて理解に苦しむ。
出力電圧を分圧して、それをコンパレータの基準電圧ピン:FBピンに入力しているような構成
なので、自分なりに考えてみた。
常に基準電圧=1.24Vにバランスするはずなので、それでフィード・バック抵抗を計算すればよいはず。
以下は、出力電圧=15V時の回路図であるが、R21を、1.5kから、2.7kに変更すればよいはず。(結果的には駄目でした。)
■ 2017.12.9
・このOLEDには、プリチャージピンが、RGBそれぞれで、3ピンあり、そこに規定電圧の、ツェナーダイオード
(BPREピン= 2.4V, GPREピン= 2.0V, RPREピン= 2.0V)を実装する必要がある。
小物パーツを手配しないといけないが、Vz=2.4Vのツェナーが特殊のようで、どこにも在庫が無い模様。
マルツで取り寄せてもらうことにした。納期は、5日ほど掛かる。
また、OLEDモジュールとキャリーボード間の接続に、0.5mmピッチ、26pin、上接点の、FFCコネクタ
が必要だが、これは、aitendoで安く手に入る。
・ソフト検討に入る。
前使ったコントローラIC:SSD1332と、バス系は同じ(8080系
8bitバス)なので、レジスタ書込み関数は
同じで行けるはず。
ただコマンド体系は異なるので、そこはデータシートを眺めながらの作業になる。
とりあえず、aitendoのデモ・サンプルコードを見てみる。
初期化以外も書いてある。
見ると、最終的に、128x128のイメージ描画をさせようとしているようだが、こんなこと言っちゃなんだが、
ソースはいい加減に書いてある。
そもそもイメージデータが省略されている。
コントローラのデータシートのコマンド仕様と照らし合せて見ると、何となくだが動きが見えてきたので、
とりあえず、ドット描画関数を書いて、それでRGB565のイメージを描画するところから始めてみる。
■ 2017.12.11
・Step1として、全面クリア→初期メッセージ表示(フォントは前テストと同じのを使用→5x8dot(+スペース3dotで実質8x8dot)
→ 128x128戌年イメージ表示まで書いてみる。
■ 2017.12.12
・全画面クリア関数を考える。
今回のコントローラのドット描画コマンドは、データシートに説明のある、
「Dot Matrix Display Writeコマンド」:0x08
が相当すると思われる。」
漢字フォント表示は保留にして、キャラクタ(ANK)文字のみで表示テストプログラムを書き上げた。
ところが、コンパイルすると、NG。
どうも、imagedata.hのサイスがラージらしい。
約32kバイト食っている。
PIC24FJ64GA002の、フラッシュROM領域は、全64kバイトあるが、MPLAB
IDEの、Memoryゲージ
で見ると、約22kバイト(PIC24Fのメモリーマップは、1番地16bitのワード単位で、2番地置き)がユーザーが使える
領域になっているようだ。
なのでエラーになっている。
・後閑さん式の、イメージデータ(単色カラー)のものなら、上下各約1kバイトなので、2kバイトで済む。
今回はこれにしておく。
■ 2017.12.13
・aitendoからパーツが届いた。
■ 2017.12.16
・パーツ全て揃う。
実験用ユニバーサル基板(DC/DC+VCC_ON/OFF)の製作も完了。
キャリーボードへの部品実装も済んだ。
パターンは全て、チップ部品用になっているが、ダイオードだけはチップ(確かガラスの筒状で両端が平丸状電極)
が特殊で入手が難しいと思いリード部品を実装した。
ネックだった、FFCコネクタ(0.5mmピッチ
26pin)の実装も何とか済んだ。
尚、OLEDが動くまでは、両面テープでの固定はしないことにした。
・いよいよ通電チェックへ。
実験用ユニバーサル基板のチェックから。
ショートチェックの後、電源チェックを行った。
実際やってみると、VCC→ 6Vしか出ない?
VCC規格では、16Vtypとあるだけで、minとmaxは明記されてない。
(このDC/DCは、Vin=5Vだと、VCC=15Vがリミットなのか?)
基準電圧のところの変更した抵抗値の計算を再度確認したが、間違いはなさそう。
いろいろと調べている内に、分圧抵抗の内、R22が、15kでなく、51kが実装されていたのに気が付く。
どうりで出力が低くなる訳だ。
しかし15kに交換しても駄目だった。VCC=5V?
よくよく配線を見ると、もう一つ誤配線を見つけた。(ちょっとミス多過ぎ・・)
VCピン(2pin)のR19=1kの片側が、GNDになっていた。
直したら、VCC=15.9V出たが、暫くすると、0Vに向かって下降を始めた。駄目じゃん。
この時、LT1172を手先で触ると、やに熱い。もしかしたら破損したか?
Vin=5Vだと、VCC=15Vがリミットなのかもしれない。
破損したかどうか、このICを前テーマで作った、VCC=15V設定の実験基板に差替えてみた。
同じ症状だ。破損したようだ。
他のDC/DCを試すしかないか・・・
■ 2017.12.17
・いろいろいじってICを破損したようだ。
前の基板に差替えた時は、14.92Vから次第に、15.0*Vまで上昇した後、DC/DCが熱くなり、シャットダウン
する。内部の保護回路が働いているのかと思い、暫く時間を置いてから、電源ONしても同じ。
単体のDC/DCと周辺のディスクリート部品で構成するより、秋月のDC/DCモジュールを活用した方が
安く済むし良いかも。
電流容量に余裕のある、AE-LMR62421(T.I社DC/DC使用・Vin=2.7V〜5.5V・Vout=3.5V〜24V可変式)
を注文した。
■ 2017.12.18
・NEW DC/DCモジュール、秋月から届く。
実験用ユニバーサル基板改造作業時、+16V出力を間違えて、VCC_ON(C1815ベース側)に繋いでしまった。
PIC24Fトレーニング基板の、VDDが、3.20Vまで下がった。(以前は、3.24V)
RA2入力ポートに16V印加で、たぶんPICにダメージを与えている。
念のため、PICを交換した。
以下は、改造後の、実験基板の外観写真です。
交換後、DC/DC電圧チェック。
モジュール無負荷にて、購入時の多回転トリマの位置では、約15.5V出ていた。
多回転トリマを回して、16.0Vにアジャストした。
OLEDモジュール未実装では、VDD=3.24V, VCC=16.00V
実装すると、VDD=3.24V, VCC=15.96V〜 15.99Vだった。(画面状態によって変動)
・いよいよ動作チェック。
@ 何となくバスは動いている感じ。
A VCCが表示内容によって若干変動している。(テスターにて)
15.96V〜 15.99V(VDD=3.24V, 5V入力=5.22Vで変動してない。)
B 大方、テストメニュー通リ表示しているようだが、非常に暗い。
・シアンとグリーンの区別がつかない。色が正常に出てない。
・メッセージも出てることは出てるが、字数の関係が合ってないような気がする。
(ASCII文字192文字/1画面出るはずだが、後半が出てない?)
・イメージ描画は、フル画面出ているようだが、非常に暗い。
C OLEDモジュールに、ツェナーが3つ繋がっているが、各ツェナー電圧になってない。
これはたぶんダイナミックにスキャンされている信号だからと思われる。
テスターで測ると、2.0Vツェナー= 0.8V位、2.4Vツェナー=
1.0V位
D VCCのリップル実測≒ 0.22Vp-p
パスコン22u追加で≒ 0.18Vp-p(リップルパルス幅が狭くなる。)と若干現象するが、症状変わらす。
■ 2017.12.19
・暗いのは、暗いが、それよりも色が正常に出てなくて、全てが、緑に寄った色になっている感じ。
色コードは、16bitコードを、下位・上位8bitに分割して2回、コントローラに書込んでいるので問題ないと思う。
これについて他に、どこを追ったらよいのかも判らないまま、モジュールとコントローラのデータシートを
眺めていたら、回路上の定数について、両者のデータシートの記述に食い違いがあることに気が付いた。
Dot Matrix Contorollerの、基準クロック・ブロックの所の定数が怪しい。
モジュールのデータシートに記載されている、アプリケーションの回路例では、OSC1ピンと、OSC2ピン間の
抵抗:R2=10k(キャリーボード上のシルクも同じ)であるのに対し、コントローラのデータシートの説明では、
R2=39kになっている?
■ 2017.12.20
・とにかく表示が暗過ぎ。色もおかしい。
プリチャージ設定系がおかしいと思われるが・・・
以下に調査した項目を整理してみた。
@ まず、R2=10kでよいのか?
テスターの周波数計で、OSC2(19pin出力)を見てみたが、レベルが低いのか、上手くトリガが取れないのか
表示によって変動しているよう。(1MHzmax位で、規格の3MHzは出てなさそう。)
何故か、プローブで、OSC2ピンを触るだけで、多少だが色別が可能な位、明るくなる。
A R2=10k, R1=39k(IREFピン)周辺の半田付け状態を見る。→ 良さそう。抵抗値も合っている。
B 今回のコントローラのコマンド・データセットは、コマンドと、データそれぞれ別に、RS(A0ラインを切替えて
送っているが、コマンドは正しそうだが、データ送信(書込み)関数をチェックしてみる。
これもよさそう。また、PIC-15:RB6(RS)→ OLED-9:A0の導通もOK。
・結果整理
(1) 色が、緑系しか出なかったのは、
OSC1-OSC2ピン間の、R2の値が不適当だったせいと判明。
(データシートにどんな発振回路なのかの詳細が記載されてないので、理論的なことはよく解らないが・・・)
モジュールのデータシートの回路例と、キャリーボード上のシルクによれば、R2=10kだが、コントローラの
データシートによると、外部抵抗R2= 39kΩと明記してある。(もしかしたら、IREFに入っているR1=39kと、このR2=10k逆なのかとも思ったり・・)
そこで39kに変更したら、色は正常に出る様になった。
しかし明るさは未だ暗い。
(2)
明るさに関しては、以下を試す。
@ IREFの、R1=39kに、15kをパラにして、11kにしてみたが、そんなに変わらず。
39kがスペック上の、typ値なのでいじらないことに。
A レジスタでは、輝度に関しては、次の2つが関係ありそうなので、設定値を変更してみた。
・Dot Matrix Current Level Set: コマンド= R:40h,
G:41h, B:42h
現状は、データシートのサンプル通リ(aitendoのサンプル・コードも同じ)
R= 0x40→ 64uA, G= 0x1A→ 26uA, B= 0x31→ 49uA
この比率を変えないで、2〜3倍(但しMAXは、255uA)に変更してみたら若干明るさが改善されたので
3倍の値に設定変更→ R= 0xC0→ 193uA, G=
0x4E→ 78uA, B= 0x93→ 147uA
・Peak Pulse Width
: コマンド= R:3Ah, G:3Bh, B:3Ch
現状は、データシートのサンプル通リ(aitendoのサンプル・コードも同じ)
R= 0x03→ 3uS, G= 0x0F→ 15uS, B= 0x05→ 5uS
この比率を変えないで、2倍(但しMAXは、31uS)に変更してみたら気持ち明るさが改善されたので
2倍の値に設定変更→ R= 0x06→ 6uS, G=
0x1E→ 30uS, B= 0x0A→ 10uS
■ 2017.12.21
・今の時点で、一応ハードはFIXとする。
前テーマの、96X84dotカラーOLEDと同程度の発色にはなったと思う。
なので、OLED裏の両面テープと、表面の保護シートを剥がして、正式にキャリーボードに貼付け固定し
写真取りをしてみた。
このページトップに写真があるので以下にはチョイスした表示例のみ示した。
保護シートを剥がしたが、剥がす前と明るさの差異はなかった。
OLED裏面に貼ってある、シリアルNo.らしきシールがちょっと気になった。
黒バック(フィルBOX全クリア)以外の時、中央≒0.8cm
x 0.8cm四方がやや白けるのが気になった。
裏面のシールのせいなのかな? シールのサイズ分は白けてないので、そうではないと思うが。
まあ私的には黒バック以外でクリアすることは無いので気にしないことにした。
もうちょっと明るくなってくれないかなと思い、VCC=16Vを若干上げてみた。
絶対最大定格では、20Vmaxとなっているので、16.5V位まで上げてみたが変わらず。
逆に15.5Vに下げても、そんなに変わらなかった。
VCC=16Vは変えないことにした。
・上のASCII文字表示の写真を見ていただくと判るように、1画面に、全192文字表示されていません。
またよく見ると2行目からのスタートキャラクタがズレテいます。
','になっていますが、'0'から始まるのが正解です。
プログラムを見直し、これもOKになる。
・色々やって来たが、このOLED、ドットマトリックスの、スキャンタイミングを細かく設定出来るのだが、私のやった実験
の限りでは満足な明るさを得ることが出来てない。
ちょっと暗め。周囲が明るいと気になる。
こんなもんなのかなあ〜〜 まあ理解不足もあるが・・・
■ 2017.12.22〜 2017.12.23
・全体的なまとめに入ることにした。
8x8dotフォントでは、ちょっと文字が小さいので視覚性はあまり良くない。
漢字を出したいこともあり、12x12dotフォントも試すことにした。
SJIS漢字コードテーブルは、[7896]x[18]≒ 142kB必要。
なので、PIC24FJ64GA002の、ROMユーザー域≒20kBにはとうてい入り切れずOUT。
そこで後閑さん作成の、必要な感じのみをチョイスして容量を減らしたテーブルを使うことにした。
これだと、[256]x[18]≒ 4.6kBで済む。
これも上手く行く。
・ドットマトリックスの制御波形を取っておこうと思うのだが、columnと、rawラインのタイミングを直接
見ることは、フレキケーブル内なので不可能。
だが、プリチャージのところは、ツェナーが接続されているところで観測できる。
この波形を中華オシロと自作オシロで取得してみた。
それらしい波形が取得出来たが、この周期が正しいのか等は、データシートを見たが記載されてないようで
判断のしようが無かった。参考にならないかもしれないがアップしておきます。
■ 2017.12.24
・暗いのが未だ気になる。
さらに試行を。
前試した、カレント・レベルと、ピーク・パルス幅を、MAX近くまで増やしてみたが変化無し。
他のレジスタ関係(ピーク遅延時間等)も試したが変わらず。
とにかく、コントローラ:LD50T5128Mの詳細情報が少なすぎて作業進まず。(主な理由は自分の力量不足だが・・)
データシートも、初版の、2005年6月から改訂されてない。
・ここで年内にやっておこうと思ってたことがあったので、やることに。
それは、今年7月ごろから配布が始まった、Windows10の、大型アップデート(Fall Creators Update:V1709)である。
ダウンロードは先々月既に終わっているので、インストールするだけの状態にはなっていた。
webを見ると、色々インストール時の問題が多いらしいので、暫くは躊躇していた。
コントロールパネルから、[今すぐ再起動する]ボタンを押して、インストール作業を行った。
インストール中も何回か再起動が行われ、約1時間30分ほど掛かって何事もなく無事終了した。
後は、個々にアプリを動かして動作確認をしないといけないが・・・
■ 2017.12.25
・今日は、現状での、VCC=16Vの、リップルと、IREFピンの抵抗を変化させた時の、IREFピン電圧を確認してみた。
以下のような結果となり、いずれも輝度にはさほど関係はなかった。
・昨日の、WIN10 FALLアップデート後、
MPLAB IDE X8.60でのコンパイル時、「pic30-im.exeは動作を停止しました」ダイアログ発生。
[プログラムの終了]を押すと先に進むが、もう一度(次のモジュールのコンパイル時)同じダイアログ発生。
[プログラムの終了]を押すと今度は最後まで進み、コンパイル成功となる。
このHEXを、Pickit2で書込んで実行すると、一応動作はしている。
これは、他のプロジェクトでも同じだった。
※ この問題解決した。
互換モードを、windows7に設定して、MPLAB
IDE V8.60アプリを起動して、コンパイル実行したらエラーは発生しなくなった。
やれやれ。
一度インストールした、V1709のWIN10を、以前のバージョンにも戻せるようだが、
一部のアプリとかは再インストールの必要があるようだし、更新後の設定したデータは全て消去
されてしまうので、やめたほうが無難。
■ 2017.12.26
・輝度について、今迄色々試したが、決定的な対処法見付からず。
十分な輝度は得られなかった。特に、周囲が明るいと暗さが気になる。
ちょっと暗めなのが残念だが、一応全ての描画テストは、OKだし、web上でもこのOLEDの製作例の記事が
皆無な中、動かしたのは成果だと思っている。
まとめの写真は、このページトップを御覧ください。
<回路図>
・こちらから、どうぞ→ 「PIC24F_カラーOLED実験_2」
<最終ソース及びヘッダファイル>
・こちらから、どうぞ→ PIC24F_COLOR_OLED_TEST_2.c
///
カラーOLEDライブラリ
LD50T5128M_OLEDlibPIC24F.c
LD50T5128M_OLEDlibPIC24F.h
///
アスキーフォント
ASCII_font.h (8x8dot)
ASCII12dot.h (12x12dot)
///イメージデータ
imagedata.h