(日々の記録)デジタルオシロを買った。久しぶりに晴れ晴れとした気分でブログを書いている。XP2基板のFPGAデジタルフォトフレームが、やっとのことで想定どおりの640×480ドット12ビットカラーの画像をBMPファイルから描画するようになったのだ。フォトフレーム計画(プロジェクト)を立ち上げて、ほぼ7ヶ月。今年のがた老AVR研究所はほとんどの時間をこれにあてていた。毎日のように一喜一憂していたが、遂に第7ステップのBMPファイルの描画に成功した。嬉しいというより背負っていた重い荷をおろしたときのような解放感が強い。綺麗な画がでるまでは、本当に暗かった。何度もプロジェクトを投げ出しそうになった。その度に気持ちを奮い立たせて元へ戻った。たかが趣味で何でこんな苦しい思いをするのか時々馬鹿馬鹿しくなるが、うまく行ったときの快感が忘れられない。前にも書いたが、相当中毒が進んでいる。思い通りにならない時は、世の中すべてが自分に反対しているように見え、今までの生き方そのものが否定されているような暗澹たる気分になるのだが、一旦解決したとなるともう有頂天、まるで天下をとったような気分になる。これだから電子工作はやめられない。ピクセルのずれが直らない(10/10/2010)前記事にあるとおり、XP2のフォトフレーム基板に何とか画像らしいものが出て、あとはもう一息、微調整で上手く行くという考えは甘かった。やっても、まともな画像になってくれないのである。左右の逆表示は、液晶モニターのスキャン方向ビットの調整(この液晶のデータシートの垂直方向指示ビットは間違っている。1->下からが正しい)で直ったが、ピクセルドットの食い違いによる不具合はどうやってもうまくいかない。12ビットカラーは6バイトで4ピクセルを表現するので、1ピクセルでもずれると、とんでもない色になってしまう。連続しているところはちゃんと12ビットをとりだしているのだが、1ライン(640ドット)描いた次のラインで、SRAM読み込みがスタートせず、1ドットずれてデータが入り、48ラインごとに元の状態に戻り、結果として縞模様の斜めにずれた画像になる。状況は、画面の状態から良く分かるのだが、これをどう解決するかの方策が見つからない。1ライン中の連続表示ではうまく行っているので、ラインのスタートのときにSRAMアクセスのトリガーをかけてやれば、良いように思えるのだが、どんなあわせ方をしても斜めの縞模様は解消できない。描画範囲と、画像の幅は1ピクセルでも違うと、大きく左右にずれる。ドットで言えば、40ピクセルくらいしか傾いていない。縦の行は480行あるので、12行について1ドットの勘定だ。ピクセルドットの計算違いや、SRAMのアドレスインクリメントの狂いで、こんな微妙な違いは起こらないことに大分経ってから気づいた。FPGAの中のビットハンドリングがどこかで変調をきたしている。非同期アクセスか、ハザードの問題だろうか。ステートマシンのグレイコードをいじってみたり、非同期だったSPIのCS信号を同期させてみたり、SRAMアドレスハンドリングを調べてみたりするが、状況は全く変わらない。いくつかBMPファイルを入れてテストしてみるが、みな同じ現象。画像データそのものを疑ってペイントソフトが作ったファイルをバイナリエディターで確認するが問題なし。現象ははっきりしているが、原因がわからないので解決できない。バグは外にあった(10/13/2010)ひとつめの不具合、画像が斜めに傾く現象は、意外なところが犯人だった。最初、FPGAのビットハンドリングをしつこく調べていたが、どうしても不具合を発見できない。冷静になって「デバッグは外へ、外へ」の鉄則どおり、データを送り出すところから調べてみることにした。SPIからのデータは、BMPファイルのヘッダーを取り除いた色信号そのもののデータが果てしなく続くデータストリームである。ここで1バイトでもずれたら画像は間違いなく斜めになる。コードはSDカードの読み込みブロックサイズを意識せず、ブロックをまたがってもちゃんとデコードできるようになっている。ずれるわけはない、うっ、待てよ。このブロックの終了条件、おかしくないかい。うはあ、大小比較は等しいときはFalseだ。1バイト、ブロックサイズを行き過ぎている。2KBごとに1バイト、1ライン960バイトなので3ラインごとに1ドット(12ビット)ずれる理屈だ。あせる手でSTM32のコードをコンパイルしなおし、テストする。良いぞ、画像の傾きは直った。3原色の背景は少し色が出てきたが、まだ縞模様のままで本来の色ではない。次の不具合、色を正しくするトラブルシューティングだ。「デバッグは外へ」にならって、送られてくるSPIの画像データをロジアナでさらにくわしく調べる。うーむ、でだしのところから既におかしいぞ。今のロジアナはプロトコルアナライザー機能がないので、8ビット波形を手でデコードしてみるが、明らかにBMPファイルの通りになっていない。8ビットデータの処理を間違えているのではないか。データのシフトがおかしい、おや、この<<(ビットシフト)が式全体にかかっているように見える。+(プラス)の方が<<より優先順位が高い。今のコーディングでは4ビットシフトしてデータをつけたすのでなく、全体に足してからシフトしてしまう。よーし、縞模様になる原因はわかったぞ。意気込んでコンパイルし、テストする。画が出るのをわくわくして待つ。あれえ、縞模様は消えない。前より少し色が出たようにも見えるが、本来の赤は緑がかった青に、青は黄色になり黒い細い縦線が残ったままだ。期待していただけに、反動ですっかり落ち込む。高性能のロジアナを注文してしまう(10/14/2010)負けず嫌いの当研究所の所長は、こういう状況ではたいてい意地になる。なったら徹底的に原因究明をしてやる。)を勢いで注文してしまった。深夜にネットで注文し、振込みもネットですませる。