OLED(有機EL)高速駆動
PMOD用にZyboに繋がるOLEDがDigilentから販売されているので今回試してみました。
こちらのページのとおりやってみるとあっさり動作しました。
Digilentのライブラリの充実っぷりに驚きです。
次にこのOLEDパネルを、高速度撮影の出来る Sony の Xperia XZs で撮影してみました。
机上で計算した限りデフォルト値では、102fps程度の動作のはずです。なのでカメラの露光時間で64line × 102/960 = 6.8ラインが写っていれば目論見どおりです(やや幅広な気もしますが、こんなものな気もします)。
で、ここからデータシートと睨めっこです。どうやらもっとも発行時間の長い GS63 (輝度が6bitなので輝度値63の時の点灯時間)が基準になっているようです。
Digilentのサンプルソースから、初期設定箇所を探して、GS1~GS63 まで 32個あるテーブルを書き換えるコードを追加してみます。ついでに画像も書き込む前に2値化(つまり8色化)してます。
GS63をあまり小さくすると何も見えなくなってきたので、最終的に5まで下げました。
多少試行錯誤はしたのですが、階調さえ落とせば高速化したように見えます。
なお、このおじさんの写真はDigilentのサンプルプログラムに埋まっていた画像です(誰なんでしょう? 開発者とかなのかな? (^^;; )。
データシートに従って机上計算したところ、内蔵オシレータが Typical値想定で 869Hz 出ているはずです。
960fps撮影なので1コマの間に概ね画面全体が写っていれば正解のはずです。
しかし、ローリングシャッター歪が見えないのはなぜだろう....(悩み)。高速度撮影時もローリングひずみ除去処理が入ってたら逆に計測性が難しくなるなぁ。
今回買ったボードはPMODからSPI接続ですが、SSD1331自体は1cycle 130nsでのパラレル書き込みも出来るようです。
なので、PMODから一旦LVDSなどで出してSERDESデコーダICを載せたボードを起こせばハイフレーム駆動できるんじゃないかと予想しています。
ただ、SSD1331以外のコントローラだと書き込みが300nsというのが多いのですよね(謎)。OLED自体はaitendoさんやAlibabaなんかで安いものが出回っているので、もう少し安くて解像度があって書き込みの早いやつが無いかと探し中です。
先がだいぶ楽しみになりました。
(2018/02/19追記)
パラレルモードでの書き込み速度を調べてみました。
SSD1331 96x 64 130ns
SSD1351 128x128 300ns
SSD1352 160x128 300ns
SSD1353 160x132 300ns
SSD1355 128x160 300ns
SSD1357 128x128 不明
SSD1331以外、結構遅いようです。内蔵メモリの構造とかかなぁ?
困っりました、SSD1331を4枚並べて面積を増やすぐらいしか思いつけない....
« 電脳メガネ開発計画(?) | トップページ | 視覚のハッキングについての考察 »
「FPGA」カテゴリの記事
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
コメント
この記事へのコメントは終了しました。
初めまして、タクミです。こちらの情報参考になりました、ありがとうございます。
質問なのですが、輝度値を変更することでfpsの向上が見込めるとなっていて、
「Digilentのサンプルソースから、初期設定箇所を探して、GS1~GS63 まで 32個あるテーブルを書き換えるコードを追加してみます。ついでに画像も書き込む前に2値化(つまり8色化)してます。
GS63をあまり小さくすると何も見えなくなってきたので、最終的に5まで下げました。」
と記述してありますが、それはどこでへんこうしたのでしょうか?
投稿: タクミ | 2021年2月 5日 (金) 16時21分
タクミ様
基本的にはここ等のSSD1331のデータシートにレジスタ情報や読み書きに必要なインターフェース仕様は含まれております。
https://cdn-shop.adafruit.com/datasheets/SSD1331_1.2.pdf
私の作った設定用のソースコードはこちらになります。
https://github.com/ryuz/jelly/blob/master/projects/zybo_z7_imx219_oled/app/oled.cpp
193行目あたりと思いますが、今見返すと、あれこれやった結果と思いますが、結局GS20以下は0、それ以上は 5 という設定になってますね。
投稿: Ryuz | 2021年2月 5日 (金) 18時15分
Ryuzさん 返信ありがとうございます。
設定用のソースコード送っていただきありがとうございます。
こちらを拝見させていただいたのですが、これは「 PmodOLEDrgb.h 」内に追記したものでしょうか?
もしそうであれば追加で<#include文>も追記しなければいけないと思いますが、
Ryuzさんも参考にしたhttps://www.instructables.com/Getting-the-PmodOLEDrgb-to-Work-on-Zybo/
のサイトからでも引用できないのですがどのようにしたら対処できますか?
初心者なので、勘違いが多くあるかと思います。
現状としては100fps程度の発行までは出来たので、より高速化させていきたいところです。
お返事お待ちしております。
投稿: タクミ | 2021年2月 6日 (土) 22時35分
タクミ様
少し誤解があるような気がしております。このページはこの後の
http://ryuz.txt-nifty.com/blog/2018/03/led-44f3.html
この記事で改造基盤を作るに先立っての事前確認で、SSD1331 のレジスタを弄れば、階調を犠牲にしてフレームレートが出せる設定が作れることを確認しただけのものです。
パネルのリフレッシュレートだけを上げても、肝心の書き込み速度が遅いまま(SPIやI2C)では残念ながら無意味です。
既に8080インターフェース等で高速に書き込む手段をお持ちでしょうか?
そうではなく、SPIやI2Cで動作できる範囲でいろいろ設定を変えて遊びたいという範疇であれば、既にサンプルは動いているようですので、データシートをよく読んでサンプルを理解するところから始められるのが良いかと思います。
よろしくお願いいたします。
投稿: Ryuz | 2021年2月 8日 (月) 23時16分