« エラーのないFPGAのUARTコードを自作する | トップページ | フォトフレーム: デジタル液晶インターフェース実装 »

2010年9月11日 (土)

フォトフレーム: デジタル液晶を動かす準備

 前回のブログから2週間以上日が空いてしまった。珍しく連続して仕事があり電子工作に時間がとれなかったこともあるが、何かひとつ大きな懸案が解決すると暫く気が抜けてやる気がなくなるという、いつもの癖でもある。

 こういうときは、細かい手仕事か全然別の工作のことを考えて気を紛らし、意欲が復活するのを待つ。そういうことなら、リニアPCMプレーヤーを作ったお陰で、最近音を出す機会が急に増えたオーディオ装置に手を加えたいものがある。この装置は昔々、オーディオに凝っていたときに揃えたQUADのセット(405、44、CD67)と、タンノイのスピーカー、Berkeleyである(憧れのAutographまでは手が出なかった)。

A9103077

 音域は広くないが落ち着いたクラシック向けの音で30年近く愛聴している。スピーカーは、さすがに最近、音に艶がなくなった(近々修理に出す予定)が、アンプは一度電源コンデンサーを交換したくらいで元気に音をだしてくれている。

 しかし、リモコンに慣れた体には音量調整にいちいち装置まで腰を浮かすのがつらい。電子ボリュームというICがあるのは知っていて、いずれはリモコンを自作してやろうと思っていた。それがウェブをさまよっていて、TI(BurrBrown)のPGA2311というICを見つけた。こいつは他の電子ボリュームICに較べると、値段は3倍以上するが、歪み率が2桁近く低いことがわかった。どうも高級オーディオ用のICのようだ。3倍以上といってもDigikeyで一個¥1000近辺で買える。

 ちゃんとしたオーディオセットにはこれくらい奢(おご)ってやりたい。急にリモコンが作りたくなってきた。仕事の帰りに久しぶりに秋月に寄り、沢山ある赤外線受信モジュールのひとつ(シールド付き、PL-IRM0101-3 ¥110 )を買ってきた。ロジアナにつなぎ、リモコンを当てると、さまざまな波形が即座に見える。フォトフレームそっちのけで、ウェブを見ながら家中のリモコンを片っ端から試して面白がっていた。

I00622

 そのうち、いつもこのブログにコメントを寄せてくれるshuji009さんが、電子ボリュームを使った工作を計画していることを、すんさんの電子掲示板で知った。うーむ、どちらも示し合わせて始めたわけではない。何か同期しているようだ。そんなこんなでフォトフレームプロジェクトの方は進捗が遅い。でも、少しづつ作業は進めている。

デジタル液晶の準備(8/31/2010)
 半かけで放置してあったデジタル液晶のケースの工作を再開した。この液晶は、アナログ液晶と一緒にAitendoの決算バーゲンで買った7インチのWVGA(800×480)のワイド液晶パネルである。韓国製(DMMT-7000WVGA)の新品で、シャープのLQ070Y3DG01のコンパチをうたっており、店には元の液晶もあったが中古だったので新品のこちらの方を選んだ。

S_a9093056

S_a9093074

 18ビットRGBで26万色出るデジタル液晶である。クロックはこれまでの6Mhz台ではなく、一気に30Mhz台に上がる。素人がいじる限界の周波数だ。液晶を2台買う時に、アナログと同じ仕様というのも芸がないと思って、少し背伸びしたのだが、30Mhzというと今のFPGAのマスタークロックとほぼ同じだ。SRAMのアクセスが心配である。S_a9093061

 インバータは別付けで既に用意がしてある。インバーターを裸で使うのはちょっと怖いので、この前に壊した最初のカシオのアナログ液晶のプラスチックケースにインバータ基板を入れる工作にとりかかる。インバーターと、フレキケーブル変換基板を、液晶パネルの裏面に5ミリのスペーサーをエポキシ系接着剤で固定して、そこへネジ止めする。スペーサーは接触面積が少ないので瞬間接着剤(シアノクレート系)では、ちょっと力をかけるとすぐはずれるので使えない。S_a9093055

 ケースと液晶パネルの固定は、ケース表面の4隅にパネルが固定されるよう寸法を正確に測った小さなアクリル小片を接着し、パネルが中で動き出さないようにしてから、ケースの裏面に固定用のアクリル板をあててケースのネジ止めで全体が動かないようにする。このあたりは瞬間接着剤でも十分だ。うむ、うまく行った。

