« 2008年8月 | トップページ | 2008年10月 »

2008年9月の18件の記事

2008年9月25日 (木)

リズム音の収集はこれで完成

オペアンプの検波回路が多すぎる(9/23/08)
 秋分の日も朝から工作室にこもってオペアンプから出たリズム音のDC化に没頭していた。オペアンプの2段増幅で、デジタル化に十分な電圧が得られたので、これを直流にする検波(整流)回路を考えている。要件は簡単で打楽器、メトロノームなどのパルス音を集めるが、とりたいデータは音と音の間隔の時間だけであり、音の内容(大きさ、長さ、周波数など)はとりあえず関係ない。VUメーターのように絶対的な電圧の精度もいらない。アンプから得られた音波波形は明らかにプラス側がどこかでクリップされているが、どうせ検波して、ローパスフィルターをかけてパルスをならしてしまう予定だし、ゲインも十分なのでこれ以上の調整はやらないことにする。

 検波も半波整流で問題ないと思うが、根が凝り性なもので、最小部品で最大効果を狙ってWebの情報で色々勉強してみた。ところが、これがべらぼうに種類が多い。だいたいオペアンプというのはダイオードなど使わなくても、このあいだのDCアンプのように2つある入力の電位を変えるだけでACが整流できるのである。VUメーターの作り方を紹介しているサイトでは、ダイオードの順電圧降下分を補償する理想ダイオード回路などを使っていて(微小電圧のところまで整流できる)魅力的だが、これは全波整流するのに2つもオペアンプがいる。何となく資源を無駄遣いしているようで気が進まない。

 まあ、このへんがアマチュアの醍醐味だろう。気の済むまであれこれ自由に考えることができる。Webを漁った結果、4つばかり種類の違う検波(整流)回路が見つかった。  オペアンプに明るくないので何がどう違うのかさっぱりわからないが、結局、お手本にしたのは部品が少なく単電源でオペアンプひとつで全波整流ができる、エレキジャック(http://www.eleki-jack.com/KitsandKids2/2008/07/428.html#more)の工作ページの回路である。ここのサイトは私と同じようにマイクから音を拾ってデジタル化し、メカを動かす工作を連載で掲載していてなかなか興味深い。オペアンプが私と同じLM358を使っているのも親しみが持てる。Pict0755

 ブレッドボードでこの回路を組み、2段アンプとはカプリングコンデンサーでつなぐ。ところが、プラス側は正常に出るが、マイナス側が、はるかに高い出力がでてクリップされてしまう。ちょうどコンパレータとして動いているのと同じである。前段のアンプの出力インピーダンスが低くて検波オペアンプの入力インピーダンスが下がり、増幅されてしまっているのだと思うのだが、定数の違う抵抗をいくつか入れてみても全く変化がなく直らない。749

 やれやれ、少しわかってきたとは言え、アナログは難しい。このあいだ買った「定本トランジスタ回路の設計」を精読してだいぶ理屈が分かってきて、今まで疑問だったことが少しづつ解け、霧が晴れるように見通しが良くなってきたのだが、ちょっと回路が複雑になって相関関係が出来てくると途端にわからなくなる。要するにアナログの回路設計の難しさは、デジタルと違って、厳密な解がなく(あっても解けない)近似値と近似値との折り合いなので、経験がない(無視できるところが分からない)とこの匙加減が出来なくて難儀するのだと思う。

ダイオードの方向が逆だった(9/25/08)
 全波整流回路は正しく波形が折り返せず、片側(マイナス)はコンパレーターになってしまうという不本意な整流結果とはいえ、当面のDC化は出来ている。最大電圧はピークで4V近くありマイコンのTiny861のコンパレーターやADコンバータの基準電圧2.56Vをはるかに超え、もう十分である。

 オシロのスイープを長くして(100ms以上)、メトロノームを持ち込みマイクで音を拾うと、しっか75110ufりパルスが観測できる。もう少し整形してみようと、出力に10μFと1kΩのローパスフィルターをかけて波形を見てみた(写真の最上段)。これでカットオフ周波数は16Hz (30msパルス )で、このタイミングは、このあいだのADコンバータの測定間隔30msと、オシロで見た、人が出せる最小の衝撃音(舌打ち、手を叩くのはもっと長い)から選んだのだが、これはさすがに、立ち上がりが明らかになまっており正確な時間を測れなさそうである。

 今度は、この1/10(160Hz 3ms)のフィルターにする(中段)。メトロ7521ufノームのような金属音の急激な立ち上がりにも追従し、途中の無音部もならされて比較がしやすくなっているが、途中の音の切れるところや声の周波数でレベルの下がるところがありデジタル化で間違える可能性がある。

 というので、中間の4.7μFにする(最下段)。うむ、信号の立ち上がりも早いし、あともなめらかで具合が良さそうだ。いや素晴らしい。このあいだ急ごしらえで同じような回路を作り手探りでTiny861のADコンバータに入れてUARTに結果を吐き出させたとき願った夢が目の前で実現している。信号を見ながら最適な定数を選ぶことが出来るのだ。7535uf

 少々お金がかかったが、かけただけの価値がある結果だ。何もないところを工夫と努力で何とかつくりあげるのも、ある意味で楽しいが、こうして目の前で結果を確かめながら余裕でやりたいことを仕上げていくのも、とても充実した気分になれる。

翌日、ブログに上げるための記録を書きながら、何となく気になっていた検波回路をもういちど見直すことを思い立った。検波のマイナス側出力が大きくクリップしてしまうことである。周辺の定数をかなり変えたが全く改善されなかった。何か基本的な誤りがあるのかもしれない。

それで、前から気になっているのがダイオードの方向である。確か印のついている側がアノードで回路図のとおりいれたら出力が全くでず。逆にしたら動いたのでそのままにしてある。ただしマイナス側はクリップする。

 回路図に誤りがあるとは考えられない。しかし方向を逆にしないと動かない。念のためWebで方向を確認する。印の付いている方がアノードであることは間違いなかった。正しい方向に入れなおしてみる。しかし、やっぱり前と同じように出力はでない(正確には最初脈流が出るが徐々に出力が電源電圧になってしまう)。

 もうひとつ気になっていることがある。オペアンプの反転入力は2段増幅の出力からカプリングコンデンサーでつながれ、直流的には負荷がない、浮いている状態である。これが良くないのかと試しに2Kばかりの抵抗で入力をグランドにつないでみた。これだった! クリップされない正常なマイナス側の脈流が出て本来の整流回路になった。正負の出力が少し不揃いだが、これまでのようなクリップした出力ではない。折り返し付近が歪んでいるのは、恐らくダイオードの順電圧降下のところだろう。750ok

 やれやれ、ダイオードの方向が逆だったのである。道理で周りの定数を変えても直らなかったわけだ。もっともローパスフィルターを通ったあとの出力は、少し平坦になっただけで殆ど変化はなかった。大勢には影響がない。しかし何となく気分が良い。ひとつひとつの部品がちゃんとその機能を発揮して動くようにしてやることが、作るものの心意気であり、喜びのひとつである。ついでに検波回路の帰還抵抗の定数を10Kから12Kにするとぴったり波形が揃った。754ok

 そろそろアナログ部はこれで心置きなく店じまいができそうである。あとはデジタルのソフトの世界が待っている。コンパレータでいきなりデジタルにするより、ADコンバータの値を見ながら間隔のスタートを判断するほうが、柔軟な操作性の良いソフトが出来るような気がする。これはこれでまた心踊る楽しい世界である。

| | コメント (0) | トラックバック (0)

2008年9月22日 (月)

リズム音の波形が出た

想像した通りアナログは手ごわい(9/18/08)747
 ブレッドボード用に超簡易アッテネータ(10Kのボリュウムと入出力コネクタ)基板と、モニター用のステレオミニジャック基板を作って、勇躍、アンプの評価をオシロで始めたが、予想していた通りアナログの世界は底がとてつもなく深く、早くも溺れそうになっている。基礎から勉強しなおさないと、これ以上先に進むことが出来そうにない。

 秋月FGは快調に正弦波も方形波も出すし、オシロも忠実に出力波形を表示してくれる。電圧を画面上で測ることが出来るの748 で、増幅率も簡単にわかる。見ようと思えば、立ち上がりパルスの波形も60MHzの帯域があるから楽々だ。

 だがしかし、問題はこれからである。で、どう改善すれば入力波形に近い出力が得られるのかという答えは当たり前のことだが、この測定結果からは出てこない。このあいだ実験したLM358の非反転増幅も、中位点のパスコンを100μFにしたら更にハムが少なくなって10倍程度のゲインで、入力に音声(CDプレーヤー)を入れると一応音楽になるのだが、オシロで波形を見ると、これが全く目茶目茶である。正弦波は歪んでいるし、方形波はオーバーシュートやサグが出てまともな出力でない。それでは、このあいだ綺麗に増幅したトランジスタの方はどうだと言うと、これもしっかりクリッピングされてしまって、デジタルなら問題ない増幅器だがアナログでは恐らく使い物にならないアンプだ。746

しかも、モニター用のヘッドフォンをつけるとトランジスタの場合、かえって出力が入力より下がってしまう。これが何故なのか。パワートランジスタではないにしても、2SC945,2SC1815クラスのトランジスタは、ヘッドフォン位の負荷なら十分鳴らせる力はあるはずで、事実、ヘッドフォンはしっかり鳴るのだが、オシロでは1/10程度にレベルが下がってしまう。しかも入力波形までおかしくなるのだ。これが何故だかわからない。

過大な期待をオシロにかけすぎていた。まともな回路設計をいちから勉強しなおす必要があるようだ。ただ、これまでは2つの回路でしか動かしていない。別のまともなヘッドアンプも作ってみよう。そもそもは、マイクアンプとVUメーター動作のシミユレーションすれば当初の目的は果たせるのである。オシロを買って有頂天になっていたが、やっぱり原点にもどったほうが良さそうだ。

一石トランジスタアンプまで戻る(9/20/08)
 一から勉強しなおしている。アナログをやっている人には余りにも当たり前で話にならないことばかりだろうが、40年ぶりにこの世界に戻ってきたものにとっては、すべてが新鮮で珍しい。思えばトランジスタを使うのに慣れてきたとは言っても、デジタルのスイッチングでしか使っておらず、これはトランジスタを飽和状態で使うのでアナログに比べればはるかに簡単なのである。

 しかし、アナログではそうはいかない。考えてみれば入力が50mVで100倍の増幅率のアンプを作れば、出力は5Vで、電源電圧が5Vしかない回路では絶対にリニアーに増幅できるわけがない。こんな基本の基を測定中に気がつくのだからおめでたい話である。

 まあ、40年前にやっていたといっても、そのころは雑誌や参考書の回路図を頼りに見よう見真似で真空管ラジオやアンプを作っていたに過ぎず、大学で学んだ電子工学の方は完全な理論の世界で実践の世界とはかけはなれていて殆ど役に立たない。

 そこへ長年の憧れであったオシロをいきなり持ち込んだものだから話が余計ややこしくなっている。しかし、幸いなことに今は本や雑誌だけでなくWebの情報がある。なかでも「一石トランジスタ回路の設計」というページ(http://okazaki.incoming.jp/danpei2/rf/design1tr.htm)や、トランジスタ回路の基本設計法(http://www.picfun.com/parttrs.html)というページは大変わかりやすく参考になった。

最近のヘッドフォンの入力インピーダンスは数十Ωで、出力インピーダンスが数kΩのエミッタ接地のトランジスタアンプではまともにドライブできないことも知った。このあいだオペアンプでボルテージフォロワーにしたようにエミッタフォロワーの石を追加する必要がある。

 ただ、これらのページが薦めている、「定本トランジスタ回路の設計」(鈴木雅臣著)を買うかどうかは迷っている(結局、このあと買ってしまった)。 本来はマイクからの音声入力をデジタル化することが目的で始めたアナログの世界である。オペアンプなどを動かしているうちにどんどん深みにはまり、オッシロスコープまで買い込んで波形観測までできるようになった。確かに、トランジスタの電流帰還形バイアス回路の一方の抵抗を半固定抵抗で調節して、上下がクリッピングしない最適なバイアスを画面を見ながら決められるところまで行ったが、依然としてエミッタ抵抗をバイパスするコンデンサーを入れるとクリップしてしまうのにその補正はできないし、わからないことが多すぎる。

 本を買って徹底的に調べるのもやり方だが、がた老AVR研究所と名前をつけたのに本来のマイコンの開発とかけはなれた方向にどんどん行ってしまいそうで迷っている。それでも試行錯誤の上、ブレッドボード上に何とかリニアーに増幅ができるようになったトランジスタアンプが出来た。CDプレーヤーからの再生音を入れてみる。うむ、綺麗な音だ。しかしパスコンを入れると予想通り大きく音が歪む。まあ、こういうことがオシロで簡単に見られるようになっただけでも収穫と思わなければいけないのか。

 そろそろマイクからの音声をコンパレータに入れる1V程度の電圧に上げるオペアンプ2段の増幅回路とAC整流回路を作らねばなるまい。

2段のオペアンプ増幅に成功(9/22/08)
 もともとリズムメーターというしかけを作ろうとして入ったアナログの世界だが、いくら基本に帰ると言っても、エミッタ接地の一石トランジスタアンプだけに関わっていたらいつまでたっても目標に近づけない。回路設計の研究はそこそこにして、本来のマイクアンプの実現に戻ることにする。

 これまでの実験で、コンデンサーマイクの出力電圧は数mVで、数百倍のゲインがあれば、整流してもマイコンのコンパレーター入力に出来るレベルになることはわかっている。ただ、一段で数百倍のゲインをとるのは難しそうなので2段にしたいのだが、適当な回路がWebにころがっていない。単純に同じ増幅回路を重ねるだけで良いのかそれもわからない。

最近のオペアンプはDIP8ピンで2つ回路がはいっているのがポピュラーのようだし、マイクアンプあたりは一段増幅では苦しいはずで、どこかのWebページに例がありそうなのだが、見当たらないのである。思いあぐねていたとき、このあいだ買ったオペアンプの参考書で偶然2段のアンプの回路図を発見した。すぐ組んでみた。しかし動かない。オシロで調べると1段目は増幅しているが、2段目の出力が増幅されていない。しかも、オシロの波形を見てみると1段目の出力波形が歪んでまともなサインウェーブになっていない。

どうもAC増幅とDC増幅とはかなり回路図が違い、この2段の回路はDC増幅なので、この回路では駄目だと思うのだが、何しろ基礎がないものだから手も足も出ない。しかし波形を見ているうちに、これが半波整流の波形とそっくりだということに気が付いた。回路には、参考書にはないコンデンサーマイクの直流印加を遮断するためカップリングコンデンサーを入れ、AC増幅らしくしている。あああ、わかった。オペアンプの入力の片側を接地していてはだめなのだ。ACの下側(マイナス側)も増幅するために、比較する入力は0ではなく電源電圧の半分にする必要がある。AC増幅回路に必ずついている同じ抵抗2つで分圧している意味をここで始めて理解できた。馬鹿な話である。

 参考書の2段増幅回路はDC増幅回路で、反転増幅2つで構成されている。2段目で半波整流のマイナス側を増幅していても出力がでてくるわけがない。分かって見ると2つとも極く当たり前のことだけど、知らないということは恐ろしい。あわてて初段に作った中位電位を2段目にも供給し、念のためカップリングコンデンサーをつけて試してみる。

 でた。マイクで拾った音が2段目に出力に現れる。大声を出すのをやめてこのあいだ作った秋月FGのオーディオ出力をありあわせのPCのスピーカーアンプで音に出し、この音をマイクで受けてみる。そんなに大きな音でなくとも、オシロで測った電圧は0.8V(実効値)まで上がる。P-Pでは2V近くになる。波形も崩れていない。Photo

 やれやれ、やっとのことでブレッドボード上の2段アンプが動いた。オシロの操作に慣れてきたので、スイープを長くし、トリガーをワンショットにしてマイクの前で手を叩いてみる。 出ました、出ました。きれいなパルス状の音声波形が記録された。これ、これ、オシロで見たかった画像である。「あ」とか「あー」とか家内を驚かせない程度の大きさで声を入れてみる。ちゃんとそれらしい波形が出てくる。いや嬉しい。プラス側が少しクリップされているが、1V以上ある。これを検波してローパスフィルターをかければ、立派なデジタルパルスになりそうだ。そうか、アナログ的な処理をしないでも、検波した後、ADコンバータに入れ、チャタリング抑止のときのようにソフトで処理する方法もある。とにかくリズム音を拾ってデジタル化する道筋が通った。

 次は、オペアンプの整流回路とバッファー回路を作ることである。そろそろ実装のことを考える段階に進んだようだ。電源は3V以内にしたいが、アナログのところが心配だ。

| | コメント (0) | トラックバック (0)

2008年9月16日 (火)

秋月FGキット稼動

正負両電源の工作(9/14/08)
 当がた老AVR研究所のブログは、昨年の10月から溜まっていたほぼ一年間の記録を先月の20日以来、少しづつまとめてアップロードしてきたが、この前の記事でストックが切れた。この記事からここ数日の出来事を報告する本来のブログらしくなる。

 自作のソースコードをどんどん公開するはずだったが、最近はこれまでに公開されているソフトを流用することが多く、オリジナリティに欠けるためためらっているのと、雑誌の付録に浮気したりして時間をとられ、思うように公開できていない。それでもこのところ毎日50人以上の方々がこのブログを見に来てくれている。ありがたいことである。

 全部の記事の索引と、ダウンロードできるリンクの索引があると便利になると思うが、まだこのブログを良く調べていないので出来るがどうかわからない。

 それと気になっているのが、発足以来回路図を一度もアップしていないことである。これも、これまでの回路図がすべて、これまでの先達の方々のを切り貼りしたもので全く自信がない。何とか我が家では動いているが、これを参考にされたらまずいのではないかと思うのと、自分がまだ回路図CADを使いこなせてないのもその理由である。

 もし、欲しいと思われる方がおられるなら、コメントにでも書いてください。今度のリズムメーターあたりは私のオリジナルなので、ソフトも回路図も公開できるかもしれな い。何にしても回路設計はこれはこれで奥の深い世界で、そうそう簡単にマスターできるものではない。人様の知恵をお借りするしかないのだ。その意味ではこうした趣味が続けられるのも、インターネットと自分たちの技術とノウハウを惜しげもなく公開してくれている先達のみなさんのお陰だ。この場を借りてあらためてお礼を申し上げたい。

 さて、工作のほうだが、リズムメーターを作りたいから始まって、間歇音の間隔をデジタル化したい、アナログアンプをうまく作りたい、オシロスコープが欲しい、オシロスコープを買ってしまう、アンプの調整には信号発生器が必要、秋月のファンクションジェネレータキット(以下FG)を入手、両電源が要る、簡易負電源が動かないと、風が吹けば桶屋が儲かるのような連鎖で、今、少しまともな負電源を作ろうとしている。

 例によって、秋月、千石で品物を調達する。今度は計測器にするのでケースやボリュウム、つまみ、ロータリースイッチなども物色した。ちょっと小さいが気にいったケース(タカチYM-150 ¥780)があったので、これに実装することに決める。721fg

 レイアウトは悩ましいところだ。つまみを上面に出すのが一番工作が楽だが、基板とケースに部品が分かれる上、何となく頭でっかちでバランスが悪い。で、今考えているのが、写真のように、ボリュウムとロータリースイッチを側板に並べるレイアウトだ。これだと、ロータリースイッチと基板の位置が固定されるので周波数が高くなったとき安定する。BNCの出力プラグと、LCDを上蓋に配置する。

で、問題の負電源だが、大いに迷った。結論がでなかったので、買い物では、秋月で手に入るLinearTechnolgyのDCコンバーターICの、LT1054(100mAまでの負電源が作れる)と、負電源用3端子レギュレータ7905の両方を買ってどちらも作れるようにした。あわせて千石で、0-8V-16Vのトランスを買う(¥760).。これ何も書いていないけれど、8-0-8の正負電源に使えるはず(?)。

 どちらにするか迷った挙句、DCコンバータを試してみたい気持ちが優り、まずこちらを作ってみることにする。トランスを使ったシリーズレギュレータは高音質アンプのために残すことにする(おいおいオーディオに行くのか)。DCコンバータにしたもうひとつの理由は、分割するために買ってあった9Vアダプタの顔を立てる意味もある。 このDCコンバーターは、50mAとると1.5V以上の電圧ロスがあるということなので常用の6VのACのアダプターでは-5Vになってくれない。少なくとも8V以上のソースが必要なので、ちょうど良い。

 プラス側は普通の3端子レギュレータである。これまでレギュレータは、発熱を嫌って低ドロップ型のものを愛用しているが、昔買った、7805が部品箱にまだごろごろしている。9Vから5Vと半分近くただ熱で消費してしまうのは地球にやさしくないが、部品の活用ということでは胸が張れる。このあいだ勉強した熱抵抗の計算で、レギュレータの発熱がヒートシンクを必要としない程度であることを確認しておく。

  • 発生熱              (9-5)V×0.05A=0.2W(プラス側のみ)
  • 78M05Aの熱抵抗(接合部、表面間)   125°/W
  • 0.2Wのときの温度差      125×0.2=25°
  • 接合部の温度(気温35°時)    35+25= 60°
  • 接合部最大許容温度                     150°なので全く大丈夫

 工作は、最初作った抵抗分圧回路のパーツを基板からはずすのにまた苦労する。単価一個¥1の抵抗器などニッパーでさっさと切って次の空間を空けたほうが生産性が上がるのだが、昔から貧乏性というのか、可哀そうと思うのか、どんな小さな部品も生きているものなら捨てることができない。結局、最初の電源部の配線で残ったところは、ソケットとスイッチ、LED(パイロットランプ)だけで他はすべて作り直しになった。725

 電圧を可変するため、半固定の抵抗にし、あとで調整できるようにする。電源部は0.5ミリの錫メッキ線か、CRのリード線を利用して配線しているが、これが結構手間がかかる。0.5ミリ線も短くなれば曲げにくいし、下手に力を入れるとランド毎はがれてしまう。半田付けの1/3の工程でDIPソケットを逆にしていることがわかり、迷ったがやり直しすることにする。さしたICを抜くことはまずないだろうが、抜くときには恐らく逆にしたことを忘れている可能性が高い。万が一のときの備えである。

秋月FGキット稼動(9/15/08)
 DCコンバータを使った正負電源が完成した。電解コンデンサーとレギュレータが近接して余り良いレイアウトではないが、発熱は余り心配なさそうだし、基板にはこれから周波数カウンターのCPUチップが載る予定なので手狭なのは仕方がない。724fg

 電源線を半田付けする前にブレッドボードを介して接続し、電圧と電流を測ってみた。プラス側はともかく、マイナス側は調整が必要である。本体とつないでスイッチを入れる。順調にマイナス電圧が出てくる。上手く行った。半固定抵抗で-3Vから-7Vまで自由に電圧を選べる。電流も測る。プラス側が42mA、マイナス側が56mAであった。このあいだの簡易両電源の中位点がずれたのがうなずける。

  電源部のユニバーサル基板と秋月FGキットの基板の固定用のビス位置がかなり近いので少しネジ穴を広げて電源部の基板とキット基板を接続して1枚にした。これでバラックでも取り回しが楽になる。 手元が楽になったので、オシロを見ながら秋月FGの最高周波数を試験してみた。キットに入っているコンデンサーのリード線を短く切り、それを差し替え、差し替え周波数を高くしていく。周波数を高くしていくと、方形波のオーバーシュートが気になりだした。 Pict0729

20MHzは簡単に出るようだ。オシロの周波数表示を信用すると、26MHzまで出ることが確かめら れた。ただし、正弦波は15Mhzあたりから歪み始め、方形波は20MHzになると、「方形波もどき」的な波形になる。ただまだオシロに慣れていないので、これがFGが出しているものかオシロが歪んで測定しているのかはわからない。しかし、さすがは帯域60MHzのオシロだ、水平方向は20MHzでもまだまだ余裕がある。

72716mhz 心配したレギュレータの発熱だが、4Vの電圧降下でも思ったほど熱くならない。むしろLT1054のほうが触れないほどではないが結構発熱している。それにMAX038も同じくらい熱を持つ。周波数が高くなればなるほど熱くなるようだ。

アンプの測定に次に必要なのはアッテネーターになる。今はボリュウムをICクリップでつまんで動かしているので安心して他のことが出来ない。これも厳密なことを言いだせばいくらでも難しくなるが、今求めているのは単にアンプの入力になるくらいまでゲインを落とすだけなので単なる可変抵抗で十分だろう。Pict0736

 それと、周波数変更をいちいちコンデンサーの差し替えをやっていたのではやはり実用的とは言えない。部品は買ってあるので早くケースの工作を始めなければならない。いや次から次にやることが増えていく。

| | コメント (0) | トラックバック (0)

2008年9月14日 (日)

オシロを買ってしまった

清水の舞台から飛び降りる(9/7/08)
 衝撃的なタイトルをつけたけれど、私の買い物歴から言えば、このあいだのデジタル一眼レフ以来の高額の買い物である。 買うかどうか迷っていたオシロを遂に注文した。根が小心者だから10万近い買い物ではいつも迷いに迷って結局、買わなかったということもある。そして買う段になってケチって少し安いものにしてしまい、後で後悔したりする。しかし、電子工作を始めてそろそろ1年。この熱は暫く冷めそうにない。アナログの世界を探検するのにテスターひとつではジャングルに鉄砲も持たずに入り込むようなものだ(テスターはナイフくらいか)。

 とは言いながら、迷っていた自分を後押ししたのは、ネットの情報だった。狙っていた秋月電子のTFTディスプレイのデジタルオシロが秋月より2万円も安いことを知って、思わずこの激安ショップに注文を出してしまった。¥79,800。

 サイトの広告に、「6kロングメモリーの2ちゃんねるの薄型軽量...」などというちょっと怪しげなコピーがあったりして、お金を振り込むとき一瞬不安がかすめたが、帯域60MHz、250M/秒サンプリングの立派なスペック。PCオシロなどに付いているFFT(スペアナ)といった追加処理機能はついていないが、まあアマチュアの個人が最初に買うオシロにしては十分すぎる。恐らくオーバースペックだろう(秋月電子さんごめんなさい)。

 何故、こんなに思い切ったことができたのか。実はこれだけではない理由がある。リズムメーターの工作が進んで、アナログ部に整流回路とボルテージフォロワーのバッファーを追加しデジタル部に始めて接続したときのことである。コンパレーターでパルスにする前に、ADコンバーターで時系列で出ている電圧を測定することを思いついたのである。

 温度ロガーのときの資料を参考に、4msのタイミングでADCを動かし、マイクから入れた音をUARTに吐き出させるコードを追加した。動かしてみた。出てくる。出てくる。最初、数字の出方がまちまちだったが、音声のような断続的な電圧を一点だけで計測していることに気づき、10回測った平均を40msのタイミングで出力することにすると安定した。

 メトロノームをマイクに近づけて計測する。やった。正確なタイミングでパルスが観測できた。よしよし、リズムメーターの基本部分はこれで出来そうだ。あとはアンプのゲインを上げたり、パルスの閾値をチューニングするインターフェースを考えれば実用的な計測器になりそうだ。Rythm_log

 この数字の羅列を見ながら、手探りながらアナログの現象を良くここまで追い込んだなと自分ながら感心する一方、この音声波を目で見ることが出来たらどんなに楽になるだろうと考えた。 ここからパルスを正確なリズムにする過程にはまだまだ乗り越えなければならない問題があるはずだ。スイッチのチャタリングを抑えるのと同じ工夫でデジタル系は何とか解決しそうだが、バラックで組んだオペアンプのところは全く手が出ない。

 回路を少し換えるだけで劇的に音が良くなった経験もある。アナログもちゃんと部品の性能を出してあげたい。それにはテスタだけでなく、まともな計器がなければ話にならない。オシロスコープが欲しいと言う気持ちがこれまでになく強くなったのである。あのロジアナだってあるとないとでは大違いだった。今度も役に立つに違いない。

 それにしても、この1年のはまりようは、自分でも驚く状況である。10万円近い計測器まで買ってしまうのだから。しかし、実は密かな野心が生まれている。オシロがあれば、禁断のオーディオの世界にも自信を持って進めそうなのだ。これでまた世界が広くなる。

オシロが届いた!(9/9/08)
 注文したのが、日曜の深夜。今はネットで銀行振り込みが出来るのでそのとき同時に振り込みも済ませる。実際に振り込まれるのは月曜のはずだ。まあ、品物の到着は2、3日かかるだろう、その前に参考書でも買ってくるかと思っていたら、その翌日の朝、早くも宅急便が来て品物を置いていった。は、はやい。 早すぎる。A9091359

 はやる心を抑えて、梱包をとく。ポータブルなのでとても軽い。しかし、画面は8インチある。オーディオルーム(工作室)に持っていくのももどかしく、居間で電源を入れる。まず、お手本どおりプローブの校正をコネクタの先のトリマーでやる。おお、教科書どおりパルスの立ち上がりを調整できる。何か急に自分が専門家になったような気分である。

工作室に持ち込んで、早速CDプレーヤーの出力を入れて動かしてみる。出た。研究室で見せてもらうだけだった御馴染みの音声波形が出てくる。何しろ参考書を買う前に届いてしまったのである。予定が狂って、次に何をして良いのかわからない。とりあえず、工作コーナーを整理して、一番奥にセットする。

分解能は上下8ビットなのであまり波形は滑らかにならない。誰かが書いていたようにプロットがちょっと太くて精密な感じがしない。メモリは5キロほどしかないのでロガーのようには使えない。FFTがついていないのはやっぱり不便だ。調べていくと色々不満なところは出てきた。しかし、オシロを使い込んでいるわけでもなく、操作にも慣れていないので即断は禁物だ。もう少し使い込718んでから評価をしたいと思う。

 シグナルジェネレータがないので、連続波形を見たあとは当面やることがなくなった。シングルトリガーで、過渡特性なども見たいが、勉強不足でどうやったら良いのかまだわからない。懸案のマイクで拾ったリズム音は増幅器がまだ完全でないので恐らくノイズに埋もれて無理だろう。まあ、あわてずにぼちぼちやって行くことにしよう。

秋月のファンクションジェネレーターキット[AKI-038](9/12/08)
 泥棒を見て縄をなうということわざ通り、オシロを買ったあとシグナルジェネレーターを自作している。数万円だせば安い既製品があるが、アマチュアでもアマチュア無線のように周波数がふらついて人に迷惑をかけることもないし、ましてや人に使ってもらうものを作るわけでもない。デジタルのDDSはあとの楽しみに置いておいて、秋月で値段も手ごろな(¥3500)、アナログICのMAX038 を使った信号発生器キット(AKI-038)を買ってきた。こいつはネットでも評判が高く20MHzまでの正弦波、方形波、三角波を出せる。ただ世の中はデジタル時代でチップは製造停止になってしまったようだ。

 まあ、こちらは今は音声周波数の範囲がでるだけで良いから、完全なオーバースペックだ。それより、計測器なのでケースに入れたいが、その実装に頭を悩ましている。折角だから、AVRで周波数カウンターを作ってLCDに表示させたい。周波数レンジもロータリースイッチか、これもマイコンでリレーでも動かして高周波まで出せるようなものにするか構想はいくらでもふくらむ。実装が決まらないとケースの大きさも決まらないし、気に入ったケースだと基板や外付け部品がはみ出て実装が出来なくなったりする。といって大きめのケースにすると何か間抜けな感じになる。いや、これだけでも難しい。

 とりあえず、周波数帯を決めるコンデンサーのところをICソケットのピンにしてバラックながら暫くは実用的に使えるようにする。キットそのものは、半田付けだけだから造作もない。一晩で出来たが、問題は、電源である。始めての正負電源の製作である。幸いオペアンプのサイトで散々両電源の回路を見ていて一番簡単な、単電源から大容量のコンデンサーと抵抗で中間電位を得る方式にして、小さな基板にDCアダプタをつけて作り始めた。秋月で9VのACアダプタを手に入れ、これを半分にしようというのである。5Vが4.5Vになるが、まあそれは目をつぶろう。どうせ低周波しか使わない。

 作った後から考えれば、この回路の見本にしたオペアンプの消費電流は精々10mA程度、今度のジェネレーターは100mA近い電流を要求しているのでうまく行く筈がなかったのだが、作っているときは気づかない。出来たあと無負荷で電圧を測るとちゃんと、4.5Vづつに分配されている。早速キットにつなぐが動かない。テスターで電圧を測ると、プラス側が6.3V、マイナス側は-2.7Vと偏ってしまっている。

 分圧抵抗に流れる電流の何十倍の負荷をかけているのだから当たり前といえば当たり前なのだが、能天気なことに作ってみてから気がついた。分圧抵抗に100mA以上流せばよいのだろうけれど、そんなことをしている回路は見たこともないし、だいいちエネルギーの無駄で美しくない。

 それより、早くジェネレーターを動かしたい。オシロを見るために、ジェネレータを作っている。そのための電源に余りかかづらっていられない。えいやと、手持ちの+5Vのスイッチングアダプタ出力を2つ正負になるようにつなぐ。これが不思議なことに電圧がでてこない(あとでタイミングの関係でどちらかが動かなくなることを知った)。何となく気持ちが悪くなって、すぐにやめ、片一方を乾電池3個で供給してみた。

 やっとジェネレータが動いた。モニターのヘッドフォンに正弦波らしい単調な音が流れる。早速オシロのプローブをつけて波形を観測する。音楽音声と違ってクリアに表示される。8ビットの分解能はやはり少し苦しい。しかし普及版のデジタルオシロは大抵が8ビット(256ポイント)の垂直分解能だ。文句を言っても始まらない。色々レンジを換えて見る。やはり情報どおり、正確な正弦波ではなく先が少し尖っているのがわかる。

 方形波、三角波、順調に観測できた。あとはしっかりしたアッテネーターを用意すれば、いよいよオペアンプの調整に入ることができる。しかし電源には困ったものだ。色々な選択肢があるだけに決めるのが難しい。

 まあ、まだ先は長い。これも泥縄のくちだが、オシロとオペアンプの参考書も手に入れた。ゆっくり少しづつ決めていこう。

| | コメント (0) | トラックバック (0)

2008年9月13日 (土)

禁断のアナログの世界に入る

リズムメーターとよぶものを作っている(8/30/08)
 2週間も記録が滞っていた。娘のホームページ制作が一向に進展しないので、しびれを切らしてフリーのブログで公開し始めた。まだ一部しか公開できていないが、早速訪問者がある。キーワードで検索してやってくるようだ。ENC28J60などの型番を入れると反応がある。

 この記録は本来、忘れっぽくなった自分の備忘録のつもりだったが、公開し始めると色々気になって写真を追加したり、やっぱりよそ行きの顔をしなければならないので、そう気楽に書き込めなくなってきた。始めは苦労して作ったソフトが誰かの役に立てば良いかと思って始めたブログだが、毎日の訪問者ログを見ていて、増えれば素直に嬉しいし、減れば心配になる。自分が何かに嵌っているとき、同じような苦労をしている人のブログを見れば、力づけられるし参考になることが多い。と、思って最初は迷ったが、結局、日記そのままの状態を公開している。

 電子工作の方は、H8のMMCでつまづいて完全な足踏み状態である。この方向はHigh Endの方向で、どうせやるならH8 ではなく、この上位機種のSHシリーズでやるべきだろう。uCLinuxがターゲットだが、H8はメモリ増設が必須だし、SHなら¥8000も出せば、クロック133Mhzで、SRAMが32MもあるSH3の評価ボードが手に入る。これならお家サーバとして十分な働きができる。

 そんなこともあって、これまで暖めてきたリズムメーターの構想を具体化することにした。リズムメーターとは私の造語で、間歇的な音(メトロノーム、拍手、掛け声など)が出ているときにその間の時間を表示する機械のつもりである。脈拍計のセンサーを通常の音声マイクに換えたものと考えてもらえばわかりやすい。私はリズム音痴で、フルートを吹くときは必ず、メトロノームをつけて練習するようにしているが、どうもメトロノームがどこまで正確なのか気になっている。自宅とレッスン場の早さが違うような気がする。ストップウオッチで1分かけて測れば測定できるが、人間の誤差も馬鹿にならないし、レッスンに行っていちいち時間をかけて測るのも気が引ける。

 ミリセカンドオーダーの測定はマイコンの得意とするところだ。マイクから音を拾って、コンパレータを通せば簡単に音のリズムはデジタル化できる。これまでのデータの移動平均をとって、その誤差が一定限度を越えればLEDなどを点滅させて警告すれば、調子が狂ったことがすぐわかる。面白いアイデアだと思うのだが、Webを探してもこういう機械はどこにもない。

 オーディオマニアのように凝るつもりはないが、こうした計測関係のアナログ電子回路はやっておきたいところだ。それで大分前から、LEDとLCD表示をつけたリズムメーターの仕様をかためてきている。ただ、例のないしかけなので、仕様は出来たものの、これで良いのか確信がもてないので具体化をためらってきた。717_78k0

 そうだ、ハードの工作を忘れていた。このあいだWebの情報(http://homepage2.nifty.com/denshiken/AVW020.html)で、雑誌付録のUSBの8ビットマイコン(78K0)をAVRライター(AVRISP互換)にして、AVRstudioから直接書き込みが出来るようにしたが、それほど早くない。それにAVRspに比べると純正のAVRISPは、いちいちターゲットチップの定義をする必要がある。chaN氏が教えてくれたAVRstudioの中から、hexファイルをAVRspに送る方法(chaN氏は照れていたけれど)が何といっても一番効率的で、78K0のためにわざわざケースまで買ってきたが、今ひとつ気乗りがしないで放ってある。

 というので、きのうからブレッドボードにTiny2313でリズム計の実装を始めた。とりあえずアナログ系は先にして、スイッチでインタバルを測り、UARTに吐き出させる。移動平均をとって、その間Wsrythmeの誤差でLEDの色を変えたり、点滅させたりするアイデアである。最終的には、LCDに直近の間隔と移動平均値を出して携帯できるようにする。

 16ビットタイマーは初めてだったが、順調にタイムが表示される。5秒程度を最大間隔にすると、分解能は64us。メトロノームの測定には十分である。LEDを点滅させるところで、2Kのフラッシュが満杯になる。4桁以上の数字を表示するので、chaN氏のxatoiを活用したのだが、やはり500バイト以上喰ってしまう。急遽、Tiny861に換装する。0715rythme

 換装はそれほどの問題もなく終了した。移動平均との差が10%以下ならLEDが連続点灯、30%まで点滅、それ以上は消灯という仕様で、そのとおり動くが、これが役に立つかは自信がない。リズムを変えて行くと確かに連続から点滅、消灯とはなるが、%なので、1.3と0.7の間隔の違いが同じかと言われるとよく分からない。誰も作ったことのない機械だと思うので参考にするものがない。そもそも移動平均という値が、こういうときの参考値になるのかというのも問題である。

 まあ、デジタル系はこのへんにして、今度はいよいよアナログ系に行こうと思う。初めてのオペアンプ、コンパレータの実験が待っている。

禁断のアナログの世界(9/5/08)
 何十年ぶりかのアナログの世界である。オペアンプを買う前に、例によって、Webで少し勉強する。この世界も広くて深い。私のアナログの最後はトランジスタの低周波増幅まででオペアンプの知識は書物の上で知っているだけ。トランジスタも昔見よう見まねでアンプを作っただけで、まあ、オペアンプまわりは完全な素人である。

 調べていくうち、オーディオの世界に戻りそうになる。危ない、危ない。今度の目的は、単にリズムを打つ音響(メトロノーム、拍手)をサンプリングしてそのタイミングを入力させるだけが目的で、音質は問題外である。モデルはオーディオのVUメーター出力である。コンパレータといっても基準電圧は1V程度だろうから、出力は0.5V(P-P)もあればよい。

 大体の目安がついたところで、秋葉原に立ち寄る。今まで横目で見て通り過ぎていた秋月のオペアンプのコーナーに意を決して分け入り、最も定番だとされる汎用のLM358(1ヶ¥20)を手始めに選んだ。あとで調べたら秋月にはオーディオ用にも使える、低ノイズのオペアンプがこの程度の値段で沢山あることを知る。良いのだ。オーディオの世界にはいかない。と言いながら、目的もないのに、つい1WのパワーアンプIC、NJM386まで買い物皿に入れてしまった。

 ブレッドボードにあるリズムメーターのデジタル部を整理して、少し空間を作り、ここへオペアンプを設置してテストを始めた。入力はこのあいだのボイスレコーダについていたコンデンサーマイク。出力は、とりあえず周りに沢山転がっているヘッドフォンをみの虫クリップで挟んで使う。まともなピンジャックを買ってくる必要があるようだ。

 回路図は山ほどあって、何を選んでよいかわからない。データシートにあるACアンプは部品点数が多く面倒なので、簡便なものを探す。単電源のACアンプは意外と少ない。部品が少なく、手持ちのパーツの定数で出来るようなものを選んで、とりあえず組んでみた。

 しかし、出てきた音は、ノイズだらけで、音は割れまくり、とてもアンプとは思えない音であった。まあオーディオ用ではないからこんなものかと納得し、電圧をテスターで測る。マイクに近づけて大きな声を出してやっと0.2V程度で、これを整流しDCにしたら半分以下になるだろうから、このままではちょっと微妙なところである。大きな声を出していたら、家内が心配して見に来た。発作と間違えたらしい。お笑いの世界である。

 抵抗値などの諸元を替えてみる。これが結構クリティカルで面白い。カップリングコンデンサーを10μF以上にすると電源を入れてから暫く経たないと動作しないことや、1μF以下では、低音がすっかりカットされてしまうことなどを学ぶ。経験者には当たり前すぎて話にならないことが新鮮で面白い。ノイズも中間電位点をバイパスコンデンサーで接地すると劇的に下がることがわかった。

 調子に乗って、普通のトランジスタ増幅との比較がしたくなり、別の場所に組んでテストしてみた。増幅度は余り大きく出来ないけれど、これはもう全くハムやノイズもなく、ちゃんとしたアナログアンプになる。部品も余り多くない。これを2段にするほうが良いかもしれない。なぜみんなトランジスタを使わないのだろう。

 次の日お客が来たので、机上を片付け、オペアンプのテストを終わろうとしてデータシートを見ていたら、今まで試したオペアンプ回路がすべて反転増幅だったことに気づいた。非反転増幅もテストしておこうと思い、データシート通りの回路を組んでみた。この回路はコンデンサーが4つ抵抗が6つも必要でトランジスタ回路よりはるかに部品が多い。

 ところが、これを動かしてみると、今までの回路とは全く違ったのである。驚いた。ノイズが格段に小さくなっている上、音が全く割れない。これが同じICかと思うほどの差である。汎用オペアンプだからこんなものだと思っていたが全然前と違う。アナログは本当に難しい。やれやれこれからが思いやられる。

オシロスコープが欲しい(9/06/08)
 ブレッドボードの前のちっぽけなアナログ回路を前に考えた。回路を替えるだけであれだけ音が違うのである。デジタルと違ってアナログは正解がない。デジタルなら、想定どおり動けば、それが正解でそれ以上の答えはとりあえずない。やっかいなことになってきた。目的は前にも書いたように、メトロノームなどの音の周期を測るだけなので、それだけなら、もうひとつのオペアンプで整流回路を作り、ADコンバーターにでも入れてやれば電圧値が測定できるのだろうが、何となくこのまま通り過ぎるのに抵抗がある。

 そうなのだ。長年あこがれてきた夢、オシロ、スペアナなどを駆使して色々な電子回路を工夫して楽しむ世界が目の前にあるのに通り過ぎてしまうことになる。測定器と言えばテスターだけで、結局この世界は大学のほんの一時期しか経験しなかった。社会人になってからはソフトウエア一本で、本式のハードの現場は全く経験していない。

 アナログは禁断の世界だと言っていたが、ここまで電子工作を始めて、ブログまで公開してしまったのだから、もうちょっと入ってみよう。それには、やっぱり、マイクの前で大声をあげて、秋月の安物のテスターのACレンジで、おお200mV出たなどというお笑い実験から、せめてシグナルジェネレーターとオシロスコープぐらいを備えた余裕の実験をしてみたくなった。

 というので、このところWebでは、何かというとオシロスコープ関連のサイトに立ち寄ることが多くなった。予算は10万以下、USB接続のPCオシロではなく、やっぱりスタンドアロンのものが欲しい。帯域が問題である。将来、どこまで工作の範囲を広げるかで最大が決まる。一番安い25Mhzでも、TVの同期信号くらいまでは大丈夫らしい。無線はもう恐らくやらないので、これで十分だとは思うけれど、何か物足らない。シグナルジェネレーターも自作してしまえば良いが、これも少しまともなものが欲しい。秋月電子が売っているオシロのラインナップは大体、一般の価格の半値で、Webに出ている激安オシロと同程度、中には全く同じ製品と思われるものもある(激安店では特別セールと言っているが、価格も型番もぴったり同じ中国製)。

 迷っている。折角、大枚をはたく決意をしたのだから、テクトロには手が届かなくても、岩通あたりの廉価版の定番を10万出して25Mhzのものを買うか、同じ10万なら高性能(100Mhz)の激安ものを買うか。それともあっさり秋月で普及版(25Mhz)の4万のオシロとまともなジェネレーター2つを予算の中で買うか。Web情報によれば、5 %以内の誤差で測れる周波数は、最大帯域のわずか30 %で、25Mhzなら精々8Mhzまで。 100Mなら、30MhzのCPUクロック波形までだ。しかもオシロで波形を見て何かの役に立つのか。そこのところがわからない。ただ、中古はやめておこう。素人が手を出してろくなことはない。

 いずれにしても、アナログをこれからもう少しやるのなら、オシロは、デジタルのロジアナ同様、かかせない測定器になるのは間違いがない。

| | コメント (1) | トラックバック (0)

2008年9月11日 (木)

気分転換にH8/3069Fに挑戦

H8/MES(8/11/08)
 体の鍛錬のためテニスを続けている。昨日は猛暑をものともせずテニスをやってきた。この日は、これまで全く勝てなかった常勝のペアに珍しく勝つことが出来、すこぶる気分が良い。思い切り体を動かすことと、地下室で拡大鏡をつけて細かい半田付けする作業を並行してやると、何かとても体の中に充実感を覚える。これからもどちらも気を抜かず頑張ろう。

 電子工作の方は、このところデジタルオーディオに思わずのめり込みそうになり、少し冷静になろうと別のことを始めることにした。 これは大げさな話ではない。オーディオの世界の「良い音」というのは麻薬に近い強い依存性があり、求め始めると電子工作の比ではない。良い音を聞いて、一旦、鳥肌が立つような感覚を経験すると、良い音を探し求めて止まらなくなる。

 私の数少ない経験でも、スピーカーを換えたり、カートリッジを替えて、同じソース(レコード)から全く違う音楽が出てきて、しびれたことが何度もある。人から借りた高価なプリアンプを朝の目覚ましのFM放送に使って余りの音の違いに寝ぼけ眼で飛び起きたこともある。

 DACの研究をしているうち、この魔力にとりこまれそうになった。ウェブサイトの制作記などを読んでいると、ハイエンドの装置が素人でも作れそうな雰囲気である。ハードの技術が進歩して音質がチップ次第になったからだ。それこそ秋月で¥800のDACチップがSACDのレベルを満たしている。

 120万円もする舶来高級ブランドのDVD-Rプレーヤーの基板が、3万円の日本の普及版プレーヤーと全く同じだったなどという記事を見ると制作欲望がふつふつと湧いてくるが、危ない、危ない。実用的といえば、これほど実用的な応用はないのだが、この道は際限がない。深入りは少し見合わせることにする。

 ということで、大分前に買った秋月のH8/3069 LANボードを気分転換に久しぶりに取り出した。どうも2~3年前にブームになったらしく、検索でヒットするサイトはみな少し古く、このあいだ入れたMESというマルチタスクのOSは制作者がサポートを打ち切ってしまい、色々なことを簡単に試すことが出来なくなった。

 当面の目標を、SDカードインタフェースをつけて少しまともなHTTPサーバーを動かすことに置いた。折角2MのSRAMがついているのでSDカードを利用して自立的なサーバー、あわよくばLinuxを入れて運用してみようと思っている。

 このH8のROMの書き込みを保証している回数はAVRと違って100回しかなく、余り気楽な開発をしていると制限を越えてしまう。 このMESはMMC(SDカード)をサポートしているので、SDカードにデータだけでなく実行ファイルも収容し、2MあるSRAMでアプリケーションを動かし、ROMは余りいじらないで済むようにしたい。

 というので、正式なボードに作りこむ前に、SDカードの動作をプローブコードなどで仮配線してつないで確認してみた。しかし、アクセスLEDが点滅するものの「Disk I/O Error」という冷たいメッセージではね返されてしまう。こういうときはウェブが頼りである。「H8 MMC SDC MES」などのキーワードで調べる。あったあった。沢山の人がこれに挑戦している。そのなかで、「H8はCSが反転しているので」という文言を見つけた。

 これだ、動かない原因は。MMCやSDカードのCS(チップセレクト)は負論理だ。モジュール化されたカーネルの部分は公開されているので、慌ててソースコードを調べるが、OSのソースコードはI/Oが極度に抽象化されており確認するところまで追い込めなかった。しかし、動かない原因はこれに違いない。とにかくまともなマザーボードのための工作を始めた。

 それと同時に論理を反転させる回路を考える。一箇所だけにインバーターICを使うのも芸がない。必然的にトランジスタということになるが、MMCのスピードはUARTなどより一桁速いので気楽にトランジスタでつなぐと遅延でおかしくなる。相手はCSなのでそれほどシビアではないかもしれないが、測っておきたい。

 ブレッドボードで適当に回路を組み、ソースはI2CでやりとりしているRTCのついたブレッドボードのAVRマシンにロジアナを入れて測ってみた。いやいや大変な進歩である。こういうことが手軽に測定できるようになるなんて昨年の秋まで思いもしていなかった。自分の世界がこの年になって広がったことを実感する。素直に嬉しい。

 これまでストックのあった2SC945(2SC1815の前身)でベース抵抗10KΩ、コレクタにつけるプルアップ抵抗10KΩで、立ち上がりこそナノセカンドのオーダーだが、立下りは、3μs近くもあることがわかった。こうした用途のためこのあいだ買ったパワーのある2SC1213はもっと遅い。うーむ、3マイクロなんて遅すぎる。その証拠に100KhzのI2Cのデータはいたるところで取りこぼしてちゃんとした反転データになっていない。メガオーダーのMMC(SPIインタフェース)ではチップセレクトと言えども心配だ。

 ここで10年以上も前に買ったデジタル回路の参考書を思い出した。そうだスイッチングの高速化の方法の解説があったはずだ。早速取り出して見てみる。なになにスピードアップコンデンサーを入れろと書いてある。なるほどコンデンサーの微分効果で逆パルスをベースにかけてコレクタの電子を早く吐き出すのだそうだ。

 言われるまま、100pFのコンデンサーをベース抵抗に並行に入れて測ってみる。おお、立下りが飛躍的に改善され、0.4μsまでになった。I2C(100Khz)のデータが完全に反転している。調子に乗って200pFにしたらI2Cの通信に干渉し測定不能になる。まあ、想定している入力はH8のI/O出力ポートだからこれは問題ない。

 デッドストックだったトランジスタが役に立ち、10年も前に買った参考書が役に立ち、一万円の廉価なロジアナが見事に機能して目的の回路が完成する。何かこれまでになく気分が高揚してこの日はなかなか寝付けなかった。

やっぱりMMCインタフェースが動かない(8/14/08)714h8

 インバータ実験の成功に気を良くし、SDカードソケットのついたH8/3069Fの正式なマザーボードの実装を急ぐ。2日間で出来上がった。勇んで、電源を入れたが期待に反して全く動かない。CSが反転していることは他のサイトでも確認し、これで良いはずなのだが、MMCのマウントが成功しない。バラックのときと違ってSDカードの種類によって「DiskError」だったり、ハングアップしたままだったり少し事態は進展しているように見えるが、動かないことに変わりはない。

 SDカードからの出力が3.3VでH8のポートのドライブ限界に近いということで、5Vからのプルアップ抵抗を入れてみたが、やはり動かない。ロジックアナライザーを再び投入する。これがいかにももっともらしいシーケンスが記録されている。初期化が進んであるところで同一のやりとりを永遠に続けている。これがハングアップの状況である。

 また、ウェブ情報を探索する。SDカードのメーカーによって動かないという報告や、最新バージョンのカーネルではMMCが動かないというレポートを発見し、肩の力が抜ける。モジュールでMMCドライバーを組み込むと動くと言うことなので、いちからカーネルを作り直し、モジュール版のカーネルを作り直したが、やっぱり駄目だった。古いバージョンなら大丈夫だと言うが、本家のサイトでサポート打ち切りを宣言されているので、ネットに古いカーネルがころがっている可能性も薄く、今のところ完全に手詰まり状態である。

 MESのソース提供をこのあいだメールで申請したが、やはり個人開発のOSの限界を見るようで、少し熱が冷めてきた。LinuxがどうもH8でも快調に動きそうなので、そちらに関心が移りそうだ。しかし、LinuxでSDカードがアクセスできるかどうかはまだわからない。

MMCディバイス実装は一時中止へ(8/15/08)

 結局、MESでSDカード(MMC)を動かすことは諦めることにする。ウェブに出ているハードの工夫(プルアップ、大容量パスコン)はみなやってみたが、状態が変わらない。ソースも調べたが、chaN氏のFatFSのMMCドライバーと全く構造が違い見当がつかない。FatFSにはH8用のドライバーソースがあるので移植しようと思えば出来ないことはないがこれは相当ハードルが高い。よほどの決意と集中力がないとこれは手がつけられない。

 H8クラスでLinuxを動かすのも最初は乗り気だったが、調べてみると、このあたりがLinuxが動く最下限の性能でそれ以上の進展が望めなさそうである。それにH8自体が相当古いチップで、このルネサス製のCPUチップは新しいSHシリーズが主流になっている。¥8000も出せば、LANもMMCインタフェースもつき、SRAMが32MBもあるSHのCPUボードが手に入ることがわかった。これならLinuxも楽々動く。 単にLinuxを動かしました(uClinuxだが)、というだけでは余り面白くない。どうせならLinuxの豊富なソフトを利用して省電力のお家サーバーを作ってみたい。

 ということで、H8まわりの開発は少し中断することにした。LANならこのあいだのフリースケールの付録基板MCF52233があるし、フラッシュもH8の半分の256Kある。こいつのHTTPサーバーの動作は確認してある。ただ無料の開発環境が128KまでなのでGCC環境が整備されるまでLAN関係は少しお休みすることにする。

 と、書いてみたものの、折角マザーボードまで作り、今のところ2メガもメモリのある機械はこれしかない。幸い、ディバイスドライバーのソースは手元にある。仕事の原稿も凡そ書き上げたので少しづつ調べていくことにした。ディバイスの初期化のプロセスは詳しくウェブに載っているので、どこでおかしくなっているかはロジックアナライザーの記録でわかるはずだ。カーネルのディバイスドライバーの形で動いているが、これはコンパイルオプションでアプリケーションとしても動くはずだ。今のままではモジュールと言えどもROMの中に入るので、書き込み制限のため試行錯誤が出来ない。

 アプリケーションで動かす手順がわからないため、モジュールになっているカーネルドライバーを解析してみた。やっと、MMCを初期化しているところを見つける。ロジックアナライザーの波形をひとつひとつ調べ、コマンド0のinitialize、コマンド8のcheck、までは正しくMMCがレスポンスを返していることがわかった。

 問題はこのあとの、コマンド1のenableである。何回やっても、X'01'のビジーフラッグが上がり、先に進めないということがわかる。乱暴だが、この無限ループを有限回に替えてさきに行くようにした。ところが動きに変わりがない。どうも関係ないループの方を有限にしたらしい。

 デバッグステートメントを入れてみたいが、いろいろ試した関数はみなコンパイルエラーではじかれる。カーネルのドライバーとアプリとの差がわからないので、手探りである。やれやれ、やはり難しい。まあ、わからないまま、色々やっているうち薄紙をはがずように見えてくるものだ。もう少し様子を見てみよう。

| | コメント (0) | トラックバック (0)

2008年9月 9日 (火)

がた老AVR研、音響研究へ

秋月のボイスレコーダキット(8/3/08)
 イーサネットマイコンも無事動いてがた老AVR研究所の懸案はとりあえず片付いた。しかし、AVRのマイコン以外に、種類の違うマイコンが4つも揃ってしまった。小さいほうからあげるとUSBインタフェースのついたNECの78K0(8ビット)、イーサネットのついたフリースケールのMCF52233(16ビット)、USBとSDソケットのついたARMのSTM32F103(32ビット)の3つでいずれも雑誌の付録基板である。これに秋月のH8/3069FのLAN基板もあるのでAVRを合わせれば計5つになる。これに加えて雑誌の付録基板には、25 万ゲートのFPGAもある。もう何が何やら分からない状態である。

 FPGAだってあれから全く進んでいない。少しまともな本を買って勉強しようとは思うが、適当なターゲットが見つからない。今さらシフトレジスタやタイマーを作ってみても応用先がないし面白くない。といって、いきなりVGAのインタフェースを作るのは少し無謀すぎる。

 で、いま少し食指を動かしているのがビデオよりもう少しやさしいデジタルオーディオへの応用である。オーディオDACは安くて実用的なチップがあるので、FPGAをFIFOバッファーにして、SDカードからのWAVデータを連続再生してみようと考えた。SDカードのアクセスとデジタル再生はサンプリング周波数が低ければ、1CPUで何とかできそうだが、少しまともな音にするにはDACチップなどの専用ICが必要でそれもバッファーがないと危ないはずである。

 ということもあって、このあいだ秋月に寄ったとき、1分間録音再生できるボイスレコーダーキット(¥1000)を面白がって買ってきた。小さなブレッドボードがついており、これが他に役に立ちそうで欲しくなったということと、今どきの電子工作のデジタルオーディオのレベルを知っておきたかったというのもある。

 イーサネットマイコンが動いて手が空いたので、袋から取り出し組み立ててみることにした。ブレッドボードなので小一時間の作業で完成する。ただブレッドボードの大きさに比べて部品数が多く結構ギリギリのサイズである。0オームという抵抗を使うのは止め、ジャンパー線にしたのでだいぶすっきりした。このキットには録音、再生を切り替えるスイッチが入っていない。ジャンパーピンで切り替えるようになっている。いくらなんでも操作性が悪いのでスイッチをつけたす。Pict0710

 1分ではなく30秒のハイクオリティにする。あとで調べたらハイクオリティといっても8KHzのサンプリングなので多くは望めない。動かしてみた。おお、ちゃんと音声が録音される。しかし、サンプリングノイズ(ホワイトノイズ)が大きく、音声は聞き取れるが、昔のSPレコードより音質は悪い。明瞭度からいえば昔の黒電話くらいだろうか、少しがっかりした。やっぱり最低でも16KHzくらいのサンプリングは必須のようだ。ただ、音声を最大8つのブロックにわけてそれぞれ外から制御できるので、ロボットなどに喋らせるのには使えそうだ。

 そんなこともあって、今、オーディオ関係の整備が忙しい。実は我が家には、MIDIの設備が一応揃っていて、昔の定番音源ローランドのSC88がPC机の棚の上に乗っていたりする。楽譜を自動的に読み取るソフトはバージョンアップを繰り返して最新版がインストールされている。最近の読み取りソフトの性能は向上し、ピアノ用の大譜あたりだと90%以上の認識率がある。一時はソフトシンセの世界に入りかけたが、何十万円もするウイーンフィルの音源を使った実演奏顔負けの演奏データを、ウェブのMP3データで聞かされ、あまりの奥の深さに恐れをなし、先に進むのを思いとどまった。

久しぶりにMIDIを聞いてみようと思ってSC88に火を入れてみた。そう言えばこのMIDIデバイスは昨年の秋以来、AVRのシリアルライターにCOMポートをとられて孤島になっている。COMポートをAVRライターからこいつに切り替える。と、これが動かないのである。あちこち調べるがPC側のドライバーは正常のようだ。暫く動かすうち、SC88からのアナログ出力は無事出るようになった。しかしMIDI入力がSC88に入っていかない。SC88へのシリアルケーブルは自作である。これは10年以上前、MacからDOS/VにMIDI環境を換えたときに作ったもので資料など残ってない。

 動かないとなると気になって他のものが手につかない悪い癖が出る。マイコンそっちのけで調べ始めた。ケーブルを分解して調べようと思ったとき、はっと気がついた。シリアルケーブルはこのあいだH8マイコンと接続するためクロスケーブルをストレートに換え、AVRのシリアルライターも配線換えしてある。これだ。あわてて自前のストレート・クロス変換コネクタを間につける。しかし、動かない。

 こうなったらケーブルを疑うしかない。まずDSUBソケットを分解して配線を確かめる。おお、あたりだ。CTSとRTSをつないでディバイスをReadyにみせかけるジャンパー線が浮いている。しっかり半田付けをしなおしてつなぐ。しかし、それでも動かない。うーむ、あとはDINソケットのほうの配線だが、これはネジ止めでないので現状を留めたままもういちど開けるのは至難の業である。

 思いあぐねて、シリアルMIDIケーブルのDSUBソケットを見るともなく見ていたら、ソケットがメスだということに気がついた。待てよ。以前使っていたクロスケーブルは両方ともメスだった。ということはこのシリアルMIDIケーブルはこのケーブル経由でつけていない。直接PCのコネクタに接続していたのだ。うはあ、クロスではなかった。さっきのストレートクロス変換コネクタをはずす。音が鳴った。やれやれ。やっぱり断線が音の出ない原因だった。半日がかりのMIDI騒ぎはこれでやっと落着した。

デジタルオーディオも奥が深い(8/6/08)
 今月中に仕事で作らなければならない提案書があるのだが、なかなか具体的に書き出せないでいる。現実逃避で工作を始めたら収拾がつかなくなる危険があるので工作には手を出していないが、相変わらずウェブの検索は、いつのまにかマイコン関係になってしまう。

 いや、それにしてもオーディオの世界も奥が深い。このあいだの¥1000のボイスレコーダーとは違う少しまともなDACを調べ始めると、あとからあとから情報が出てくるのに驚く。ここはもはや電子工作の世界ではなくハイエンドのオーディオマニアの世界であることがわかる。市販のデコーダーに飽き足らない人が、どこで手に入れるのか知らないが多種多様のDACチップとオペアンプでいわゆるSACD(スーパーオーディオCD)などの再生に挑戦している。

 デジタルはチップの性能で殆どが決まるからアマチュアの参入障壁が低いのだろう。昔と変わらないオーディオ自作マニアが元気だ。こちらも独身時代は少しオーディオに凝っていたから、つい道草をして、スピーカーケーブルで本当に音が良くなるのかといった昔からの論争など、本来の目的とかけ離れた記事を読みふけって中々先に進まない。 最近流行の真空管アンプなどは間違いなくこうしたハイアマチュアの努力というか執念が実ったものだろう。

 Windowsのサウンドレコーダーが自由にサンプリング周波数を変えられることを知って、早速試してみた。ウェブには情報が溢れているが、一般的な音質とサンプリング周波数、データビット長の対応を明確にしているところが意外に少ない。自分で確かめるのが一番だ。最近のPCは音源にはことかかない。色々な音で試してみた。その結果、サンプリングが10khzではやはり全く駄目で、せめて15k、データサイズも8ビットではノイズが乗ってまともな音にならないことがわかった。

 今求めているのは、Webで遠隔地からの指示で何らかの音を発生させる仕掛けを作ろうとしているので、それほどの音質は求めていない。と言って我が家でしゃべる電化製品のひとつである風呂の自動湯沸し装置の女性の声くらい(AM放送より良くてFM放送まで行かない)は欲しいところだ。

 とすると、サンプリング20Khz、データサイズ16ビット(AMとFMの中間)というところなのだが、これが微妙な仕様なのである。AVRは16ビットのPWMはあるがクロックが最高20Mhzまでなのでサンプリング周波数をはるかに下げないと無理で、20Mhzではせいぜい10ビットが限界である。PWMをあきらめて専用DACを秋月でひとつ¥250で買ってくれば、ステレオ44.1Khz、16 ビットのCD再生プレーヤーがただちに出来るが、これは目的とはかけ離れてしまう過剰スペックになる。それにこのチップの情報がウェブには殆どないので動かすのに苦労しそうだ。

 以上が3日間の調査の成果である。これまで霧の中だったデジタルオーディオの世界がうすぼんやり見えてきたというところか。しかし、SDカードを読みながら、絶え間なくデジタルデータをPWMなりDACに送るソフトの仕掛けはまだ白紙のままである。まあ、これはこちらの専門分野なので、余り大きな障碍ではない。FPGAでハードをわけてしまえば造作ないことなのだが、せっかくPWMをマスターする機会なのでFPGAの適用は先にしてPWMでやってみたい。しかし、10ビット足らずが最大なので、苦労して作って、がっかりするのもいやだ。そんなことを考えながら、PCに向かっていると時間のたつのを忘れる。こうやって色々迷って調べるのも楽しみの一つである。

| | コメント (1) | トラックバック (0)

雑誌付録のイーサネットマイコン

生来のへそ曲がりが出て(7/30/08)
 またまた、雑誌付録の基板の話である。 開発が一段落して次のプロジェクトの調査をしていたら、間が良いのか悪いのか、イーサネットコントローラ内蔵のワンチップコンピューターが特別付録の雑誌(インターフェース2008年9月号)の発売日にぶつかってしまった。電光掲示板はANKのフォントの位置の微調整も済んだし、今のところ懸案はすべて解決してやることがない。

 32ビットマイコンにFPGA基板、それにUSBマイコン(トラ技8月号これも買ってしまった)と、このところ立て続けに3つも付録基板が揃い、いずれも動作を確認しただけでその先は何もやっていない。Cで開発していると言ってもそれぞれ開発環境は作らないといけないし、アーキテクチャーは全部ばらばらなのであまり沢山の機種に手を出すと開発効率が悪くなる。

 と、迷ったのだがこれも少し癖になってしまって、欲しいと思い出すと止まらない。色々調べて行くうち、今度の付録のマイコン(MCF52233)のイーサネットは100Base/TXが動くと知ってやっぱり買うことにした。しかし、雑誌付録なので高さのあるモジュラージャックや電源ソケットなどは自前で用意しなければいけない。でもそこは良くしたもので雑誌社が部品販売店とタイアップしていて、しっかりキットを売り出すことになっている。ところが値段を見て驚いた。LANのクロスケーブルなど必要もない部品が揃ったキットが¥3000、モジュラージャック単品だけで¥800近くするのである。殆どの人はLANにハブを使っているだろうからクロスケーブルなど不要だし、秋月にはLEDまでついたパルストランス付きのジャックは\300で売っている。

 しかも念の入ったことに、秋月で売っているジャックはピンアサインが違うので使えないと明記してある。ここで生来のへそ曲がりがむくむくと起き上がった。誰がどれだけ儲けるのか知らないが、大した金にもならないだろうに、人の足元を見た姑息なやりかたに無性に腹が立ってきた。普通の人なら¥300でも¥800でも大した差ではないので文句も言わず買うだろうが、へそ曲がりにはそれが気にさわる。意地でもこの店からモジュラは買ってやるもんかと心に決めた。

 同じことを考えていたのは、私だけではなかった。見るともなくウェブを調べていたら、何と秋月の¥300のモジュラージャックをこの付録に強引につけた人のブログが見つかった。3ヶ所あるピンアサインの違いをピンを曲げてつけている。これだ。秋月のモジュラーならこのあいだプリンタ電源制御のときの予備にもうひとつ買ってある。迷っていたけれど、これで今度の付録付きの雑誌を買う立派な大義名分ができたと言うものである。

 次の日、仕事の帰り渋谷の大きな本屋に寄って雑誌を探す。ない。なにい、もう売り切れたのか。いやいや定期のところではなくカウンタの目の前に平積みで何十冊と積み上げてあった。家に帰って早速モジュラーのピン曲げに挑戦する。一回ピンアサインを間違え、いつ折れるか冷や冷やものだったが、何とかずらすことに成功した。ピンが交叉するところは、1ミリの耐熱絶縁チュープを入れてショートを防ぐ。

勇躍、電源を入れる。3Vはブレッドボード基板の3Vレギュレータからこのあいだ作った片側DCプラグで片側がピンソケットのコードが活躍する。一瞬LEDが点いたがすぐに消え、PCからのpingが通らない。このLEDはリンクステイタスなので点きっ放しにならないとおかしい。勿論telnetもつながらない。

 さあ、困った。ハブにはノードを見つけたというLEDは点いているが、このマイコンにはUARTもついておらずISPのように動作確認するインタフェースもない。今のところイーサネットがつながらなければ何も始まらないのである。ところが何度かプラグを抜き差しするうちLEDが点くところがあることがわかった。接触不良か。ぐりぐり動かしていると点きっ放しになるところもある。急いで片手でPCを操作しpingを打つと、出た!レスポンスが返って来た。あわててブラウザを立ち上げる。おお、ブラウザにも設定画面が出た。ちゃんと動いている。

 しかし、モジュラージャックは力を入れて押さえていないとちゃんと接続されない。半田付けのとき無理な力をかけてしまったかと半田を吸い取り線でとり少しずらすが変化はない。どうもピンを曲げたときに内部の結線が切れてしまった公算が高い。やれやれ、へそ曲がりが仇になってひとつモジュラジャックを駄目にしてしまった。今、もういちど秋月で¥300のジャックを買ってきてピン曲げにこだわるか、悔しいけれど¥790で指定のモジュラージャックを入手するか迷っている。

パルストランスを活用(8/1/08)804_2
 とにかく断線したモジュラジャックははずすしかない。ピンの折り曲げを一度失敗して曲げなおしている。恐らくそのときに中で切れたのだろう。まあそれは良いとして、一旦複数の箇所に半田付けで固定したパーツの取り外しは非常に難しい。専門家によると、こて先が分岐して複数の場所の半田を同時に溶かす半田ごてがあるそうだが素人が揃えられるのは溶点の低い半田で面実装の取り外しが出来る工具セットくらいのものだ。それでもなぜか人の足元を見るように¥5000近くする。まだ手が出せない。

 しかし、はずさないことには次に進めない。昔ホットナイフ用に買ってあった60Wの半田ごてがあるのを思い出した。そのときひらめいたことがある。そうだ。練習を兼ねて、このあいだMACアドレスのEEPROMを取り外した古いNIC基板にあるパルストランスをはずしてみよう。Webにはへそ曲がりの人が沢山いて、この基板の指定のモジュラジャックを使わずパルストランスをつけてつないでいる人の報告があり動作に不安はない。

 ただパルストランスは面実装でなくピンが基板の下に通っているDIPである。DIPは足が深いだけ取り外しはより難しい。まず半田吸い取り線で徹底的に半田をとる。60Wなので面白いように半田がとれるが、12ピンあるので簡単ではない。続いてドライバーなどでこじて片面を少しづつずらし浮かせていく。順調に5ミリほど上がったが最後がなかなか抜けない。そのうち熱で外側のモールドの一部が浮いてきたため、あわてて抜くのをあきらめてニッパーでピンを切る。5ミリもあれば再利用には十分だろう。

 昔なら何と言う時間の無駄遣いと言われただろうけれど、昨今なら地球に優しい資源の再利用である。パルストランスの入っていない普通のモジュラジャックは、前にサンハヤトの変換基板付きのを買ってある。パルストランスそのものの存在も知らない時に買ったもので、このあと秋月のトランス付きのモジュラージャックを使ったので引き出しに眠っていた。これも無駄にせずに済む。二重の資源活用だ。

 暫くはこのモジュラージャックとはずしたパルストランスで雑誌付録を動かそうと、いよいよ本番の断線したモジュラージャックの取り外しにかかった。いや、これが難渋したのである。60Wの半田ごては強力で固定用の大きな箇所の半田は簡単にとれたのだが、ピン部分がなかなか抜けない。ピンを曲げたために、素直に抜けていかないのだ。そのうち恐ろしいことが起きる。基板とスルーホールの銅パタンが熱で分かれ始めた。あわててニッパーでピンを一本づつ切ってジャックを分離する。モジュラージャックは後の検証のためなるべく現状のままはずしたかったのだがそんな悠長なことは言っていられない。

 どきどきしながらルーペではずれた箇所を点検する。パタンが切れたら恐らく修復はほとんど不可能になる。はずれたところは数箇所で、いずれも配線のないランドだけで他と接続しているところは次の半田付けのとき慎重にやれば何とかなりそうである。胸をなでおろした。元はと言えば¥300で買えるジャックを¥800で売ろうという商売に反発して始めた作業である。これでおしゃかにしてしまってはみっともなくて人にも話せない。

 新しいモジュラジャックとパルストランスは変換基板ごとユニバーサル基板の切れ端に固定し、6本のリード線で付録基板のピンに接続する。どうせ付録基板はブレッドボードに固定する予定でピンヘッダーを付けてしまっており問題はない。100Base/TXにならないかもしれないが今のところは10Base/Tだけで十分だ。そのうち安いモジュラーがどこかで売り出されたとき付け替えよう。恐る恐る基板の電源を入れる。

点いた!リンク確立のLEDが点灯した。pingもTelnetも全く問題なく動作する。いやいや、おつかれさま。何度も繰り返すが、苦労が多ければ多い程、解決の喜びは大きい。はたからみれば愚かなこと限りないが、こんな上質な楽しみはない。たとえ失敗しても、誰かが悲しむわけでも、人に迷惑をかけるわけでもないのである。

| | コメント (0) | トラックバック (0)

Mega128のSDカード付き基板

こんなこともあるんだ(7/20/08)
 FPGA騒ぎが一段落して、やりかけていたMega128のCPU基板を作っている。最初に取り組んだのが、USBシリアル変換基板のパートである。実はこの変換基板、通販でアイテムラボにピンポストを注文するときに送料コストを下げるため試しに買った基板で、それにあうICを秋月で買ったという完全に目的と手段が逆になっている基板である。

 乗せたICはFTD232RLというUSBシリアル変換のICで秋月ではモジュールとして売っているのでわざわざ変換基板につける必要はない。モジュールとして買えば\950、ICで買っても\600、手間やモジュールに付いている部品を考えればあまりメリットはない。秋月も良心的な商売をしていると思う。Pict0732

 CPU基板は既に、SDカードとUSBソケットの実装は済んでいる。工具を揃えたお陰で、こうした基板工作の生産性は格段に上がった。難物だったDCアダプターのソケットも、ドリルスタンド(ボール盤と言えば聞こえは良いが、そこまではいかない)で、1ミリの孔を正確に開けられるようになったので、簡単に付けられる。

 USBソケットのピンはユニバーサル基板に合わず、小窓を明け、そこからUEW線とピンを半田付けして手近なランドにつないである。しかし線が短いためランドの半田付けでピンとの半田付けが溶けてはずれるのに苦労する。線をピンに一回ループさせ、手短に半田付けを済ませることで何とかしのいだ。いや半田付けというのは本当に職人芸だ。804

 半田付けが終わり、確認をすませて接続しようとしたところ、ふと秋月の前のモジュールの配線図を見ていてUSBのピンの位置がおかしいのに気がついた。USBバスのVccの隣に空きピンがない。危なかった。GNDとVccを完全に逆に配線していた。このまえの逆ざしの二の舞になるところである。VccとGNDがショートしていないことを確かめて、いよいよUSBケーブルを差し込む。全く反応がない。

 ま、そんなものだ。ケーブルをはずして基板の上から導通テストを一本づつ始める。変換基板は28ピンのSOCを2段のDIPピンに替えているので、ICピンから直接に確かめてないと危ない。案の定、片側は合っていたが、もう一方は逆にピンがでていることがわかる。やれやれ、紙に配線図を作ったときにすでにピン配置を逆にしていた。

 一旦配線したものを換えるのは大変だ。特に今度はチップコンデンサーを3つも使っているので、この配置換えに苦労する。しかし、このチップコンデンサーは熱に強い。何度半田付けしてもちゃんと容量が残っている。これで大丈夫だと、配線換えした基板にUSBをつなぐ。うんともすんとも動かない。

 うーむ。何が原因だろう。もういちど最初からピンの配線の確認を始める。おや、Vccと所定のピンが接続されていないぞ。おかしいな番号は合っている。え、え、えー、番号の振り方が間違っている。DIPやSOCのICはピン番号は左上から始まって、左下、右下に移り右上が最終ピンである。紙に書いた配線図は、左下まで行って番号が右上に上がっている。何と言う基本ミス。表のピンアサインを半田面の裏に移し、2段に移し変えていく間に間違えたらしい。さっき2段のピン位置の間違いに気を取られ、ピンアサインそのものが間違っているのに気がつかなかった。

 3度目の配線違いの修正はさすがに気が重い。ミスをするときは重なるものだ。いわゆる天中殺である。変換基板は結構大きく、秋月の変換モジュールと大差がない。無駄な作業をやっているような気がして、むなしい気分がよぎる。しかもまだ動いていないのだ。

 やっとのことで配線を終え、祈る気分でUSBケーブルを差し込む。やった、「新しいディバイスが認識されました」のメッセージが出て、やっとのことで新しいシリアルポートが出現した。やれやれ、やっと通った。と喜んだのも束の間、次に差し込むと認識されない。おかしいなと接触不良かと、ソケットあたりに少し力を入れたら、ボロッとソケットがはずれかかった。半田が不足していて固定ピンの半田がはずれたのである。泣きたい気分である。

 めげる気持ちを奮い立たせ、半田をたっぷり盛ってしっかり固定してテストを続行する。こんなことで挫折するわけにはいかない。まあ、それにしてもついていない日である。調べた結果、USBのホストコントローラーの組み込みに失敗している。別のシリアルUSBディバイスをつないだあとは上手く行くが、単独では失敗するようだ。まあ、動くことは確認できた。この日はこれでおしまいにした。

 次の日、本格的にWebでホストコントローラのことを調べてやろうとPCを立ち上げ、ふと、ハードの配線が一本不足しているのに気がついた。ピンの中にTESTというピンがあり、指定では、これもGNDに落とせとある。推奨配線図で違うところはここだけである。

 まあ、調べる前にたいしたことにはならないけれど、念のためつけておこうと半田ごてに電源をいれ、TESTピンをGNDに接続する。何と何と、これで問題なくUSBシリアルポートが認識されたのである。何度やっても問題なし。これまでこういうピンはだいたい何もしないで動いていたので放置してあった。USBだっていくらでもポート番号が増えるので好い加減に削除しても復活し問題になったことはない。それにしても、こんなこともあるんだ。いやいや「データシートは穴が開くまで見てそのとおりにする」という教訓が身にしみた一件であった。

CPU基板完動!(7/22/08)
 3連休は、寸暇を惜しんで電子工作にいそしんだ。USBシリアルのチップの配線では3度も配線を間違い一時は投げ出したくなる気にもなったが、トラブルが思わぬところで簡単に解決し気を良くして残りの作業に取り組む。SDカードの7つ余りのプルダウン抵抗の半田付けや、USB部との絶縁のためのトランジスタ回路(エミッタフォロワー)、CPUの3つの電源の配線とチップコンデンサーの埋め込み。細かい作業が続く。

 最後の作業は、レベルシフタのICの配線で、これは紙に何度もアートワークをやって最適な位置を探す。こういうアートワークのためにフリーソフトのCADもダウンロードしてあるのだが、なかなか導入する機会がない。なにしろ先にやりたいことが多すぎる。

 このCPU基板でSDカードに入れたWAVファイルの再生までやりたいのだが、FM放送なみの音質にするには、Mega128クラスでは自前のDACを持っていないので難しい。H8にはDACはあるが、小さなチップでうまくやるというのがアマチュアのこだわりだ。でも、サイトでDACの代わりにするPWM機能などを調べていたら、秋月でSACD並みの音質のDACチップが¥800で売っている。何となく気がそがれる。しかしアナログの世界は懐かしい。フィルターの設計では、40年以上前に大学で学んだ伝達関数が出てくる。丸善の分厚い対数表で7桁の掛け算を徹夜してやったことを思いだす。

 それはともかく、今日は朝から腰が痛くなるまで半田付けを続け、夜半、遂に全部の配線が終わった。コネクタのピンアサインなどは適当である。はやる心を抑えて恐る恐る電源を入れる。パイロットランプのLEDが付かない。頭から血の気が引いていく。さっき導通テストは済んでいる。ISPケーブルをつけてCPUそのものの動作も確認している。どこかが短絡したか。

 すぐに電源を切り、配線面を調べる。はっはっは、LEDのアースが位置を決めただけで半田付けを忘れていた。いやいやあせってはいけない。急いで半田付けし、もういちど配線を見直して再度電源を入れる。 出た。PCのシリアル画面に初期メッセージが表示される。しかし、SDカードNotReadyというエラーメッセージが出て先に進まない。はっはっは、SDカードが入っていなかった。

 SDカードを差してもういちど電源を入れる。やった。ちゃんとファイルをオープンしたというメッセージがでる。SDカードの部分は完全試合達成だ。アクセスランプも点滅する。しかし、LEDマトリックスはまだ点かない。フラットケーブルなので制御ラインのピンアサインが良く分からない。こうなったら3本しかないので手当たり次第に差し替えて見る。こわれることはないだろう。6回やれば総当りだが、2回目で出た!今までの電光表示が何事もなく表示される。

 遂に、Mega128のCPU基板の完成だ。まだRTCとバックアップMega128ledバッテリの実装が済んでいないが当面の作業には不自由しない。この基板はSDカードとUSBシリアルポートを内蔵しており、40ピンのソケットからI/Oピンを引き出せる。これでブレッドボードの2/3を占拠していた部分が開放され、がた老AVR研究所の効率は一段と向上する。

 散々苦労して動いたときも嬉しいが、こうして一発で動いたときの喜びもまた格別である。電池接続して場所を移動して動かしてみる。まるで子供のようなはしゃぎようである。

こんなこともあるんだ その2(7/25/08)
 このあいだはICのTESTピンを放置していてえらい目にあったが、今度もたったひとつの部品を手抜きしただけで、丸々一日半はまっていた。汎用CPU基板が順調に電光掲示板を光らせたあとチップを取り替えていくつかテストをしていた。Mega128の石は2つ買ってあって、ひとつはSDカードのテスト用にオリジナルのファームが書き込んである。これに差し替え、複数のSDカードのアクセステストをしていたときである。

 これまで何の問題もなく読み書きできていた16Mのカードが急に読めなくなった。128Mは最初エラーが出るが2回目からはちゃんと動く。ブレッドボード上のセットではどちらも問題ない。SDカードではなく、CPU基板がおかしい。基板をかえたところは、あのあとRTC(リアルタイムクロック)基板を差し込んでブレッドボードと共用するようにソケットを新設しただけで、SDカードあたりは全くいじっていない。

 SDカードアクセスの中身を知るちょうど良い機会と思い、chaN氏のソースリストに盛大にテストステートメントを入れて、初期化のシーケンスを追ってみることにした。これの説明はWebに詳しいが、そのやりとりを出てくるテストメッセージからトレースすることは簡単ではない。まずやっていることを把握しなければ、テストステートメントを入れる場所すらわからない。適当なところに入れてもエラーで帰ってくるところが表示されるだけで中身がわからない。やっとのことでその場所を見つけると、今度は沢山出すぎて何がなんだか余計分からない。

 数時間格闘して、わかったことは、ソースコードが想定しているようなレスポンスをSDカードが全く返しておらず、みんな迷路に入ってタイムアウトしているということだ。これは厄介な話である。ソフトではなく、ハードの問題の可能性が高い。電圧を測る。異常はない。パーツの緒元を確認する。間違いない。ブレッドボードと違うところは、電源を常時ONにしていることとソケットが違うだけである。配線違いがあればそもそも最初から動かないはずだ。

 SDカードの電源のパスコンは3.3Vレギュレータにアルミ電解100μと積層セラミックの0.1μが入っている。SDソケットの近くには、そう言えばない。オリジナルとブレッドボードの方はFETで電源をON/OFFしているので、インダクターと5μのコンデンサがついているが、これは電源ON時の急激な電圧低下防止用で、基板では常時ONのため省いてある。ブレッドボードにはオリジナル通りついている。これか。こんなものくらいで動作がおかしくなるということがあるのだろうか。いやもっと別の配線はずれか、ミスがあるのかもしれない。128Mなら大丈夫だし、16Mでも時々動くときがあるのだ。第一最初は問題なく動いていたのである。この日は夜も遅かったので頭を捻りながら床についた。

 次の日。FETをあらためて組み込むのもおおごとなので、コンデンサだけつけてみることにした。SDカードはカード自身がプロセッサーで確かに電源にパスコンがないのはまずい。しかし、電源を共有するレベルシフトICは近傍にあり、そこにはパスコンが入っている。半信半疑でコンデンサを半田付けしてみる。信じていない証拠にリード線を切らないで長いまま臨時の半田付けである。

 これが、何と、やっぱりというか、今までのトラブルの原因だったのである。これまでの機嫌の悪さが嘘のように、全くリトライもなく、SDカードは正しいレスポンスを返し、16Mが初期化される。128Mも問題なし。SDカードはかなり電流が流れるということで、電源変動が大きくてミスをしていたのか。いやそれにしても劇的な解決である。オッシロでもあればすぐにわかったのかもしれないが、ロジアナではこういうトラブルはわからないだろう。それにしても何故最初は動いていたのだろう。

 パスコンは教科書などにはICひとつに必ずつけろとあるが、それは発振などの予防で、なくても動くことが多い。あのLEDマトリックス基板だって全部のICにはついていない。しかし、こんなこともあるんだ。良い勉強になった。要は基本は忠実にということだ。別の目的で遂に買った2GバイトのマイクロSDカード(わずか¥960)もちゃんと認識し、正しいファイルサイズを表示した。偉い。コンデンサのリードを短く切って正式に組み込む。これでこれまでのブレッドボードは解体することが出来そうである。

| | コメント (1) | トラックバック (0)

FPGAでLEDピコピコ

FPGAの部品は揃った(7/14/08)
 仕事の帰り、例によって秋葉原に寄る。今日はPCのメモリ増設を頼まれたと言う知人と一緒だ。メモリはウェブで確かめて一番安い店に行った筈なのだが、¥1000ほど高かった。連れが店をはしごすることの嫌いな人なので即決で買ってしまう。このあと千石電商にまわり、¥1000余りのFPGAのROMを手に入れ、秋月で山勘でサイズの一致する表面実装のクリスタルを買う。雑誌の推奨品ではないが、まあ4個で¥300なのでだめもとである。その他JTAGライター用のICとかコンデンサーとか細々買い込む。連れの人はこういうところ初めてということで興味津々な様子だったので、結構長居をした。

 メモリ交換を手伝って欲しいといわれPCのある知人の友人の事務所にタクシーで向かう。メモリ交換は造作もなかったが動作確認で電源を入れたら最初、全く画面が出ずちょっと青ざめる。専門家という触れ込みなので余り慌てるわけにはいかない。落ち着いて周りを調べ始めるとディスプレイの分岐装置が見つかった。キーボードか何かの信号で画面を切り替えている。

 これが原因に違いないと、分岐装置からケーブルをはずし、直接PCにディスプレイに接続したら、無事BIOS画面が出た。BIOS画面ではディスプレイの切り替えはやってくれない。メモリを換えたくらいで先に行かないというのも気の利かない設計だが、文句を言う相手はいない。ついでにアンチウィルスソフトのバージョンアップも頼まれた。Windowsのソフトのメンテは出来るならパスしたいのだけれど行きかがり上いやとは言えない。

 こいつも少してこずった。新バージョンのインストールは、旧バージョンの管理下でないと出来ない仕組みで、インストールの準備が終わり、新バージョンを立ち上げようとすると、「旧バージョンをアンインストールしないと駄目」というので旧バージョンを消すと新バージョンを立ち上げる手順が見つからないという矛盾した手順で頭を抱える。

 マニュアルはない。オンラインマニュアルは旧バージョンが動いている時でないと見えない。仕方がないので、PCの中のこの会社の製品のフォルダを調べてみたら何か数字だけの名前のフォルダが見つかり中にsetup.exeがある。何だこれを動かせば良いのか。だめもとで動かしたら正しくこれがインストーラーで新しいバージョンがインストールされた。それならそれでオンラインマニュアルに手順を書いておかないと混乱するばかりである。

 いや気分が良い。とりあえず2つが一気に解決した。知人も大喜びで近くのそばやで是非ご馳走させてくれと言うのでジョッキで乾杯した。ほろ酔い気分で帰宅し、早速買ってきた部品を確認する。今日で作業が開始できる程度に部品はみな揃った。山勘で買ったクリスタルは正しく推奨品とサイズも機能もぴったりの同等品だった。ウェブの通信販売では¥300以上していたやつである。それにしても秋月は安い。1個¥75。もちろん動かしてみないと安心は出来ないが、今日は快調、快調の一日であった。実装はさすがに酔っているので今日はやめる。0.65ミリピッチの半田付けは無理だ。

FPGAの基板が動いた(7/18/08)
 雑誌の付録のFPGA基板に取り組んでほぼ1週間、実装とテスト3日間、やっとのことでFPGAが動作することが確認された。いや動いたというだけでまだFPGAらしいことは何もない。ただLEDが点滅するだけだが、千里の道も一歩からという。動いたと言うだけで感激である。基板付録を手に入れてから10日、他にやることが多いのだが、情報を収集し、部品を買い揃えて準備を進めてきた。

 同じハードの世界でも、AVRとは全く違う世界である。ちょうど去年の秋、AVRを始めたときと全く同じ状況で右も左もわからない。使われている言葉自体が理解できない、まるきり手探りの世界である。 それでもこのあいだWebで見つけた情報でいつも行く千石で純正ROM(XCF02SVO020C)を入手してある。付録基板にパターンが用意されているし、FPGAはCPLDなどと違ってROMがないと独立して動かない。必須の部品である。

 これが純正にしては破格の安さ、2メガビットで\1120である。フラッシュメモリは安くなっているとは言え、純正とつけば普通、汎用品の10倍や20倍、1万円くらいしてもおかしくない。これを基板に半田付けする作業と、パラレルのコンフィギュレーションケーブルを自作する工程が残っている。ケーブルインターフェースは雑誌が薦めるように基板に作らず、汎用性を考えて、5×3×3センチの小さなボックスに組み込む。以前、USB-SPIブリッジを作ったときに途中まで作って小さすぎて使わなかったケースが都合よく役に立った。Xlinx

 純正のUSBインタフェースケーブルは3 万円もするが、我が家のPCには幸いパラレルインタフェースが出ているので、このインタフェースに新たにかかった費用は、面実装のIC(74LCX244)が\140、変換基板が\130あわせて\270である。パラレルケーブルは倉庫の棚に山のように眠っていたSCSIやシリアルケーブルの活用で実に地球に優しい。今は殆ど使わないインクジェットプリンターのパラレルケーブルをはずして中継ケーブルをはさみ、電子工作の机のスペースで切り替えられるようにする。

 何回目かの0.65ミリピッチの半田付けも順調に進み、ケースの工作もドリルスタンドのおかげで正確にしかも素早く済んだ。いややっぱり道具には金をかけるものだ。仕上がりが違う。ハードの工作と半田付けはレベルシフターのICだけなので半日作業で終わった。

 これでいよいよFPGAにプログラム(というのか)をPCから送り込む作業にとりかかれる。FPGAのメーカー(Xilinx)から無料の開発環境をダウンロードする。CDにもあるが折角だから最新版を手に入れた。こいつは量としては大きくないのにインストールにえらい時間がかかり、出来上がったソフトもやたらに大きい。最初、Cディスクに入れたら、容量不足で止まってしまった。10G以上空いていたはずなのだが。Fpga

 今回は動作確認が目的なので、中身のソースは雑誌の付録をそのまま借用する。ソフトの世界なら"Hello World"、ハードではLEDピコピコというやつ、LEDが点滅するだけの簡単なロジックだ。わけのわからない単語が飛びかうなか、記事の言われるままいくつかのステップを経由してマイコンで言うバイナリファイルが出来た。ここからが正念場である。インタフェースケーブルがうまく動くかどうかは、ここまででまだ確認できない。雑誌のガイドはコンフィギュレーションROMのない基板での想定なので一抹の不安がよぎるが、指示通りファーム(バイナリの)の書き込みのボタンを押す。

 懸念通り、「書き込めない}という真っ赤なエラーメッセージが出て先に進まない。さて、これからが問題である。自作のときはハードの問題が大部分だが、これだけ手順が複雑だけに手順そのものの問題もある。何度目かの導通チェックと配線をチェックする。ハードはもうこれ以上調べるところがない。手順の可能性が強いと見て、沢山あるウィンドウのあちこちをいじるが知らない単語ばかりで何をやっているのか見当がつかない。Webの情報どおり、このiMPACTというローダーは難解で一筋縄では行かない。特に雑誌の説明ではROMがない状態で直接JTAGインタフェースで書き込んでいるが、こちらの基板にはROMがついている。不安がよぎるが何処にもそのへんのところは書いていない。

 メッセージログを見る限りでは、ケーブルの認識はどうもやっているようだ。しかし確証はない。念のため、レベルシフタICの電源を指定どおり3.3Vにしてみるが(この基板のJTAGのVccは何故か2.5Vなのに配線図では3.3Vを要求している)、変化はない。もう午前2時を過ぎている。困ったときのWeb頼み、これでわからなければ寝ようと、「FPGA」「コンフィギュレーションROM」「動かない」などのキーワードで調べると、私と全く同じ状況の人がいたのである。この人は、わからなくて1年以上放ってあったそうで、人から聞いて書き込みに成功したとある。いやWebは本当にありがたい。この記事を読んで目から鱗が落ちる。

 最初は、直接FPGAに書くのだから、ROMがあってもなくても同じだと思っていたが、思ったとおりそうではないことがわかる。やっぱりね。ROMがついていたら別のやりかたでないと書き込みのときに邪魔をするようだ。言われるとおりにROMにbypassの指示を与え、プログラム(書き込み)する。やった、今までの赤から進捗を示す画面に変わり、緑の成功メッセージが出る。やった、やった。基板のLEDが点滅を始める。

 今動いているロジックは単にクロックを分周してLEDを点滅させているだけだからFPGAにとってはゴミみたいな使い方だが、こうしてソースコードから書き込みまでの一通りのパスが出来たことは実に大きい。これで、がた老研究所もFPGA開発の仲間入りである。夢がふくらむ。さしあたってはCRTC(ディスプレイインタフェース)か。

| | コメント (0) | トラックバック (0)

雑誌付録のFPGA基板入手

紀伊国屋でバックナンバー発見(7/9/08)
 仕事をさぼって映画を見ようと新宿に出てきたときのことである。開演までの待ち時間に紀伊国屋本店を覗いたら、一時姿を消していたARMチップが付録になっている雑誌のバックナンバーがまた並んでいた。大書店だと独自在庫を持っているのだろう。 そういえば、この雑誌は1年ほど前にFPGA基板を付録にしたことがある(デザインウエーブマガジン2007年7月号)。 まさか、そのバックナンバーまではないだろうと書棚を目で追っていたら、それがあったのである。目を疑った。確か出版社では品切れの印がバックナンバーのところについていた号である。

 迷わず手にとってレジに向かう。入手しにくい発振子や、単独で走らせるときに必要なROMチップがついていないので人気がなく残っていたのかもしれない。それにしても、今、買って実験してみようと考えていたCPLDが¥1000程度で数千ゲートしかないのに対し、この付録のFPGAは何と25万ゲート(Spartan XC3S250E)。それで使い方を書いた雑誌こみで¥2480というのは無茶苦茶な安さである。動かすまでには相当な道のりがあると思うが、FPGAを知るにつれて、昨年、マイコンを始めたときと同じような興奮を覚えてきた。

 始めは、単に、ロジック回路をせっせと配線して組み込むかわりに、ひとつにまとめてしかも高速に動かせる便利な集積回路くらいに考えていたが、調べていくうちゲート数が10万を超えてきたら、これはちょっとしたCPUと同じと言うことに気がついた。雑誌やウェブでソフトCPUコアとか、Linuxが走るコアという意味がわからなかったが、それがこのことだったのである。

 今まで40年以上コンピューターの世界にいて少なくともCPUは神が創ったものと同じで我々には手の届かない神聖な存在であった。それが、自分で自由に設計できるのだ。もちろん初手から作るなどは無理で、これまでに先人が構成した要素を組み合わせたり、出来合いのソース(VHDL)をダウンロードするにすぎないのだろうが、少なくともそれを可能にするリソースは今自分の手の中にある。FPGA基板ともなると、どんなに安い教材キットでも1万数千円はする。それが¥2000余りで手に入った。たとえ何も出来なくても可能性だけは少なくとも手に入れた。何か心の奥底から、ぞくぞくわくわくする感情を押さえることができない。729fpga

 で、何を作るのと聞かれてもちろん具体的なものがあるわけではない(それは聞かないお約束)。画像処理の何かに使えるかくらいの漠然としたもので、遠大な夢としては、昔のAppleコンピューターを再現するというのもあるが、まだ現実的ではない。それまでにやりたいことが沢山あるのでいつ手をつけられるかわからない。しかし、夢としては大きな夢をもらった。楽しみなことである。

ARM付録基板に苦戦(7/11/08)
 LEDマトリックスの電子工作が一段落して、がた老AVR研究所は新しい局面を迎えた。FPGAという新しい目標が出来たが、これは一筋縄では行かない。現在のデジタルデバイスでも最先端技術のひとつなのだ。私のようにハードを知らない人間にとっては目の眩むような高みにある。Webサイトのページを見ていても殆どがハードウエアのプロが余暇に楽しんでいる雰囲気で素人が気楽に始められるものではないことは明らかだ。

 しかし、FPGAを知ってしまうと、今までやってきたAVR関係の工作の輝きが急に失われていく感じがするのは否定できない。要するに電子工作の面白さは、自分の好みのものを既存の部品を使って自由に組み立てることにあるのだが、FPGAはその究極にある。完全にハードが手作りできるのである。

 それはさておきFPGAボードの揃えるべき部品のリストを作りながら調べてみたらそれほど苦労しなくても馴染みの店で大体の部品は手に入りそうだ。電光掲示板のプロジェクトの整理のため、ブレッドボードに苦労して作ったMega128とSDカードのセットを本格的な汎用マザー基板に移し替える作業を始めているのだが、どうも気がそぞろになって、なかなか進まない。少し気分転換をしようと、今まで放ってあったこのあいだの32ビットCPUのARM付録基板を触ってみた。

 こいつは、ピンヘッダーとSDカードのソケットを半田付けしただけで、その先は進んでおらず、SDカードが動くかも確認していない。動作確認くらいやっておこうと雑誌に載っていたUSBをマスストレージにするファームウエアを書き込んでみた。開発の時に使うDFU(ファーム書き込みをUSBから行うローダー)に慣れるためもある。こいつだってFPGAの前は有力な開発ターゲットだったのだ。

 ところが、これが雑誌の記事通りにPCにソフトをダウンロードしてDFUが動くところまでは簡単に行ったのだが、ターゲットのチップに目的のファームウエア(ここではイメージと言っている)が正常に書き込まれない。CDにあるサンプルのUSBマスストレージのイメージが不正なフォーマットだとか言ってupgradeを拒否する。

 えー、雑誌提供のイメージがどうして不正なのだ。違うファイルをダウンロードしようとしているのか、何度もその部分を読み返すが、指示通りの場所に間違いない。どうも雑誌の説明が不十分で、イメージの書き込みの手順が何か省略されているような気がする。画面の別のところにuploadという機能があり、しかも指定されたイメージはfarmware upgradeというフォルダにあって、本体のMassStrageのフォルダにはイメージが入っていない。uploadをやってみると何故かこれはうまくファイルが書かれる。しかしCPUチップは相変わらず、以前のVirtualComPortと同じになってしまう。

 雑誌社のサイトや色々なサイトを漁ってみるが、これに関した情報はどこにも出ていない。仕方なくGoogleが検索した2ちゃんねるのサイトまであたってみた。ここは大体いつもゴミ情報が殆どで雑誌社や著者の悪口、揚げ足取り、投稿者同士の下らない喧嘩など、愚にも付かない話ばかりで、いつも気分が悪くなるのだが、この際は仕方がない。たまに参考になる情報(困っている人の書き込み。大抵は無視されているが)が見つかるときがあるので、我慢してこまめに調べてみた。

 殆どが、この基板の設計者の悪口(まあ、少し前の基板には随分誤配線があったようだ)ばかりで、胸が悪くなりそうになり、そろそろもうやめようかと思ったころ、自分がはまっている部分で、「CD-ROMから直接書こうとすると、読み込み属性ではエラーになる。著者が実際に動かしていない証拠だ」と息巻く書き込みをみつけた。

 これだ!急いで、CD-ROMにあるイメージをPCのデスクトップに貼り付けupgradeしてみた。やった。順調にイメージが書き込まれた。はやる心を抑えてUSBのプラグをつけなおす。画面に「MassStorageが見つかりました」というメッセージが出て、SDカードのアイコンがあらわれた。やったやった。午前中からはまっていた問題がやっと解決した。それにしてもソースファイルがReadOnlyだと他へ書けないというのも変な仕様だ。

 勢いに乗って、DFUの練習のため、元のVirtualComPortに戻す。ところが、加速度センサーが動かなくなる。そりゃそうだ。このCD-ROM に入っているVirtualComPortはメーカー提供のサンプルイメージで加速度センサーのことなど知らないはずだ。この雑誌社のソフトはどこにも見当たらない。青くなる。雑誌の先の号でこの加速度センサーを使った記事がいくつかあり試してみたかったのだがそれが出来なくなる。

 下らない話だけれど、出来なくなると思うと何か無性に残念になる。こういう細かいところにこだわる自分が情けなくて更に余計落ち込むのだ。昔からこの性格に悩まされている。少し気分が戻ったところでふと気がついた。さっきのuploadというのはどうも、downloadの反対で、チップにあるイメージを吸い上げる機能のようだ。uploadがうまく動いていたということは、最初のイメージをPCのどこかに残しているのではないか。

 その証拠に最初そのフォルダは書き込めないと怒られ、適当な場所を指定すると書き込みに成功している。そのイメージでupgradeしたが変化がなかった(元通り動いた)のだ。調べてみると、あった、あった。MassStrageという名前になっているが、これは勘違いでこちらで設定した名前で実はここに元のイメージが入っているに違いない。まあ、動かなくなってもいいやぐらいのつもりで再びこのイメージでupgradeしてみた。ビンゴ!であった。CPUチップは見事に最初の状態(加速度センサーの値が連続表示)に戻った。

 いや、気分の爽快なことこのうえない。プログラムのデバッグで不具合を見つけたときと同じ気分だ。いくつかの仮説をたててそれにもとづいて話を組み立て、それを実際に確かめる。苦労の末、その仮説が正しかったことが証明される。気分の悪くなる2ちゃんねると辛抱強くつきあったのもその甲斐があった。一種のソーシャルエンジニアリングの成果だろう。別の意味のデバッグの快感を味わって気分が良い。

| | コメント (0) | トラックバック (0)

2008年9月 7日 (日)

8ドット漢字電光ニュース

漢字電光ニュースの完成(7/1/08)
 5月の末から遊んでいたLEDマトリックスは、本日、遂に8ドットながら第二水準までの漢字と半角のカナ英数字をUARTからの入力で表示する電光ニュース版となって当面の最終ゴールに到達した。文字フォントは昔のPDA(携帯端末)で使われたフリーの美咲フォントを活用させてもらった。Pict0726

 SDカードに入った8バイトのフォントデータのみのバイナリファイルは、コードから換算したファイルポインタでランダムアクセスしているので、一字あたり数ms、半角は同じフォーマットをEEPROMに入れたので1ms以下で読み出すことが出来る。LEDの描画タイミングはファイルアクセスを優先しファイルを読み終わるまで待つしかけで、表示中にアクセスすると一時的に止まるが読み込みが終わると再開する。 追加メッセージも可能である。

 ファイルフォーマットは1文字当たり10 バイト、頭の2バイトはデバッグや編集のため、文字コード(JIS)が入り、その後の8バイトに縦方向にスキャンしたフォントグリフが入っている。配布されているフォントは行方向なので縦横変換がしてある。これは、LEDの横スクロールのためである。

 第二水準まで入れたバイナリファイルのサイズは200キロバイトと少し大きいが、これはランダムアクセスのロジックを簡単にするため、コードの指定のない部分を詰めずにそのまま飛ばしているからである。実用的には全く問題がない。今、実験に使っているSDカードは一昔前のデジカメについていたカードでわずか16Mバイトしかないが、それでもマイコンには十分すぎる容量だ。それにしても最近のメモリの低廉化はすさまじい。2GのSDカードが¥1000以下で売っている。10年程前、仕事で、苦労して導入した背の高いラック一杯の画像蓄積用の磁気ディスク装置の容量が200ギガで数千万円したことを思い出す。あれから10年しかたっていないのである。余りの変化の激しさに肩の力が抜ける。

 プラットホームはMega128だが、出来上がってみるとフラッシュのサイズは、TinyFatFSをReadOnlyにしたため、11Kバイト少々に納まった。これならMega168クラスでも十分入る。ただ、Mega168は1ポートで連続したピンをとれないので、パラレル8ビットでトランジスタアレイをドライブしているところを変更するか、もうひとつシフトレジスタのICを追加して、すべてをシリアルにしてしまうほうが簡単かもしれない。Pict0727

 いやそれにしても、最高の気分だ。これまでの漢字表示のプログラムとLEDマトリックスのプログラムをひとつにしたのだが、これがとても順調に進んだことが余計気分を良くしている。プログラムの機能の切り分けが合理的だったからと自画自賛する。それに両方ともかなり念入りにデバッグをしてあったため初期トラブルも殆どなかった。

 表示させたら文字の天地が逆だったのと、文字ポインタを進めるのを(例の++)デバッグの途中で今度は消してしまい、リセットがかかって突然動かなくなって慌てたくらいで、問題なく漢字カナ交じり文が表示された。半角のフォントのあとは文字間隔をつめるロジックも上手くいった。本来は個別文字単位にカーニングをしないと本式ではないが、フォントファイルのフォーマットにその情報を入れずに作ったのですぐには出来ない。ついでに、直近の表示データを必ずEEPROMにセーブして電源を入れなおすと、そのデータが表示されるようにする。

 思いついた色々なテキストを入れて視認性を確かめる。わずか7ドット×7ドットの美咲フォントだが、何となく読めるというのが不思議だ。半角の8あたりは全部で7ドットしかないのでいささか苦しいが、なにしろこのフォント、第二水準の漢字まで入っているのである。

 で、用途は、と聞かれると笑ってしまうしかないというのがこのプロジェクトの最大の問題なのだが、まあ、これは今2枚しかないLEDマトリックスを拡張してどんな感じになるか確かめてから考えることにする。H8 にメールサーバのスタックがあるそうだから、外出先から携帯でメールを送り、これをチャイム付きで自宅に表示するなどのしかけを作ったら雑誌あたりで取り上げてくれるかもしれない。

LEDマトリックスを増設(7/7/08)
 ここ数日、買ってあった8×8の2色のLEDマトリックスの3つめを基板に増設することに熱中していた。このあいだ秋月でさらに2つ買ってしまって今さら置いておくわけにもいかなかったのと、やはり電光掲示板というからには最低でも3つはいるだろうと思ったからである。

 この基板は最初2つのLEDマトリックスで赤色の8×16を出すだけだっただが、緑色を出すためさらにフトレジスタを追加し、今度の増設で3つ(8×24ドット)ともなると、シフトレジスタが6つも乗り、ちょっとした壮観である。配線も同じ繰り返しとはいえ、UEW線は交叉させないというルールはとても守れない。少しづつ増やしていったから、ここまで来たので、もしこれを最初から半田付けしろと言われたらとても手の出るものではない。Pict0728

 こういうこともあってか、このごろCPLDとかFPGAの記事にやたら目が止まるようになった。そうなのだ。こういうことが簡単に出来るようになるという説明は、実際にこうした面倒な配線をしてみると実感として身にしみる。半田付けなどの実装も目先が変われば楽しいが、LED基板などは同じことの繰り返しですっかり倦きてしまった。

 フラットケーブルの圧接コネクタの導入で外観はちょっと玄人っぽくなった。いや、これは言い過ぎで、ハイアマチュアというところか。ケーブルの圧接は、秋葉で買う予定だった圧着ペンチではなく、近在のDIY店で万力を買ってきてそれですませた。圧着ペンチが思ったより高かったのと(¥3000以上)、万力なら他の用途に使えそうだったからである。最初、まともな万力にしようと思ったが、みな大きすぎて工作机に大きなボルトで固定するものしかなく、余りにも大げさなので¥2500 の卓上万力(テーブルバイス)にした。まあ、機械工作の予定は今のところないのでこれで十分だろう。

 リボン(フラット)ケーブルはこれまでの自作PCパーツについてくるIDEケーブルやFDDケーブルが山ほど残っている。暫くはこれを活用することにする。買う必要もない。先だって買ったロジアナのプローブもこれを利用している。長さが10センチということもありアナログと違ってそう問題はないようだ。ちゃんとNICコントローラの25MHzのクロックが観測できている。

 3個のLEDマトリックスは少しデバッグに手間取ったが、無事3色を使い分けて日本語テキストを表示するようになった。2つのときと比べれば確かに視認性ははるかに高くなる。大体の感じは類推で読めるが、躊躇(ちゅうちょ)とか躑躅(つつじ)などは流石に全く判読不能になる。しかし、魑魅魍魎(ちみもうりょう)などは文脈がわかれば何となく読めそうである。

 デバッグに時間がかかったのは、2つのときは(結果的に)誤魔化していたダイナミック表示が3つになるといい加減なコーディングでは動かなかったためである。2つのころ既にあったバグ(ゴミが時々出る)が中々とれない。結局、解明に役立ったのは、前に作ってあったワンステップ毎の表示コマンドであった。これでひとつづつ動かしてみて、バッファー全体の境界で1ビットずれていることがわかった。ダイナミック表示しているときはちょうど画面の切れ目にあたるので今までわからなかったバグである。3つになったため、スキャンの折り返し点が増えて顕在化した。ただ、どこで1ビットずれているのかが最後までわからなかった。わかってみれば、何のことはない、基本的なところがみな1ビットおかしかったのである。全部がずれていたため表面化せず結局最後のデータのところでゴミになっていた。

 今度こそ、1ヶ月余りのLEDマトリックスプロジェクトは大団円を迎えた。収穫は、SDカードのアクセスにすっかり慣れたこと、表面実装部品を使いこなせるようになったこと、そうだ、スタック領域のトラブルを解明したことを忘れていた。CPLD、FPGAの意義が良く理解できたこと、これも大きい。いやいやお遊びとはいえ大きな収穫だった。

ここに、AVRstudioのプロジェクト単位のフォルダー2つを置きます。ひとつは、美咲フォントをバイナリにして、SDカードとEEPROMに収容し、その内容をUARTで確認できるF_EP_LOAD128と、本体のENEWS128です。このままAVRstudioのプロジェクトとして使えます。ただ余り整理しておらず読みにくいのはご勘弁ください。試行錯誤のあとです。

SDカードの回路は、chaN氏のものと殆ど同じ、LEDのピンアサインはソースのコメントを参照してください。また美咲フォントファイルは再配布、加工がフリーなので、私が使ったファイル(このほかにも沢山ある)を、F_EP_LOAD128のフォルダーに入れてあります。

「F_EP_LOAD128.lzh」をダウンロード 

「ENEWS128.lzh」をダウンロード


| | コメント (0) | トラックバック (0)

2008年9月 6日 (土)

美咲フォントの高速アクセス

任意の漢字フォントの表示に成功(6/21/08)
 SDカードに入っている美咲フォントのBDFフォントファイルは、ANK(半角1バイトコード)は20Kバイトそこそこだが、2バイトコードの漢字フォントファイルは400Kを越す。このフォントの実用性を確認するには、色々な漢字フォントを表示させて調べたいのだが、シーケンシャルに読んでいるだけでは効率が悪い。コードを入力するかターミナルから任意の漢字を送って表示させたい。

 しかしFatFSはMega168を継承しているので、TinyFatFSがベースであり、速度が遅く、ブロックで読むときは結構早いが、ちまちまと読んでいると、20Kを読むのに5 秒近くかかり、400Kだと2分近くかかってしまう。ただ、上位のFatFSでどれだけ速くなるかわからないので、更新をする気にはならない。

 はじめ、コンソールからPCが使っているシフトJIS漢字を直接送って表示させようとしたが、BDFファイルの漢字コードはJISで、シフトJISからJIS漢字への変換は、そう簡単でないことを知る。フォントを調べるのが目的なので、最初は開発しやすいコード入力で表示させることにする。

 これが結構面倒なのである。1バイトコードの方は、入力文字からコードを生成してサーチしており、2バイトコードと入力ルーチンを同じにしたので、その区別が難しい。C言語の文字列と配列の取り扱いが微妙に違い、関数によっては、文字列の最後にNULLだけでなく改行コードが入っていたりする。しかも16進のキャラクタ表示は、aとAではコードが違うので逆変換のときは気を使う。BDFファイルが小文字で全部書かれていることを信じて開発を進める。Ws000000

 数時間かけてやっと、コンソールからJISコードを入力すれば漢字が表示されるようになった。しかし、頭から読んでいるので、後半の第二水準の漢字ひとつをだすのにやはり1分以上かかることがわかる。こうなると意地でも何とかしてやろうと、こだわってしまうのが悪い癖だ。電光掲示板に漢字を表示させるのが目的なのだが、全然別の方向にエネルギーを使ってしまう。まあこれが楽しみでやっているようなものだから、暫く時間を費ってみた。

 思いついたロジックは、昔で言う、インデックスシーケンシャル方式(ISAM)である。頭から読むのでなく、コード番号とファイルのポインタのテーブルを作り、ファイルを途中から読んで目的のフォントに辿りつこうというものである。構造体を定義して、早速テーブルを作る。昔取った杵柄(きねづか)である。参考書は20年前のPCのC言語の参考書。

 くどいけれど、プログラムは考えたようには動いてくれない。構造体のテーブルの中の定数宣言も、昔のことで自信がない。こんな感じだったかなと手探りでコーディングする。恐る恐るコンパイルしてみた。これが不思議なことに一発で通る。調子に乗って動かしてみた。

 おお、想定どおり動いている。ファイルポインタの数もちゃんと関数に入っているようだ。用心してテストステートメントを詳しく入れてあったのでデバッグはすぐ済んで、第二水準の漢字まで、5秒以内に表示されるようになった。素晴らしい。成功の余韻にひたる。

 うむ、腕は落ちていないようだな。でも出来上がったものは、単にコードをキャラクタで入力すれば、その漢字が表示されるだけで、次のステップに進めるものではない。冒険物語はこれからが勝負だ。

漢字ファイルの高速化(6/29/08)
 先週、シフトJISとJIS漢字の変換ロジックをWebで偶然発見した。 20年近く前、パソコン通信が始まった頃、同じようなプログラムを組んだ記憶があるが当然資料など残っていない。判じ物のようなロジックだったが正直にコーディングしたら見事に変換した。それにしてもWebの情報はありがたい。これで残っているのは、連続した1バイト、2バイトコードが混在したテキストの表示である。これが最終ゴールに近い。

 次の朝、コーヒーを飲みながら構想を固め、コーディングを開始する。文字列とポインタの操作に慣れてきたので、コーディングが早い。かみさんの買い物につきあって帰ってきた午後遅くから夕食までの数時間で完成した。調子の良いときはこういうものである。一発で通る。漢字かな混じりの長文の文章でもフォントが次々に表示される。

 見ていた次女が、薔薇(ばら)、顰蹙(ひんしゅく)などの複雑な漢字のフォントを表示させて大笑いしている。まあ殆ど読めないが、8ビットフォントでこれだけ雰囲気が出てくるのはたいしたものだ。文脈があれば、難しい漢字でなければそこそこ読めることがわかった。これなら電光掲示板にしても大丈夫なようだ。

 これでほぼ予定していた必要な機能が実現した。あとはこれにLEDマトリックスのプログラムを合わせてやれば、任意のテキストを表示する電光掲示板が完成する。

 と、気楽に書いていたのが数日前。 しかし、これがかなり手強いのである。現在のフォントファイルは500Kバイト近いテキストベースの漢字フォントファイルで、インデックスをつけていくら早くなったとしても一字取り出すのに数秒かかる。従って、手順としては、これをフォントデータ(グリフというのだそうだ)だけのバイナリに変換し(元のファイルはグリフもキャラクタ)、漢字コードによるダイレクトアクセスでそのフォントが得られるファイルにしないと実用にならない(やや本気)。

 そのとき同時に、LEDマトリックスのダイナミック表示のために、通常、横方向に入っているフォントデータを、縦方向に変換して収容しておきたい。この行列の転置プロセスが一筋縄ではいかないのである。

 かなり考えた挙句のロジックなのだが思い通りの結果が出ない。仕方がないので、ひとつひとつUARTで途中経過を表示させてみて初めて、大きな勘違いをしていることに気がついた。ロジックに自信を持って疑いもしていなかった自分に恥じ入る。思い込みというものは恐ろしいものである。行から列に変換するのだから、各行のデータはその列のデータを足しこんでいくだけで出来ると考えていた。あとから考えればそんな簡単なことではなく、各列の位置に応じたマスクをかけてひとつひとつ拾って行かないと正しいフォントグリフにならないのだが、これに気づいていなかった。

 8ビットのマスクデータを移動させるロジックを追加しやっと横方向のフォントが縦に見えるようになった。勢いに乗って1バイトコードだけはEEPROMに全部入れてしまう。これはこれまでのロジックを活用して簡単に出来上がった。矢のように表示されるANKコードを見て満足する。

 最後の2バイトの漢字ファイル変換も難関だった。7000字もあるのでとりあえず100文字程度のデータを変換するプログラムを作る。しかし、SDカードの書き込みがうまくいかない。最初、リターンコードを勘違いして(FatFSの1文字書き込み関数は今までの関数と違ってリターンコードに書いた文字データが返ってくる)、悩んでいたがそれを直しても動かない。書く文字は1バイト単位なのに型はint(2バイト)というのが良く分からない。文字列ならどうだと文字列関数を試すがこれも動かない。ソースを良く見てみたら動かないと悩んでいる一文字関数を使っているので全くの無駄であることを知る。

 書き込みは前に動いていることを確認しているので、結局この関数を使うことを諦め、元の原始関数の方でやってみたら、不思議なことに一発で動いてしまった。これで半日はつぶれてしまった。動いた勢いで、表示部を仕上げて、「あいうえお」と入力し、正しくフォントが出てくることを確認した。表示速度も前のキャラクタファイルをちまちま順次読んでいたのに比べ圧倒的な速さでEEPROM並みである。コンソールの前で思わずガッツポーズしてしまう。

 勢い込んで、7000文字の変換に移る。1分少々で全部終了。これで終了と鼻を高くしたが、少し不安になり念のため漢字かな交じり文を表示させてみる。やっぱり、そうは問屋はおろさなかった。目茶目茶なフォントが入っている。途中でおかしくなってくるようだ。がっくり肩が落ちる。

 いちから出直しである。相手は7000字。気の遠くなるような数字である。気持ちを強く持ってバイナリエディタなどを持ち出して少しづつ調べ始める。正しい位置に所定のデータが入っているところもある。ロジックはもう間違ってはいないようだ。そうだとするとファイルの位置を決めるポインターがオーバーフローして上書きしている可能性が高い。

 しかしファイルポインタは4バイトもとってあり、この程度のファイルサイズでは超えるわけはない(32ビットは4ギガ、40億バイト)。他のところもみな2バイト(3万から6万)で問題ないはずだ。

 Ws000001 登録文字数を少しづつ増やして中身を表示させることにした。1500字を越えたところで、ファイルポインタが64540から1104になることを発見する。やった。これが原因だ。しかし、どうして4バイトもあるのにオーバーフローする? すぐ原因がわかった。2バイトデータを上へ8ビットシフトして4バイトに入れているのだが、シフトするときはデータをあらかじめ4バイトに入れておかないといけないようである。

 正しくポインターが増えていき、これで全部正しく入ったと喜んだのも束の間、調べていく間にデータがおかしい文字を発見、再びがっくりする。しかし、バイナリエディタで見るとデータは正しい場所に入っている。今度の容疑者はシフトJISからの変換ロジックである。しかし、見たところ間違っていない。このあたりで本日の根が尽きる。

 まあ、殆どの漢字は正しく表示されるので、じっくりバグをつぶしていこう。あせってデバッグして上手くいった例(ためし)はない。

デバッグの醍醐味(6/30/08)
 仕事は週2日やることにしていて、今日は出番の日。お客さんが来たり、打ち合わせの準備をしたり、会合の司会をしたりして久しぶりに忙しかった。今日のお客さんは昔勤めていたITベンチャー企業の友人で偶然にもインドの組み込みコンピューター会社の売り込みで話が弾む。私が趣味で組み込み系にはまっていると聞いて彼らは大笑い。ホビーの需要を市場は将来期待していると聞き大いに意を強くする。

 そうなのだ。この面白さは私だけではもったいない。もう少し広がってもおかしくない世界だと思う。これだけ驚異的に進歩した技術の恩恵はアマチュアでも享受すべきだと思うし、それが可能になってきた、などと風呂敷を広げているのは、ほかでもない、昨日あんなに悩んだ問題があっさり片付いたからである。深夜なのでヘッドフォンでお気に入りのクラシックを聞きながら、満足感にひたってこの記録を書いている。

 漢字ファイルをバイナリに変換して表示するプログラムは一応データが全部入ってそれらしい表示が出来るようになったが、依然として一部の漢字が化けて頭を抱えていた。こういうときは基本からひとつひとつ検証して調べていくしかない。気を取り直し、別のプログラムからファイルを読んでみようと、以前コード入力で正常に動いていたプログラムにバイナリファイルのアクセスを追加して調べることにした。

 ところが、元のコードを新しいプログラムへコピー&ペーストをしているときに思いがけないものを発見した。何と何と、データの読み込みのアドレス計算のところはオーバフローの修正がされていない。やれやれ、読み込みのところの修正をすっかり忘れている。これでは折角正しい位置にデータを入れても正しく読めないのは当たり前だ。意気込んでとりかかったけれどあっというまに解決してしまった。

 これを修正して漢字ファイルの高速アクセスは完全に実現した。時間を測ってみる。1字あたり2ms台、キャラクタベースのアクセスの秒レベルとは比較にならない。いや、素晴らしい。デバッグの醍醐味は問題が解決したときである。頂上を極めた登山家や、42キロを完走したマラソンランナーの幸福感と同じである。本当に安い娯楽である。

| | コメント (0) | トラックバック (0)

2008年9月 5日 (金)

雑誌付録の32ビットプロセッサー

32ビットARMプロセッサーの登場(6/20/08)
 書店でふと手に取った雑誌(デザインウエーブ)にSDカードに動画を記録する特集が出ていた。将来的にはこの方向に行きたいと思っていたので、買って読んでみたら、記事で使っているプロセッサーが、数ヶ月前、この雑誌の付録についていた32ビットのプロセッサー(ARMのCortexM3)であることを知った。Wiiで有名になった加速度センサーもついた基板が付録になっていて、\2,480だと言う。フラッシュは128Kだが、クロックは76MHzの高性能チップだ。

 目の前のプロジェクトがうまく進まないときに限って別のものに手を出す悪い癖がある。立て続けにAVRチップ2つを壊したとき、衝動買いした16ビットのH8ですらまだまともに使っていない。狙っていた漢字フォントが8×8では使い物にならないかも知れないと気分が落ち込んでいるときにこれである。 これ以上、間口を広げてどうするという理性も強いが、欲しいなと思ったらなかなかそれをとめることが出来ない。

 値段の安さもさることながら、こういうものは単品ではこの機会を逃したら、恐らくアマチュアには絶対手に入らないものだと、自分に言い聞かせ、仕事の次の休みの日、車を駆って新宿の紀伊国屋に付録のついているバックナンバーを探しに行った。本店の方が、技術系の本の種類が豊富だ。店員に聞いたら即座に10冊以上並んだバックナンバー(2008年5月号)の棚を教えてくれた。

 なんだ、慌てて来なくてもまだ沢山在庫がありそうだ。2冊買うのはさすがにやめる。帰って早速、CDROMより少し厚いボール紙の綴じ込みから取り出し、USBケーブルを取り付ける。ターミナルソフトを起動させて雑誌の指示通り、*を入れると、おお、LEDが点き、加速度センサーの数値が出た。蛙が跳ぶソフトもセキュリティの解除(何故自分のところでアプリを動かすのにこんなにうるさいのか)に手間取ったが、ちゃんと蛙も跳んだ。

 買ってあったSDカードソケットは残念ながらヒロセのでなくこの基板には合わなかったが、これで秋葉に行く用事が出来た。ひとわたり触ってみて少し感慨にふける。このあいだから調べているFPGAと云い、がた老研究所も8ビットから始まっていよいよ組み込み系の先端のところまで辿りついた感じがする。雑誌の付録ごときで大げさと言えば大げさだが、とりあえずは2軍のファームから、1軍のキャンプに参加を許された選手の心境であろうか。

 JTAGとかバウンダリスキャンとかFPGAだのVerilogなどの最近技術とは全く無縁の世界から、少し関連するレベルに達したということだ。FPGAで往年のパソコン全部のロジックを組み、動かしたと言う記事を見つけて素直に嬉しくなる。そうか、こういうことが可能になる時代なのだ。今まで、大資本下のハードの技術者に独占されてきたハードウエアがアマチュアの手に戻ってくる時代が来る予感がする。

 ただ、雑誌の記事にでていたミックスドオシロスコープの値段が80万と知って少し暗くなる。まあ、メーカーには数百、数千万円する測定器はごろごろしているからな。一万円のロジアナで感激しているなんて可愛いもんだ。

ハード工作は順調(6/24/08)
 昨日久しぶりに秋葉原に出かけ、通り魔事件の現場を遠目にみながら必要な部品を買い集めた。まず、雑誌付録のSTM32F基板につけるSDカードソケットをラジオデパートの西川電子で求める。生意気な店員で、いきなりソケットを差し出すので型番を確かめて付録の基板に合うものか問うたが、はっきり答えない。末尾の番号が合っていたので「これだと思う。何種類もあるからね」と言ったら、「何十種類もあります」とのたまわった。喧嘩しても始まらないので無視して次の店へ急ぐ。

 次の目的は、Mega128とSDカードソケットをブレッドボードから正式な基板に組むときの3Vロジック(SDカード)と5Vロジック(AVR)を接続するバッファーICだ。手持ちの74HC126は5Vトラレントでなく、3VのVccより高い入力電圧では、出力がVccを超えてICがこわれる可能性があるし、そもそも3.6Vが限界のSDカードに4V近い電圧がかかるのはさすがにまずい。Webの情報で、74VHCシリーズがこういうためのものらしいので千石に寄る。秋月の品揃えには癖があり、こうした汎用ICは置いていない(その後、秋月で同種のバッファーを見つけた。5ヶで¥100!失礼しました)。

 しかし、千石でもVHCシリーズはあるものの目的のVHC126はなかった。頼みの鈴商は定休日。隣のマルツを試しに覗いてみると、あった。マルツもなかなかの品揃えで感心する。\168と少々高いが(あとでWebで調べたら通販のサトー電気では半値の\84)、感心した勢いで2つも買ってしまった。VHC シリーズはDIPではなく、表面実装の1.27ピッチのSOPだが、もうひるむ必要はない。変換基板という強い味方がいる。かねて調べてあったダイセン工業の安い変換基板が千石で売り出したのを知っていたので、再び千石に戻り、5枚組で\500のSOP変換基板を入手した。

 こいつは一枚の単価が100円の上に、表が1.27ミリ、裏が0.65ミリピッチでどちらか16ピンのSOPチップがつけられ、このあいだ買ったアイテムラボのSOP28ピンの変換基板より汎用性が高い。ついでにUARTの高速化のため、7.3728MHzという周波数の水晶発信子を買おうと思ったら、ケースの中は空っぽで品切れ。仕方なくこの倍の14.76MHzの石にする。UARTは高速になるとボーレートの倍数にあたる半端な周波数の発信子でないと誤差が出てつながらないのである。AVRでVccが3Vでも動く10MHz以下が欲しかったのだがやむを得ない。

 全部合わせて2000円もしない買い物だけれど、目的のものA6301331がほぼ揃い、充実した気分で家路に着く。帰ってから早速久しぶりのハード工作を楽しんだ。まず付録のCPU基板にSDカードソケットと20Pのピンヘッダーをつける。大分基板らしくなる。アイテムラボから送料単価減少のため1000ピンも買ったピンヘッダーが活躍する。何と言っても1ピンあたりたったの1円50銭、80ピンつけても\120である。次にSOP変換基板にチップをつける。このあいだの0.65ミリに比べれば、1.27ミリは鼻歌まじりでつけられる大きさである。この基板にもピンヘッダーをとりつけこれでブレッドボードへの対応がすんだ。A6301332

 いや、気分が良い。Webをみてみたら、私と全く同じダイセン工業の基板を使っている人がいて苦笑する。調子に乗って14.76MHzのUARTのテストもやった。3Vベースなので心配したが、115Kbpsも、230Kbpsも簡単に動いた。いや早いの何の、ターミナル(TeraTerm)の画面一杯のデータが一瞬で表示される。満足、満足である。

 74VHC126のバッファーもピンをつけて動かしてみる。ブレッドボードのスペースがもう残り少なく、少し離れてつけたため、ジャンパーコードがうず高く盛り上がってしまったが、問題なく動いた。電圧を測ってみた、ところが3.3Vでなく、まだ3.5Vを超えている。何故だ。良く分からない。最大定格の3.6V以内とはいえ気持ちが悪い。ひとつひとつ配線を抜いて原因を調べているうち、いつのまにか、3.26Vという元の電源電圧に戻った。???である。発振でもしていたのだろうか。そういえばこの石にパスコンはつけていない。とりあえずコンデンサをつけて様子を見ることにする。

 やれやれ、最後に少しみそをつけてしまったけれど、ここ数日の作業は怖いくらいに順調である。

| | コメント (0) | トラックバック (0)

Mega128で漢字フォント表示

フラッグシップMega128の登場(6/11/08)
 LEDマトリックスのお遊びに止め処がなくなって、とうとう、当がた老AVR研究所の旗艦チップ、Mega128の出番がやってきた。性能から言えば、このあいだ衝動買いしたH8/3069Fの方が16ビット機で、上だが、こいつは、表面実装の20Mhzクリスタルをおまけについていた25Mhzに取換えようと悪戦苦闘し、結局はずすことが出来なかったこともあって少し嫌気がさし、放置してある。それに秋月のこのAKI-H8/3069-LANボードは、512KのROMだけでなく、2MのSRAMが始めから付いている。 SDカードやLEDだけに使うのはもったいない。

 Mega128の方は、このあいだ変換基板を載せたCPU基板を作り、準備が済んでいる。始めは168あたりでLEDとSDカードをつけようと思ったが、SDカードだけですでにフラッシュを14Kも使っており漢字フォントの処理でメモリ不足に悩まされそうなので、どうせブレッドボードで遊ぶのだから出し惜しみすることはないと早々と出番を決めた。Mega128

 CPU基板に20本余りのピンヘッダーをつけたのだが、チップはTQFPで64本もピンがあって何を引き出してよいのかわからない。SDカード用とLEDマトリックスにしぼってピンアサインをしていったが、2段になったピンの順番の数え方が難しい。表と裏でどうしても混乱する。 しかし、Tiny2313からのコードを単に移植しただけのLEDマトリックスのプログラムは最初全く動かなかった。

 Webの情報を参考にセットアップして(ISPのピンが違う、ヒューズビットを互換モードから変える、クロックの設定を外部にする)、AVRispで動くことは確認されているので、落ち着いて間違いを捜していく。タイマのレジスタの名前が変わっていたり、UARTの割込みベクタやレジスタの定義変更見落とし、出力ピンの定義間違いなど下らないミスが見つかった。その結果、何とかLEDが点くところまで行ったが、トランジスタアレイをパラレルにドライブするところが半分しか表示されないバグにはてこずった。 何度も配線を確認するが間違いはない。

 データシートをよくよく調べていたら、トランジスタアレイをドライブしているPORTFはJTAGポートを兼ねているという記述があり表示されない部分が正しくその部分である。あれえWebにヒューズビットのデフォルトはJTAG無効になっていると書いてあったはずだがな、と念のためヒューズビットを調べてみたら確かにJTAG経由のデバッグは無効になっている。ところがヒューズビットを見ているうち別のビットにJTAG禁止/許可ビットというのを見つけた。ここではJTAG許可になっている。こいつかもしれない。このビットを念のため禁止にして動かしてみたら「あたり」であった。JTAG無効にするだけでは駄目だったのである。

 やれやれ、動かすのに丸々1日かかった。フラッシュサイズは2313の限度2Kのままなので、使用率はわずか1.5%、目の眩むような広大な敷地が残されている。楽しみである。当面はこれも4KもあるEEPROMを使ってANKのキャラクタを入れてテストする予定だ。

Web情報を頭から信じてはいけない(6/14/08)
 Mega128のフラッシュは128キロバイトもある。フォントファイルを入れたSDカードを読むプログラムを入れる前に、LEDのフォントをEEPROMに少し手入力し、電光掲示板の準備をしておこうと、新しいフォントをEEPROMに書くプログラムを追加したのだが、これが動かない。

 Webの情報を元に、EEPROMのルーチンを書くが、全く思うところにデータが入っていかない。とにかく盛大な「ポインタ変数に整数を入れるな」という警告メッセージが出る。ポインターのキャストがうまく行っていないのかと警告のところを直すと、別のところで文句を言われる。変数定義を、始めからポインタにしてうまく行ったかと思うと、今度は「ポインターとポインターを足し算してはいけない」と今度は警告ではなくエラーになってバイナリを作ってくれない。LEDをまとめて発光させているので、スクロールさせるには2つのアドレスを足す必要があるのだ。ここにさらにキャストを入れれば直るのだろうが、余りキャストで一杯になるのも見にくいソースになってしまう。

 EEPROMに関しては、キャストの警告を無視してもこれまで問題がなかったので、これが動かない原因とは思えないがとにかく、書かれる場所もでたらめなら、入っているデータもでたらめ。eeprom_write_block() というまとめてデータを所定のアドレスのEEPROMに書き込む関数が言うことを聞いてくれない。

 思いあぐねていたとき思い当たったことがある。このWebサイトの情報は前にも間違っていてひどい目にあったことがある(UARTのレジスタ)。もしかするとこの関数の定義が間違っているのかもしれない。別のサイトで確認してみた。何と別のサイトの定義では、受け側と送り側の引数の順番が逆になっているではないか。しかし、このままではどちらが正しいのか分からないので逆にして動かしてみる。

 やれやれ、最初のWebの情報がやはり間違っていた。プログラムは所定の場所に正しいフォントデータを記録するようになった。頭から信じた俺が悪かった。まあ、この関数の定義が通常とは違う順番(左から右、普通は右から左)になっているのもおかしいのだけれど、こういう肝心のところを間違えているのは頂けない。気を取り直し、せっせと数字をエディタで作り登録する。

 我がLEDマトリックスは、UARTのキーボードから数字を入力するとそれを表示する電光掲示板となった。赤と緑は途中で色変更文字$を挿入すると変わるようにする。$を表示したければ$$と入れると$が表示されるようにもした。いや楽しい。数字以外のフォントも入れて遊ぶ。

 しかし、重大な課題があることに気づく。プログラムを簡単にするためすべてのフォントは同じ幅(等幅)にしているが、数字や、Iのような文字を表示すると間延びしてしまう。いわゆるカーニングをしないと見栄えが悪い。フォントデータエリアをアドレスで操作すれば出来る理屈だが、Tiny2313からMega128に移植するときプログラムをすっきりさせるため、わざわざアドレスから配列でデータを処理するよう直したばかりだ。今さら前にもどすのも大変だし、まだ先にやることがあるので先の楽しみに残すことにする。とにかく、次々にやりたいことが増えていく。

SDカードから8ビットフォントが出た(6/17/08)
 ここ数日は、Mega168に移植していたSDカードアクセスのプログラムを本来のMega128に戻し、これまでのLEDマトリックスのプログラムに合わせる作業をしている。SDカードに入った日本語フォント(美咲フォント)をLEDに使おうという計画である。これで今まで別々に開発していた機能が統合される。フォントは連続して表示することを考え、8×8のエリサフォントでなく、7×7の美咲フォントを選んだ。いずれもWeb上で公開され太っ腹なことに個人、商業目的にかかわらずすべてフリーである(9/06/08修正)。

 コメントアウトしていたMega128のステートメントを戻し、ブレッドボードにSDカード基板を移して順調にSDカードが読めるところまで行った。これまでの開発では、一画面分で画面表示が止まり、何らかのキーを押せば次のテキストファイルが表示されるようになっている。シフトJISの漢字なら、日本語テキストも見える。フォントファイルの中からフォントデータを抽出するロジックをこれから開発する。ところが暫く読んでいるうち、プログラムが暴走を始め表示が止まらなくなった。あわてて電源を切り、もう一度入れなおしたら今度は動かなくなってしまった。

 この日はもう深夜も2時を過ぎていたので、あれこれ考えながら床に就いた。その翌日、もしかしたら直っているかもしれないと再度動かしたが、やはり同じ。読んでいくだけでデータがこわれることは考えられない。別のSDカードも読めない。ソースを調べるが前と変わったところはない。大体、最初は動いていたのだ。何がおかしくなったのだろう。ピンを配線していないのでライトプロテクトとカード検出の結線はせずにソフトで常にOKにしている。これがいけないのだろうか。しかし何も変えていない。どうも初期化に失敗しているようだがわからない。遂にどこも調べるところがなくなり、仕方なく、ロジックアナライザーを持ち出した。

 出てきた波形を見て驚いた。クロックは出ているが、信号が何も出ていない。こりゃあハードだ。ブレッドボードの配線を確かめる。ちゃんとみんな刺さっている。あれ、SDカードの6番ピンはGNDなのに何かが結線されている。何だ何だ、これはSPIの出力ではないか。隣の7番から移動してしまっている。

 原因がわかった。暴走してあわててスイッチに手をかけたときジャンパーコードに触れて線がはずれそうになりつけ直したとき隣に差してしまったのだ。線に余裕がなく斜めになってささっていたので間違えたようだ。わかってしまえば何でもないお馬鹿なミス。正しいピンに接続して、SDカードは何事もなく作動する。やれやれ、ブレッドボードは便利だが、こういう危険がある。Misakilog

 フォントファイルはBDF形式といって、すべてがキャラクタなので操作がしやすい。夕方からロジックをメモに書き出し、フォントデータをUARTのコンソールに順次表示するコードを書く。久しぶりにC言語のライブラリで昔の参考書をひっぱりだしてstrcmpなどのなつかしい関数を組み込む。フラッシュはたっぷりある。何を組み込んでも余裕である。chaN氏のFatFSはいたれりつくせりの関数が用意されていて、簡単に組み上げられた。

 最初、strcmpで文字列を比較して合わない、合わないと悩んでいたが、長さを揃えて調べないと一致しないことがわかり(strncmpを使う)、それからあとの進捗は早かった。

 しかし、表示してみて、危惧したとおり、アルファベットやひらがな程度なら問題ないが、やはり漢字を8×8で表示するのは苦しい。しかもスクロールしながらでは余計わかりにくいだろう。折角、ここまできたが、ちょっと先行きが暗くなってきた。

| | コメント (6) | トラックバック (0)

2008年9月 3日 (水)

スタック領域とSRAM変数

遂に真犯人をつきとめた(6/2/08)
 これまで、がた老研究所を悩ましてきたトラブルの原因が外部の支援でほぼ特定でき、とても嬉しい気持ちでこの記事を書いている。 LEDマトリックスでUARTバッファーを小さくしたら一気にトラブルが解消したため、これまでの色々なトラブルも含めてまとめてAVRWikiに「WINAVRの外部変数の不具合?」というタイトルで投稿したらすぐ反応があった。最初のレスポンスは少し違っだが、さすが経験者揃いのメンバーである。私が見落としていた問題点をすぐ明らかにしてくれた。いやいや仲間と言うのは持つべきものである。本当にありがたい。

 そうなのだ。限られたSRAMスペースにスタック領域がとられていることをすっかり見落としていた。このあいだは定義したバッファーサイズと実際のSRAMサイズが合わないことを不審には思ったけれど、それ以上の追求はしなかった。冷静に考えていれば、今度のTiny2313などSRAMはわずか128バイト、80バイトものUARTバッファーをとれば、残りは40 数バイトしかなく、ちょっと沢山pushをしてレジスタを待避させているプログラムなどであっというまに届いてしまう。それに早く気づくべきだった。

 大型機育ちなので、メモリバイオレーションには敏感ではない。大型機だと、あっというまに異常終了してプログラムそのものが通らないしかけが出来ているのでプログラマーは余り心配しないですむ(起きてから考える。ただし自分のプログラムのなかで自らのエリアをつぶすとわからない)。これまでTiny26やTiny2313(SRAMが128バイト) で起きて、Tiny861(512バイト)で起きなかったこと、I2Cインタフェースが72 バイトの送受信バッファーを半分にしてトラブルが解消したこと、データの破壊がUARTなどの割込みプログラムのあとで起きること、すべてがこのことを裏付ける。

 このブログでこれまでコンパイラーのバグだと言っていたのは、ほぼすべてが、このレジスタ値の待避などのスタックデータがSRAM変数域に被ったことが原因だったと思われる。WinAVRコンパイラーのみなさん、リンカーのみなさん、疑ってごめんなさい。

 AVRWikiでのやりとりでは、メモリマップの取り方をついでに質問をしたら、これも直ちに教えてもらった。 AVRstudioで出力されるlinkmapは実体のアドレスマップではないが、ELFファイルをavr-nmコマンドにかけると、実際のメモリーアロケーションが得られることがわかった。 これでビクビクしながらメモリを定義するのでなく事前に確認して予防ができる。寿命がきたとされたTiny26はまだ動く可能性が高くなってきた(LCD基板は2313に換えてしまったので確認できない)。

 LEDマトリックスは順調だ。わずか128バイトだけどEEPROMを利用して、自分の名前の漢字フォントをLED上で作り登録した。16ヶ登録できる。8×8のエリサフォントでも結構視認性が高い。携帯のムービーで動画を記録する。 こういうと叱られるが、みんながまあ愚にもつかないLEDマトリックスではまる理由がわかる気がしてきた。

 何度も書くように、始めは何の反応もしないLEDや、IC、抵抗などの部品が集められ半田付けされ、チップにプログラムが書かれると、生き生きと点灯して意味あるメッセージを送り出す。それが単なる点滅でも楽しいのに、自分の名前がLED面の上を流れるのを見ていると何故か嬉しくてたまらない。まあ、これは作ったものにしか分からないかもしれないが。

 ただ、Tiny2313はフォントのエディターまで作ったら、フラッシュがもう満杯になった。残念だけれど、861かMega168に移行せざるを得ない。今日は仕事の帰り、調子に乗ってLEDマトリックスをさらに2つ買い足してしまった。これで8×32の本格的な電光掲示板になる。

3色でLEDマトリックスが動いた(6/6/08)A6061329
 勢いで、というより、秋月の商品棚に2色のLEDマトリックスが2つしか残っていなかったのであせって買い込んだようなものなのだが(案の定その後は欠品)、よく考えてみたらまだ単色でしか動いていない。せっかく赤と緑のLEDがついているのだから、赤だけでなく緑もつけてみたい。同時に光らせるとオレンジか黄色の計3色でドットが表示できる。基板にはもう1色用のシフトレジスタのスペースもつけアートワークも出来ている。

 マトリックスを追加する前にその配線をすることにした。予想通り追加の配線は厳しい。UEW線での基板上の交差はしないで、基板の表にジャンパー線を回すという決まりを作っていたのだが、これを守ることが出来ず、いくつかの交差を許してしまった。まあ、UEW線の絶縁性は高そうで、ウェブにはこれを接着剤でかためて配線している例もあるのでそう心配はしていない。

 2色となると配線だけでなくプログラミングも難しい。ダイナミック表示をどうするかが問題だ。HC595はラッチがついているので、相当な長いデータをシフトレジスタに送り込んでも表示切替には気を使わなくてすむのはありがたい。しかし、2313はもう数十バイトしかフラッシュが残されていないので、プログラムがなかなかうまく組み込めない。

 今まであった4ヶのバッファーの2つづつを赤と緑のフォントエリアにして、それを同時にスキャンする方法によって2313で3色表示のスクロールが可能になった。と、簡単に書いたけれど、これを思いついて実際に動くようになるまではやはり2日ほどかかった。

 まあ、これが楽しいのだ。プログラムはまさしく考えたようには動かず、書いたようにしか動かない。最初、色コードのようなことを考えたが、各ドット単位に色を変えるところまで考えると断然この方法のほうがわかりやすい。ただ、シフトレジスタへのデータ送り込みと、各列へのダイナミックな動き、さらにそれ全体をリングバッファーのように折り返す動きを考えながら2色発光させるロジックはちょっとしたパズルである。それだけに思い通りに動いたときの満足感は、人のソースで動いたときのものとは比べ物にならない。

 ウェブには予想通り沢山、実験記があげられていてソースも掲載されているようだが、今度はなるべくこれを見ないようにしている。SDカードから文字フォントを読み込んで、長いテキストが電光掲示できるようになってからソースを見比べてどちらが優雅か比較してみようと思っている。
 前記事にuploadしたプログラムはこの3色を表示するTiny2313の最新のプログラムです。ソースをご覧になればわかるように、UARTのコマンドのいくつかはフラッシュメモリ不足でコメントアウトされています。

| | コメント (0) | トラックバック (0)

2008年9月 2日 (火)

LEDマトリックスで遊ぶ

LEDマトリックスにはまる その1 (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をかけた回路図が商品になっている。

 あっ、そう言えば、確かリセットピンはグランドにつないで半田付けしたぞ。ああー、反対にOE(output enable)にはVccをかけて配線した。ここはすべて負論理だ。アートワークのときからそうなっていた。やれやれ、これではシフトレジスタは動きようがない。二重に止まっている。ICはこわれていないのだ。良かった。全部、こちらのせいだ。

 仕事を終えて帰宅し、食事もそこそこに配線のやり直し。点いた。喜んだのも束の間、
このあとも泥沼が続いたのである。A5301302

LEDマトリックスにはまる その2 (5/30/08)
 点灯したLEDは何とも不可思議な動きで全く安定しない。これはこれで見ていて飽きないが、目的は文字をダイナミック表示で固定して出すことである。ソースを何度も調べるが、こんなランダムな動きになるようなところは見当たらない。頭を抱える。気に入らないのは、コードを少し換えるだけでまたUARTが暴走したりする。

 タイマーがおかしいのかと間隔を変えるが全く変化がない。念のためロジアナで調べてみたら、パラメータを変えても時間間隔が変わっていないことがわかる。外部変数のスイッチが機能していない。これは例の外部変数がこわれるトラブルがここでも発生しているようだ。場所を換えたり、コンパイルオプションを換えて、何とか用意したアルファベットのAとBが表示できるようになった。しかし、後半のフォントビットがどうしても設定どおりの位置におさまらない。フォントデータは内部変数域にあり、あのトラブルとは関係ないはずだ。

 一日を無駄に過ごして、次の日、気持ちを新たに解決に取り組む。タイマでダイナミック表示をしているから解析が難しいことに気づく。デバッガーのようにタイマを止めて1ステップづつ調べていけば良い。幸い、きめられた時間にやらないとまずい処理はシフトレジスタにシリアルにデータを送るときだけだ。

 タイマの代わりに、コマンドで進むコードの改修はわずかで済んだ。やってみる。おお、これは便利だ。タイマのときは入れられなかったテストステートメントがいくらでも入れられる。LEDも一列づつ律義に表示されわかりやすい。

 テストステートメントで変数の表示をして行って驚くべき事実が明らかになった。外部変数だけでなく、内部変数までいたるところでデータが破壊されている。これでは暴走するはずである。AVRのサイト(AVRWiki)に外部変数だけだと書いたけれどそれどころではない。犯人を追跡する刑事の気分で、地道にひとつづつ破壊しているところを追及する。

 たどり着いたところは、Tiny2313の標準UARTの受信部分で、受信レジスタからデータをユーザー側に受け取るところである。これはもうどうしようもない。標準UARTが使っているSRAMデータとユーザーデータがぶつかっているのだ。コンパイラのバグである。

 ただ、前から気になることがある。コンパイルの出力結果が示すSRAMの消費量が、配列で確保したバッファ量より小さいことである。こいつ、定義した分だけデータをとっていないのかもしれない。もしかしたらと半信半疑で、バッファの大きさ80バイトを半分の40バイトにしてテストしてみた。

 やった。これまでのすべてのトラブルはうそのように消えて別人のように正確にLEDは表示された。急いでタイマを戻しダイナミック表示にする。ピタリとあらかじめ作ってあったA、Bの文字が表示される。いやあ嬉しい。1ドットづつ点けたり消したりするコマンドもきれいに動く。解決したときの喜びは今までの苦労が多ければ多いほどそれだけ大きくなる。75才でエベレストに登った三浦雄一郎の気持ちと同じだ。

 勢いに乗って、これまでの配列から構造体に変更し、スクロールに挑戦する。リングバッファーのロジックと同じでこれは簡単にコードが書けた。まだAとBしかキャラクタがないが、それらしく横スクロールする文字を眺めてひとり悦に入る。

LEDマトリックスにはまる その3 (5/31/08)
 いや、スクロールも手強かった。前にスクロールできたと書いたが、実は1文字づつ独立してスクロールするだけで文字が2文字分流れていく電光掲示板の形ではスクロールできていない。シフトレジスタは2段にカスケードになっていて、16ビットで2文字の縦データを送る。横データはトランジスタアレイ一つで同時に2つのLEDマトリックスの同じ列が点灯するようになっている。

 これで2文字分のスクロールをするのは結構大変である。しかし、これがプログラミングの醍醐味である。人のソースコードを見れば簡単だろうが、このところ人のコードを頼りにしすぎる。久しぶりにメモを書き散らしてロジックに頭を捻った。年をとっても直感的な分析力は落ちていないが、こういう解析力は確実に落ちているのを痛感する。集中が効かない。あるところまで論理をつめていくと最初の前提条件を忘れてしまって論理が閉じていかないのだ。

 まあ、年齢相応に色々なアプローチの手法だけは山ほど知っているので、そう悲観はしていないが、思い通り動かないと最後はソースリストの前で、定数を足したり引いたりする不毛なデバッグになり、暫くお休みをとるという繰り返しである。

 こういうときは気分転換が一番である。風呂などが一番良い。行き詰ってもう寝ようと風呂に入ったとき、はっと気がついてうまく行ったことが何度もある。このときもそうだった。トランジスタアレイが並行して点灯していくことに気を取られ、その順番と最後まで行ったときの処理をあれこれ考えていたが、黙ってそれぞれの点灯すべきアドレスだけ計算していけばそれでスクロールができることに気づく。そのために配列は並んでいるはずだ。アドレスが表示データを越えれば素直に最初のアドレスに戻ればよい。

 風呂に入ったのが午前3時近く、今さらまたデバッグするのも何なので寝たが、夢にまでVccだグランドだと基板配線の光景がでてきて夢の中で苦笑する。やることがあるときの朝の目覚めは早い。朝食もそこそこにPCの開発環境を立ち上げる。

 これで決まりと考えたロジックは最初動かなかった。がっくりくる。スクロールの指定もしていないのにそもそも文字が静止しない。あれこれいじるが改善しない。ミリセカンドのオーダーで表示を繰り返し、なおかつ少しづつその表示をずらすというのは確かにそう簡単ではない。

 これも一休みして原因が判明した。ポインターを止めて別の変数で8バイト分ダイナミック表示をしているときにポインタそのものも動かしていたのである。これでは静止しないはずである。ステートメントでいえば、++の記号をひとつはずすだけ。これでLEDマトリックスは完全に想定どおりのスクロールを開始した。万歳。A5311316

 表示フィールドを大きくして少し電光掲示板風にしてみる。家族に自慢する(いつも馬鹿にされるのだけれど吹聴せずにはおられない)。ウェブデザインをバイトにしている次女だけが、「すごい」と驚いてくれた。お世辞でも嬉しい。まあ、次女はよく大学まで車で送ってやっているからな。

 LEDマトリックスの次の目標は文字フォントの導入である。これでこのあいだのSDカードのプロジェクトと合体する。

ここにTiny2313を使ったLEDマトリックスをドライブするプログラムを置きます。回路図がないので読みにくいと思いますが、ソースにコメントがありますので、ダイナミック表示やスクロールの参考にしてください。EEPROMにフォントを溜めて16字まで表示できます。なお、本格的な8ビット漢字を表示する電光掲示板(Mega128)のソースはこのあと公開します。

「MATRIX2313.lzh」をダウンロード


| | コメント (0) | トラックバック (0)

今度はフォトカプラ2つが犠牲

気が滅入る(5/22/08)
 このあいだRTCモジュールを電源逆差しで失ったのもつかの間、今度はフォトカプラを2つも壊してしまい気分が滅入っている。ひとつ¥20もしない安いフォトカプラなのだけど、このまえの100V接触のような事故と違って、ここに書くのも恥ずかしいお馬鹿なミスが原因だったことが余計悔しい。まあ、聞いてください。

 SDカードの試作ボードは一応機嫌よく動いているが、面倒なことが残っていた。UARTをUSBシリアルモジュールで接続しているため、本体の電源を切っても、USBのUART側の電圧で(UARTは負論理)、送受信ピンを通じて電流が流れて本体のMCUのVccに電圧が上がり(1V近く)、パワーオンリセットがかからない。前のチップからこの問題は起きており、このときは1V以上出て、MCUが動作したままだった。

 USBケーブルを抜けばシリアルモジュールの電圧はなくなり問題ないのだが、差し込みの度にUSBが初期化されPC側のターミナルソフトの再立ち上げが必要になる。これでは何度もリセットを繰り返して開発するとき、不便でたまらない。MCUのリセットピンをアースしてリセットすれば良いが、電源を切ってもMCUが何となく動いているのは気持ちが悪い。このあいだから、これを解決しようと、フォトカプラを持ち出してあれこれやっていた。

 ここで徹底的な勘違いをしていたのだが、フォトカプラ入力のLEDの電流制限抵抗は内蔵されているものだと頭から思い込み、入力をそのままUARTの出力につないで動かない、動かないと思い悩んでいた。あろうことかVccの5V にもつないでみた。

 テスターを持ち出してフォトカプラが壊れていることに気づき、10年近くも前に買ったフォトカプラだから前に壊したのを忘れていたのかと気楽に、もうひとつのフォトカプラをとりだして、しかもこのときはテスタをつけて壊れていくさまを目撃したと言うお粗末。

 始め、電圧が上がっていてそのうち0になってしまい頭を捻っていたら、はっと気がつき呆然となった。そのときは既に2回路フォトカプラ2つの3回路分が犠牲になったあとであった。子供が親の目の前で車にはねられたようなもので可哀想でしかたがない。

 何とか気を取り直し、残りの1回路に制限抵抗を入れテストをしてみる。Vccは見事0V近くまでさがり絶縁の目的は果たされた。UARTを動かしてみる。うーむ、データの受信は少し出来ているようだが、データシートのとおり、38.4kbpsのシリアルデータ、1クロック25μsではパルス遅延が5μs程度の汎用フォトカプラでは苦しい。半分くらいデータをミスする。予想通りだった。元々はこれを確かめるためで、こんなことなら始めから実験などしなければ良かったのである。

 高速フォトカプラは沢山市販されているが値段は結構するし(\200以上)、まあこれをつけるほどのものでもない。出来ないとなると何とかやってやろうといういつものへそ曲がりの癖がでてあれこれ考えてみる。3ステートバッファも大げさすぎる。このあいだうまくいったインバーターを通した方法は、何故か順論理(NANDを2つカスケード)にしたら74HC00の電源を切ってもダメだった。

 それでは普通のトランジスタではどうだろう。ICそのものがトランジスタの集合体だからうまく行くとは思えなかったが、だめもとで古い2SC945を持ち出してエミッタフォロワで接続してみた。これがうまく行ったのである。UARTが5V、Vccが3.3Vでベースに直列に10Kエミッタに1Kの抵抗を入れ、コレクタ電流が3mA程度でポート出力は3Vちょうどにおさまった。Vccも電源を切ると、0.4Vに下がる。いやいや昔に比べればハードの設計技術は長足の進歩である。晴れない気分に光が差し込む感じがする。

 2SC945のスイッチングスピードを念のため調べてみる。データシートによれば、立ち上がりはPict0720早い(50ns)のだが、立下りは400nsと非常に遅い。しかし、100kbps程度のUARTではまだ10倍以上のマージンがあるので問題なさそうだ。

 ついでに、ブレッドボード用に、基板の切れ端の上にトランジスタとヘッダーピン、ピンソケットをつけ、回線をアイソレーションするミニ基板をでっちあげた。 こういうものを作っているときは、気が紛れていやなことを忘れる。これで実験のたびに回路を組む手間が省けるというものだ。

| | コメント (0) | トラックバック (0)

« 2008年8月 | トップページ | 2008年10月 »