(日々の記録)デジタルオシロを買った。(5/28/08)この1週間、お遊びのLEDマトリックスに夢中になっている(まあ、電子工作自体がお遊びだが)。二色の8×8のLEDマトリックスは、秋月で見つけ、安い(\200)こともあって、大分前に、つい目的もないのに2つ買ってしまってある。ダイナミック表示とか、シフトレジスタで線をへらすテクニックなどは、昔、時計の針を刻む歯車に何故か心がわくわくしたのと同じような、工作心(ごころ)を刺激する。今までロガーとか電源制御とか実用的なことばかりやってきたので息抜きということもある。いや、単に作りたかっただけだけど。ところが、これが難物だったのである。最初軽く考えて、どうせなら一つでなく、電光掲示板のように2つ並べてスクロールさせてやろうと欲張ったのがいけない。赤緑の2色とも配線するのはとても大変になることがわかった。一応シフトレジスタの74HC595は4つ買ってあり(マルツが一番安く\94だった)、小さな基板にも一応そのスペースはぎりぎりとったが、最初は1色だけ実装することにした。LEDはスクロールを考えて、ピンを少し曲げて境目なくピッタリつけて固定する。LEDのドライブは、定番のトランジスタアレイ(TD62083)で、ダイナミック表示なら2色の8×8マトリックスを3つくらいまで1ヶでドライブ出来そうだ。石はとりあえず、ポートが8本連続しているTiny2313にした。これがうまく行ったら、フォントデータをSDカードに入れてMegaクラスで8ビットの、昔のPDAで流行っていた、エリサフォントなどで漢字の電光掲示板にしてやろうというのが最終的な計画である。実装は、UEW線でも良いが、UEW線を交叉させて配線するのに抵抗があったので、もうひとつのジュンフロン線を試してみた。これで、これまで買いたいのを我慢していた、Engineer製のワイヤストリッパーが買える。秋葉原駅前のラジオストアの入り口の工具店が意外に安く\2760で手に入った。それでも最近買った工具では電動工具を除けば一番の値段だ。これまでのニッパーとは格段の生産性で面白いように被覆がむける。細い線の皮むきにはやはり必須の工具であることがわかった。工具のおかげもあって配線は順調に終わり、早速ブレッドボードにヘッダーピンで直結する。ソフトは下書きもしないで気楽に、これまでの部品ソフトを寄せ集めて3ms単位で8バイトのフォントデータをシフトレジスタに流し込むプログラムを組んだ。スクロールさせる必要があるので、少し本格的に、昔を思い出しながら構造体(struct)にフォントデータを入れた。動かしてみたら、これが全くうんともすんとも言わない。いうのには慣れている。プログラムにはUARTが組んであるのでデバッグは簡単だと考えていたら、これが暴走するのである。LEDは全く光もしない。ハードは組み込む前、すべてテストでLEDが点くことを確認してあるのにどこも光らない。UARTが暴走するのは、構造体のポインタの不正の疑いが強い。単なる変数ではなく、構造体はポインタを多用するのでデバッグが済んでいないときはどうしようもない。構造体をやめて8バイトの配列に戻す。何とかUARTの暴走は止まった。ところがそれでもLEDは全く点灯しない。途方に暮れてロジックアナライザーで出力を確かめる。何とピンの出力は全く問題なく見事に出ている。8ビットクロックとともにデータを出し、最後にラッチパルスを出し、コモンのトランジスタアレイのドライブはちゃんと切り替わっている。ここで深夜も3時をまわったので心残りだが追及を諦めた。次の朝、事務所に出かける電車の中でもLEDマトリックスのことが頭から離れない。昨夜のテストの思い出したくない光景が目に浮かぶ。トランジスタアレイのソース側に試しにVccをかけたときに一瞬電源のパイロットランプがわりにしているLEDが暗くなったのが気になってならない。こわしてしまったのだろうか。ウェブにはシフトレジスタのリセットピンにはVccをかけた回路図が商品になっている。あっ、そう言えば、確かリセットピンはグランドにつないで半田付けしたぞ。enable)にはVccをかけて配線した。ここはすべて負論理だ。アートワークのときからそうなっていた。やれやれ、これではシフトレジスタは動きようがない。ICはこわれていないのだ。全部、こちらのせいだ。仕事を終えて帰宅し、食事もそこそこに配線のやり直し。喜んだのも束の間、このあとも泥沼が続いたのである。(5/30/08)点灯したLEDは何とも不可思議な動きで全く安定しない。これはこれで見ていて飽きないが、目的は文字をダイナミック表示で固定して出すことである。ソースを何度も調べるが、こんなランダムな動きになるようなところは見当たらない。気に入らないのは、コードを少し換えるだけでまたUARTが暴走したりする。タイマーがおかしいのかと間隔を変えるが全く変化がない。念のためロジアナで調べてみたら、パラメータを変えても時間間隔が変わっていないことがわかる。外部変数のスイッチが機能していない。これは例の外部変数がこわれるトラブルがここでも発生しているようだ。場所を換えたり、コンパイルオプションを換えて、何とか用意したアルファベットのAとBが表示できるようになった。後半のフォントビットがどうしても設定どおりの位置におさまらない。フォントデータは内部変数域にあり、あのトラブルとは関係ないはずだ。一日を無駄に過ごして、次の日、気持ちを新たに解決に取り組む。タイマでダイナミック表示をしているから解析が難しいことに気づく。デバッガーのようにタイマを止めて1ステップづつ調べていけば良い。きめられた時間にやらないとまずい処理はシフトレジスタにシリアルにデータを送るときだけだ。タイマの代わりに、コマンドで進むコードの改修はわずかで済んだ。