S_a9093064_2

 電源は迷った。インバーターはENABLE用のTTL入力を要求するので、12Vと5Vが必要になる。抵抗分圧でも良いが、液晶のロジック部分の電源は3.3Vが必要である。迷った挙句、5Vと3.3Vのレギュレーターを2段使って12Vアダプターから供給することにした。インバーター用とロジック用の電源は分けた方が良いとされているが、パネルに2つも電源コードがつながるのはみっともない。まあ、このあたりは問題があればいつでも換えられる。

S_a9093068

 エポキシの乾燥は時間をかけると強力になるので1日置いてから組み立てにとりかかる。電源アダプターは、最初のとき開けた穴を流用する。フレキケーブルが長すぎたがそう問題ではない。変換基板からはフラットケーブルでFPGAにつなぐ予定だ。 インバータ部の配線が終わったので、とりあえず12V電源を入れて確認する。よーし、ちゃんとラスターが出た。

BMP画像ファイルのフォーマットを勉強する(9/4/2010)
 そろそろ画像ファイルのフォーマットを検討する段階である。最終的にはJPEGファイルを入力にすることにしているが、早く画像が見たい。とりあえず最初はBMPファイルから画像を出すことにする。ARM上のJPEGデコードライブラリは、ネット上にいくつかフリーのものがあることは大分前に確認している。フラッシュも30KB程度ですみそうだが、簡単に動かすことはできない。

 BMPファイルについては概念的なことは知っているが詳細は全く知らない。あらためてウェブで調べる。WAVファイルと同様BMPファイルフォーマットもすぐ見つかった。有難い時代になったものである。ここのサイトの説明が簡明でわかりやすい。

 それによると、24ビットBMPが一番簡単そうである。驚いたことに16ビットBMPというフォーマットはないのだそうだ。8ビット以下は、カラーパレットという別のテーブルを用意し、これをインデックスにして色を表す。こちらの方も面倒だ。

 PC上の定番ソフト、ペイントを調べ、JPEGから24ビットBMPに変換できることを確認する。よし、このフォーマットをJPEGのターゲットファイルとしよう。24ビットBMPはピクセルごとにRGB順に8ビットづつ色信号が並び、表示行の一行が4の倍数(不足分はパッドする)で、これがライン分並ぶという至極、簡明なフォーマットである。ヘッダーを削って、これを2バイトづづ(5+5+5、1ビットパッド)、FPGAへ送れば、3万色の画像が出る理屈だ。

 悩ましいのは、BMPのストリームの方向である。標準は一番下右からデータが始まり、上へ上がっていくという通常のビデオスキャンとは逆の方向である。最初戸惑ったが、フレームメモリ(SRAM)の最高アドレスから逆に書いていくとか、モニターにスキャンを逆にするモードなどで対応できることがわかり胸をなでおろした。

 BMPファイルからのデコードに見通しがついた。いやいや、遂にフォトフレームプロジェクトも画像フォーマットを具体的に検討するところまで来たかと感慨にふける。

デジタル液晶のソフト改修の検討(9/8/10)

 デジタル液晶はワイド仕様のWVGAである。画面の中央部に640×480を表示するにしても、ピクセルクロックは31MHzもある。FPGAのマスタークロックは33Mhzで、このままでも動きそうな気もするが、5%を越える誤差は少し厳しい。これはPLLで微調整が出来そうだが、それよりSRAMのアクセスが問題だ。現在のソースではうまくいかない。

 現在は、2クロックでデータを読む仕掛けになっている。ピクセルクロックにクロックを合わせた場合、倍のクロックにしないと上手く動かない。PLLでマスタークロックを2倍にして現行のソースを使うか、マスタークロックをそのままにして、SRAMのアクセスをパイプライン(アクセスリクエストとデータフェッチを同一クロックで行う)にして描画は前のクロックのデータを使う方式にするか迷った。

チャートを引いて検討する。確信は持てないが、後者のパイプライン方式でもうまく行きそうな気がする。最初の1ピクセルの表示はできないが、SRAMのデータシートには、最も簡単なアクセス方式としてCEもOEもアクティブにしたままアドレスだけをかえるチャートが例として出ている。つまり、アドレスの変更だけで10ns後には自然にデータラインにデータが出てくる。ピクセルクロックとマスタークロックを同一にすれば問題ないように思われる。

データバスを16ビットにする(9/10/2010)
 今度の液晶パネルがWVGAとえらく昇格してしまったので、メモリが足らなくなった。この4メガビットSRAMは、1アドレスあたり16ビットをアクセスできるが、配線とソフトが面倒なので、これまでは上半分の8ビットしか使っていなかった。半分の256KBではVGAでは8ビットカラーも無理だ(308KB要る)。

ワイド画面にしないで中央に640×480を出すにしても、残りの8ビットを使わないとVGAの16ビットカラーは出せない。実は16ビットカラーだと614KBも必要で、512KBならRGB4ビットづつの12ビットカラー(4096色、460KB)が限度である。

変更がおおがかりになってきたので、少しづつ動作確認しながら作業していくことにする。まずは、この16ビットアクセスの変更だ。これはクロックが今のままでもテストが可能だ。 FPGA基板のSRAMの配線を追加する。こんどのXP2は144ピンなのでまだ余裕だが、アドレス18、SRAMデータ16、RGBデータ15、これにSPIやUART、SRAM制御線を入れていくと60本近い。相当混んできた。これだけ本数が増えるとピンアサインに気を遣う。

 FPGAのピンアサインは沢山読み替えが必要で一筋縄ではいかない。まず論理合成ツールの入力となるのはピンナンバーであるが、ピンナンバー以外にIO[nn]といったピン名があり、これが雑誌基板の外出しのコネクターのAnnとかBnnというコネクター単位のピン番号と対応する。順番に並んでいるかと思うと思わぬところで飛び番があったりして、戸惑う。しかも雑誌の表示は部品面で実際のハンダ付け面と違うので余計混乱する(書き直せばよいのだがさぼっている)。

A9113094

 何とか配線が終わったので、VerilogHDLソースの変更にとりかかった。単にバスを広げるだけではなく、LowとHighバイトを互いに読んだり、書いたりする処理をつけ加える必要がある。SRAMアクセスは2回に一回になる。

 最後のデータの書き出しでつまづいた。データが奇数で終わるとSRAMに書き出されないまま終わってしまう。SPIの処理終了のところで何とか出来ないか、あれこれ考えていたが、簡単には出来そうにない。まあ画像データなので最後の1バイトが読めなくても大勢には影響しないのだが気分が悪い。

 これが食事をしているときに突然閃いた。何も2回に一回アクセスする必要はない。毎回アクセスしてSRAMに書き、2回に一回だけアドレスを増やせば良いのだ。処理時間に影響は全くない。気が付けば何でもないことだが、コロンブスの卵だ。しかし、こういう解決は気持ちが良い。

 機嫌良くコーディングを終えて、早速テストに入る。SRAM側のサブモジュールのバスを拡張するのを忘れていたり(VerilogHDLは型にうるさくないので見過ごし)、2ビット分の配線間違い(出てくるデータ化けを分析してピンポイントで発見。こいつも気分が良かった)があったりしたが、順調にSRAMの16ビット化は完了した。このあいだ9MHzに上げたSPIからの文字データが矢のように流れる。

このあたりでブログに報告することにする。次はいよいよピクセルクロックの高速化である。もしパイプラインが動かなければ、マスタークロックそのものを上げる必要がある。

|

« エラーのないFPGAのUARTコードを自作する | トップページ | フォトフレーム: デジタル液晶インターフェース実装 »

電子工作」カテゴリの記事

FPGA」カテゴリの記事

コメント

とても光栄に思っておりますので、残しておいて下さいm(_ _)m。

上で書けませんでしたが、QVGA→WVGAになるというのは、
大変なんですね。昼間考えていて、やっと意味が判りました(汗;)。
面積比で影響してくるから、1ドットあたりのクロックもそれに
比例するのですね。
FPGAパックマンとかApple2は、どうなっているんだろう?
移植なので全然そのあたりは意識していませんでしたが、
今後自分で組むときは非常に参考になります。

投稿: shuji009 | 2010年9月14日 (火) 19時09分

すみません。余りに偶然だったものでつい名を出してしまいました。不都合ならいつでも削除します。

ケース工作は難しいですよね。でもこれはこれで楽しむところが沢山あります。ご健闘を祈っています。

投稿: がた老 | 2010年9月14日 (火) 01時17分

がた老さん、お仕事、お疲れ様です。

閑話休題。

ありゃま、記事に名前が載ってしまった(笑)。

デジタルボリュームは、あきらめています。根性無しです。

その代わり、普通のボリュームを入れています(汗;)。

箱制作は難しいです。また別の物でチャレンジします。

投稿: shuji009 | 2010年9月13日 (月) 14時08分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: フォトフレーム: デジタル液晶を動かす準備:

« エラーのないFPGAのUARTコードを自作する | トップページ | フォトフレーム: デジタル液晶インターフェース実装 »