« 2008年9月 | トップページ | 2008年11月 »

2008年10月の4件の記事

2008年10月21日 (火)

リズムキャプチャー完成

アナログ回路が納得できない(10/14/08)
 アナログ部の回路が確定しないので、リズムキャプチャーの実装は、アートワークが完成したのにどうも実行に移す意欲がわかない。というのも半田付けしてしまえば、ブレッドボードのように気楽にあとから変えるわけには行かないからだ。大型機システム同様、途中の仕様変更は手間が増えるだけで良いことは何ひとつない。それで実装をためらっている。

 気になっているのは2段目のACアンプの0V(AC)からの立ち上がりのクリップである。オシロがなければ、何も分からず先に進んでいると思うのだが、なまじ波形を見てしまうと一目瞭然なだけに、このまま回路を確定するのに抵抗がある。764

 本来の目的はリズム音の把握である。少々歪もうが、最大音でクリップしようが関係ないのだが、そこはそれ、気になるとそれにこだわって先に進めない性格である。ブレッドボード上で色々調べる。まず、クリップの起きる場所はAC的には0V付近で、いわゆるオペアンプのオフセット電圧(入力が違っても出力にあらわれない部分)が疑われる。しかし、それでクリップが起きているのなら、初段のアンプから起きなければならないが、初段には全くクリップがなく、2段目だけに起きているのでこれが原因とは考えられない。

 ACの反転増幅回路なので入力は初段の出力をカプリングコンデンサーで受けている。入力は直流的には浮いた(無限大の抵抗)状態である。トラ技のアナログ特集などの記事を読むと、オペアンプの入力をオープンにするのはいけなく、何らかの電流が流れないといけないらしい。10KΩ程度の抵抗を信号入力とグランドの間に入れてみた。全く増幅しなくなった。理屈から言えば、ゲインが減るだけのはずだが0とはどういうことだ。うーむ、アナログは難しい。

 次に、1MΩの抵抗を入れてみた。今度はちゃんと増幅をするが、クリップされた状態は全く変わらない。オペアンプを完全に理解しているわけではないのでウェブや雑誌の記事を参考に切り貼りのようなことをやってみるがどうもうまくいかない。今度は、2段目の出力に負荷抵抗を入れてみた。おや、クリップされる位置が変わった。今まで0Vだったのが、少しマイナス側に移動した。

 勢い込んで、半分の5KΩにしてみた。もっと下がった。2KΩにしたところ、マイナス側の出力値を越えたらしく。クリップはなくなった。やった。しかし、何故こうなったのか理屈の上で説明がつかない。どうも対症療法のような気がして、すっきりしない。

 次の日、次段の検波回路の出力を調整しようと(全波整流の波形を揃えるため)、抵抗値をかえていたときのことである。ふと、オシロを見ると、前段の出力のクリップが復活しているのを発見した。何だ、何だ。次段の定数の変更でおかしくなるなんて聞いたことがないぞ。そんな事なんてあるのか。

 念のため、カプリングコンデンサーをはずし、昨日つけた負荷抵抗もはずして前の状態にして実験してみた。うわあ、ほんとだ。2段目のオペアンプのクリップは全くなくなり、綺麗なサインウェーブになっている。コンデンサーをつなぐとクリップが出る。間違いない。後段(検波回路)の影響で前段がおかしくなっている。困った。アンプだけでも良く分からないのに、検波回路はもっとわからない。このあいだ雑誌の回路図にない入力側の抵抗を入れてやっと全波整流が出来た回路である。エレキジャックの記事の回路図を参考にしたが、この回路はナショセミのデータシート(LMC6482)に出ていた回路と全く同じだった。そこにも必要だった抵抗はない。

 どうも、2段目の出力につけた負荷抵抗と、検波回路の入力Rcapに入れた抵抗が異なると、クリップが出るようだ。インピーダンスマッチングのような関係でもあるのかもしれない。しかし、今のところ5mV入力で、1V(RMS)近くの検波出力が問題なく出る。マイクから相当離れていてもきれいに音響パルスを拾ってくれる。実用上はもう何も問題ない。この前のトランジスタアンプと同様、こればっかりやっているわけにはいかない。そろそろ引き時のようだ。これ以上の追求は諦めてアナログ回路を確定することにした。

表示パネルができた(10/16/08)
 久しぶりに秋葉原に行き、これまで足らなかった部品を買ってきた。今まで基板とブレッドボード向けの部品ばかりで、パネルやケースにネジで固定する類のスイッチやLEDのストックがない。ビスも丸ねじでなく、パネル用に皿ネジにしたい。マイクはLCDの固定ビスを利用して基板の切れ端に固定しケースにつける予定だ。

 この日は珍しく秋月に寄らず、ネジは西川、部品は千石で買いそろえた。ガード下のラジオデパートなどの方が種類が多そうだが、概して価格は割高だし、気兼ねなく部品を取って物色できない。まあ、気が小さいもので、商品を手に取ると買わないで店を出ることが出来ないだけなのだけど、千石はその心配をする必要がないので気が楽だ。

 必要な部品が揃ったので、いよいよ本格的な工作に入る。こういうこともあろうかと以前、昔懐かしいリーマ(ボリュームやスイッチなどの大き目の穴を小さな穴から広げる工具)を手に入れてある。手始めにマイクの穴から明け始めた。しかし、6角形のリーマの形に穴が広がって丸くならない。そうこうするうちにマイクと現物あわせをしたらあけすぎてしまっていることに気づく。

 やれやれ大失敗である。1mm以上の隙間が出来てしまっている。削りすぎは取り返しがつかないので注意していたが、ついにやってしまった。ケースそのものは¥1000しないが、失敗したことに腹が立っている。しばらく作業が手につかなかった。

 まわりをゴムパッキンか何かでつめることにして、気を取り直して工作を進める。それ以外の工作は順調で、何とか全部の部品の取り付けが終わった。マイクの大きすぎた穴もそれほど気にならない。後付の論理だけど、ケースから伝わる音を拾わないだけ良いかもしれないと失敗を合理化している。皿ネジのおかげで仕上がりが少しプロっぽい。というより何十年か前の計測器の表示パネルを思わせる。それが何故かを考えて思い当たった。770rhythm

 今の電気製品にはネジがないのだ。ネジは大量生産のときの生産性向上の敵なのである。表示パネルにネジが見えると言うのは、製造工程に無駄があるという証拠になる。レトロな感じがしたのは、ネジが6つもパネルについているからなのに違いない。確か西川には、黒の皿ネジも売っていたはずだ。ネジを黒にして目立たないようにするとまた印象が変わるかもしれない。

 これで残る作業は、基板に部品を半田付けするだけになった。kumanさんがやっておられるように少しづつ配線しては、テストして行く。この方法は実に合理的で心配がない。デジタル部を基板上に配線していく。もう何十回も配線しているのでデジタル部はアートワークを良く見ないでも結線が出来るほどだ。ISPピンをつけ、例のUSB-SPIブリッジで動作を確認する。これはchaNさんからの贈り物だ。動作を確認した。これでデジタル部は問題ない。いや、みなさんのおかげで進行が早い。ありがたいことである。

実装に手間取っている(10/20/08)
 2日ほどかけて40×55ミリの小さなユニバーサル基板に、オペアンプ2つとTiny861を組み込んだ。アナログはCR部品が多く面倒だけれど工夫の余地がそれだけあって、久しぶりの半田付けが楽しい。しかし、今回はくだらないミスを連発して冷や汗を何度もかいた。なかでも一番ひどかったのは、USB-SPIブリッジで(VccをUSBから供給)動いたので、気楽に電池駆動に切り替えたときのことである。773r

 5秒ほど入れて全く動かないので、電源を切り、MCUチップを持ってみたら、ほんのり暖かい。MCUは余程のことでない限り発熱することはない。もしやと思ったら電源を逆に配線していた。頭から血が引いていく。基板が混んで、VccラインとGNDラインを基板の上にジャンパーしたときにうっかり逆にしてしまったようだ。

 祈る気持ちで、配線を修正し電源を入れなおす。おお、Tiny861は何事もなかったようにAVRspに反応する。一発で昇天したRTCなどに比べると結構我慢してくれるようだ。助かった。

 表示パネルの配線も終わり、いよいよアナログも含めた全体のテストに入る。これが久しぶりの実装で見落としが多く難航した。特に今度は14ピンのコネクタを通じてLCDとMCUがつながっている。LCDをビジーフラグ待ちにしたためにLCDが動かないと先に進まないプログラムの構造になっている。プログラムを直せば良いのだが、ブレッドボードで動いた状況を変更してさらに不確定要素を増やすことはやりたくない。これまではUARTがデバッグの強力な武器だったのだが、LCDが動くまでこれが使えないのは痛かった。これは対策を考えておかないとこの先が大変だ。772r

 アナログも最初は全く動かなかった。まあ、今度はオシロがあるのでトラブルシューティングはそう困らない。シグナルジェネレータで入力を入れ、ひとつづつ確かめていく。結局、2箇所で半田不良が見つかった。UEW線は絶縁が丈夫に出来ているのか、半田で完全に固定されているように肉眼では見える(かなり力を入れて引っ張ってもとれない)のだが、実は導通していないときがある。気をつけないといけない。

 デジタルの方はLCDは制御線のコネクタでのピンアサイン間違いで、それを直したら、完全に動いた。アナログは何とか動き始めたが、懸念されたとおりデジタル回路に近接したため、ブレッドボードのときよりノイズが多い。クロックから、タイマの割込みなどデジタルの動作のすべてが手に取るように盛大にノイズに乗っている。始め発振を疑ったり、電源に大容量のパスコンを入れたり、色々回路に手を加えたが大きな変化はない。771r

 そこで、丹念に最初からオシロで信号を調べて行った。何のことはない、初段のアンプの入力から、既にかなりのノイズを拾っている。アンプのゲインは数百倍(今のところ220倍)ある。出力段でピークで150mV程度のノイズになるのは当たり前と言えば当たり前の話である。ただ、不思議なことにマイクのコードを動かしてもノイズレベルは全く変わらない(本来なら大きく変わっておかしくないのだが)。

 そもそもオシロのプローブには、動作状態でない回路にあてるだけで50mVを越えるノイズが出てくる。アースのワニ口クリップをどこに接続するかでも大きさが変わる。本当に回路上にこれだけのノイズが出ているかは、もっと厳密な環境を作らないと何ともいえない。デジタルのノイズを減らそうにもユニバーサル基板では何も出来ない。パスコンも効果がなかった。

 幸い、ADコンバータへの出力はコメントのおかげで高出力になりLPFを簡略化したためピークで2V以上の出力が得られている。ADCの基準電圧を1.1Vから2.56Vに上げ閾値を大きくすることで、相対的にノイズレベルを下げ、ブレッドボードと同じ性能を確保することができた。

悔しいけれど効果絶大な取り外しキット(10/21/08)
 遂にリズムキャプチャー実装版が完成した。まだUARTが不調(デバッグ用なので実装版では不要)なのが気がかりだが、ブレッドボード上の試作版と全く同じ機能を持つ実装版である。構想を具体化し始めて、ほぼ2ヶ月。アナログの世界に迷い込み、とうとうオシロまで買ってしまって、やや暴走気味だったが、やっとのことで収束したようである。

 まあ、リズムキャプチャーという機械そのものに大きな意味があるわけではない。用途は、メトロノームの較正とか、ボートレースのオールピッチの確認とか、等間隔な掛け声の練習なんかが考えられるくらいで、世間から見れば、正(まさ)しく「ひとりよがり」の機械そのものである。

 しかし、この機械を作る過程で沢山のものを知り、様々な知識と経験を得た収穫は大きい。念願のオシロも手に入れたし、オペアンプについても少々詳しくなった(何しろ参考書を3冊も買ってしまった)。世界が広がったことを実感してとても充実感がある。そのなかで、ささやかだけれど面白い経験をしたのが、サンハヤトの表面実装部品取り外しキット(SMD-21)である。774

 このあいだ93C46の取り外しに苦労したり、モジュラージャックの取り外しでもう少しでパタンを切ってしまいそうになったときに見つけた簡単な取り外し工具の一つなのだが、特殊半田とフラックスだけで定価が¥5000近くするので、何だか馬鹿馬鹿しくて買う気がしなかった。しかし、今度のアナログの回路を部品を捨てずに取り替える必要にせまられ、昨日たまたま糸半田が切れたので秋葉に寄った際、つい買ってしまった。秋葉の店(小林電機 ラジオデパート1F)が送料を入れた通販より安かったことをたまたまウェブで発見したこともある(¥4505)。

 表面実装部品ではないが、試しに3ヶ所のCRをはずすのに使ってみた。普通なら、ひとつのランドの半田を溶かし、溶けている間に急いでペンチでリード線を曲げてはずし、これを繰り返していくのだが、こいつはそんな必要がない。説明の指示通り、特殊フラックスを注射器からはずす場所に塗り(説明は赤いキャップをはずせとあるがついているのは青いキャップで混乱する)、半田ごてで特殊半田をそこに盛るだけである。

 この半田は融点が58°という低温なので、こてで複数箇所を溶かしても、他のところがまだ溶けたままになっている。チョン付けした部品ならこの段階でポロリと落ちる。曲げてつけたリード線もペンチで曲げる余裕がある。こいつはすごい。高くて悔しいけれど(キットのケースの中はほとんどスポンジで中に細い半田とフラックス注射器が入っているだけ)、効果は絶大だ。あっという間に電解コンデンサーひとつと抵抗2つを回収した。

 注意することはただひとつ。溶かした半田は必ず吸い取り線か何かでしっかり取り除くことである。この半田が残っているとそこのランドの半田付けは極めてもろくなり簡単にとれてしまう。まあ冷えたときに半田の色が変わる(白く、表面が荒れた状態)ので残っているかはすぐわかる。Rcapdigital

 なにはともあれ、リズムキャプチャープロジェクトは最終の段階を迎え、がた老AVR研究所は次のプロジェクトの企画に入ることになる。お約束のソースコードと回路図を公開させていただく。回路図は、結局、水魚堂さんのCADソフトを利用させてもらった。この場を借りて感謝を申し上げたい。言うまでもないことだが、公開する回路図やソースコードは完全なものではなく、これによって起きる結果については何の保証も出来ないことをお断りしておく。

ここにAVRStudioのプロジェクトファイルの形でソースコードを置きます。なかに既に掲載した回路図も含まれています。また、XatoiのライブラリはchaNさんのソースを使わせていただきました。ありがとうございました。

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


 

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

2008年10月12日 (日)

リズムキャプチャー試作版完成

LCD表示をブレッドボードで(10/9/08)
 音響パルスの測定がほぼ満足できる成績になったので、今までUARTに出していた結果をLCDに表示するコードを追加する。このLCDライブラリはこのあいだビジーフラグを見るようにして高速化した最新版である。R/W線が増えるのがつらいが、早さには替えられない。今度はミリセカンドのオーダーでデータを表示するので、32文字で数msの高速表示が効いてくるはずだ。

 大したプログラムの変更はない。UARTに向けていたxatoiの出力先を追加したLCD関数の方へ切り替え、ヘッダーファイルのピンアサインを変えただけである。むしろ、16字×2行のせまい表示エリアにどうバランス良く、わかりやすく表示するかに頭を捻る。Rhythm_2

 コーディング中に、これまでLEDで表示していた、平均値からの誤差表示を図形的にLCD画面に表示することを思いつき、そのコードもついでに入れる。アスキーアートのようにoやピリオドを点滅させて現在の状態をリアルタイムで表示するようにした。 これでLEDをやめてノイズからも逃げられる。「うーむ、俺は天才ではないか」などと、うそぶきながらコーディングを楽しむ。

 できた。早速動かしてみる。と、またこれが動かない。そんな馬鹿な。このLCDライブラリはこのあいだ完動している。変えたところは何もない。xatoiが選り好みをしているのか。はい、はい。悪いのは私でした。ピンアサインを替えただけではこのLCDライブラリは動かないのだった。

 このあいだADCの入力ピンをノイズを避けてPA0から一番最後(PA7)に移し、LCDのデータラインをひとつづつずらした。 ヘッダーファイルで自由にピンを選べないことはわかっていたが、連続しているので大丈夫と思っていた。しかし、ソースを確認すると、それでも駄目で、きっちりLCD出力の4ビットデータピンはポートのbit4からbit7にないと動かないことがわかる。

 やれやれ、LCDライブラリも改修が必要なのだけど時間がない。ADCピンを戻す方が簡単なのでこちらを替え、とりあえずLCDのピンアサインを連続にして先を急ぐ。いずれこのLCDライブラリもヘッダーファイルの変更だけで動く移植性の高いコードにしてやる必要がある。754rhythm

 LCDに表示がされるようになった。ところが、ADCポートに頻々とノイズが入る。当然、測定は無茶苦茶になる。LCDを加えて起きていることは間違いない。LCDも立派なデジタルディバイスなので派手なノイズを出しているはずだ。これはやっかいなことになってきた。オシロで波形を見てみた。なんと、目一杯の電圧がピンにかかっている。ありゃ、これはノイズではない。ピンに何かのデジタル出力が出ている。LCDのポートADCのポートは同じでPORTAでピンが違うだけだ。

 LCDの処理で、ADCのピンをいじるようなことをしているのだろうか。目を皿のようにしてコードをチェックするがおかしなところはない。そのとき何気なく画面をスクロールした。あーっ、消したはずのLEDを点灯させる制御コードがまだ残っているところを見つけた。馬鹿な話である。現在のADCのピンは、前はLEDを制御していた出力ピンで、ステートメントは全部消したはずだったが、ひとつ残っていた。やれやれ、デバッグは外へ外へ目を向けなさいと、昔、後輩に良く言って聞かせていた教訓を思い出した。お恥ずかしい。

 ブレッドボード上だけれど、リズムキャプチャーの試作版が完成した。文字がブリンクして誤差を表す表示もちゃんと動く。ただ平均の回数を5回にしかとっていないので連続的に正しいところへ戻っていく様子を見せることは難しい。まあ、目安だからこんなものか。それより解決しなければならないことがある。LCDドライバーの位置指定コマンドがうまく動かないときがあり、表示がずれる。

 このコマンドもビジーフラグを見ているのだが、どうも連続してデータが来ると正しいポジションに移らない。このために文字が画面上に残って見苦しい。まだ公開できるレベルにない。こいつを退治したところでソースだけでも公開しよう。

ケースの加工にいそしむ(10/10/08)
 実装するケースは以前、AC電力ロガーにしようと買ってあった、タカチのSW-100(100×65×45)を使うことにしている。LCDを上面につける十分な高さがある。ただ、電源に単3三つを使うので基板が半分以下になり、オペアンプなどのアナログ部が全部はいるか少し心配である。

 このあいだ東急ハンズで買ってあった、「ピラニア糸鋸」でいよいよLCDの窓枠工作に入る。この糸鋸、実演販売で、「この糸鋸の刃は、こーんなに曲げても折れません!」と実演者が大見得を切った途端、「ポキッ」と見事に折れ、みんなが固唾を飲んでどう対応するか見ていたら、「いや、まあこういうこともハハハ」と見事にその場を納めたのが気に入って、つい買ってしまったのだが、刃の断面が円形でどの方向にでも切れるというのが売りである。

 ただ、糸鋸の取り付け金具が長さ1センチ以上あり(11×3mm)、それだけの穴を開けないと、LCD表示フレームのような中空の窓は開けられない。まあ、金属でなく合成樹脂なので気楽に電動ドリルで適当に穴を開けて刃を通し、所定の大きさに切っていく。ピラニアと名づけるだけあって気持ちよく切れる。このあと作る予定のFG(ファンクションジェネレーター)の方はアルミなのでこうはいかないだろうが、楽しみである。

 枠は大雑把に切り抜いてあとはやすりで整形する。LCDの固定ネジの穴あけは緊張する。しかし、ドリルスタンドのお陰で作業はとても楽だ。このドリルスタンドは最初穴あけだけでなく、丸鋸などの切削作業にも使おうと考えていたのだが、ドリルだけの用途でも十分価値がある。特にこういう化粧面での穴あけは失敗が許されないだけにその効果は絶大だ。

 ただ、やすりの整形は気を遣う。ケースの表面に張った養生テープの上に鉛筆で正確に枠を書いてそれを目安に削っていくのだがどうしても製図そのものと現物とは誤差が出ているので、現物が入ったときはだいたい大きく削りすぎてしまっている。今度のLCDのように本体にベゼルが固定されているとケースとの隙間が目立ってしまうが仕方がない。

 スイッチやマイクはまだだが、LCDの表示枠だけ完成した。ありあわせの2ミリの丸ねじ(本番は平底2.5ミリの予定)でLCDを固定し、とりあえず配線してブレッドボードにつけてみる。761rhythm おお、塩梅が良さそうだ。文字も大きく見やすい。スイッチなどの穴あけはLEDブラケットとお揃いの形にするため今度の買い物までおあずけである。

LCDライブラリとアートワーク(10/11/08)

 LCDライブラリを書き直そうと、PCの中を整理していたら、これまでダウンロードしてあったLCD表示ソースコードが4つも出てきた。Webに出回っているソースは、7年前にkusunokiさんが公開されたソースがどうもオリジナルらしく、そこから色々な派生コードが生まれている。

 AVR用でなかったので良く見ていなかったのだが、何と、すんさんのサイトで公開されているMSP430用のLCDライブラリは、ビジーフラグを見て表示をしており、しかもデータビットが不連続でも動くようになっている。それに公開されたのは2年近くも前だ(1/14/07)。AVR用でなかったのでうっかり見落としていた。

 今さらという感じもしないわけではないが、まあ、あれはAVR用ではないし、AVR用として公開しても悪くはないだろうとソースをダウンロードできるようにした。このソースはこのあいだのアドレス指定コマンド(lcd_gotopos())の直後、表示させるとアドレス指定が効かず、次のカーソルに表示してしまうバグは解消してある。どうもビジーフラグはRead/Write処理だけ有効で、ハングせず表示はされるが、正しいRAMアドレスがセットされないようだ。

 公開するソースのもうひとつの売りは、制御ピン、データピンが完全にヘッダーファイルの定義だけで、ポートに関係なく、自由に設定できることである。コード量は元のソースより100バイトほど増えるのが難点と言えば難点だが、ソースをいじる必要がない完全なライブラリとなっているので汎用性は高いと思う。

 さて、本題のリズムキャプチャーは、スイッチの買い物待ちでハード工作が一段落したので、基板のアートワークにとりかかった。懸念したとおり、アナログ回路はCR部品が多く、レイアウトに苦心する。LCDとマイク、スイッチなどは上蓋に固定し、そのあいだを14ピンのピンコネクターで接続する。Tiny861は、アナログ用のVccとGNDがあるので、デジタル部と完全に回路を分割できる。ただアートワークはそれだけ面倒になる。Rhythm

 分離できると言っても今度の電源はUM3×3の共通電源なので、まあ、気休め程度だが、一応、LCDを含めたデジタル部とアナログ部のVccとGNDは電池のコードのところまで分けてレイアウトすることに成功した。出来上がってみるとかなりな集積度だ。掲載した手書きのアートワークは少しインチキがあって、抵抗2つが正規の形をしていない。描き直すのが大変なので実体配線のとき補正する予定だ(こういうのが落とし穴になるのだが)。

ここに自由にポート、ピンを選べるLCDライブラリのソースとヘッダーファイルを置きます。

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

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

2008年10月 8日 (水)

音響パルス間隔測定機の実装へ

実用化に程遠い計測成功確率(10/2/08)
 前の記事のコメントを見ていただければわかるように、Tiny861のADコンバーターの入力インピーダンスが60Ωしかないと騒いでいた事件は、kugaさんの一言で一気に解決した。LEDのノイズをさけるため慌ててAD入力のピンを移動した際、ポートの入出力方向を決めるレジスターDDRを出力(1)にしたまま動かしていたのである。MCUのこういう多目的の入出力ポートは、特定の機能を持たせたときはDDRは無関係になるという誤った先入観があって、全く無頓着だった。最初の頃は、Web記事に忠実に、真面目に設定していたと思うが、慣れてくるにしたがって横着したのが良くない。

 あのコメントを見て、慌ててDDRを修正し動かしたら、ぴったりハイインピーダンスになり、10KΩ以上の抵抗を入れたLPFでも全く電圧降下なしにオペアンプからの出力がピンに出てくるようになった。いやありがたい。これでオペアンプのゲインを増やさなくて済む。それにしてもブログを開設して始めてのコメントらしいコメントがこんな大当たりのコメントだったのに感激する。kugaさんありがとうございました。それにしてもADコンバーターが出力ポートにしておいても動くとは全く考えもしていなかった。良い勉強になった。

 しかし、その後の間隔測定は順調とはいえない。絶対値でなく前後の差で劇的に成功率が高くなったとはいえ、少し長く測っているとやっぱり時々間違える。しかも、誤り率が波形の正確な電子式で特に多い。入力ピンがハイインピーダンスになって出力電圧が上がりLPFで自由に波形を整形できるようになったが、電子式に最適になるようにすると、機械式がおかしくなり、機械式に合わせると、電子式がエラーだらけになる。とてもまだ実用になるレベルではない。

 大体、電子式の音響波形を見ていると正確な方形波であり間違えようがないと思うのだが、これがミスするのである。サンプリング周期を1msから0.25msに早くしたり、平均をとる回数を3回から10回、20回と増やしてもパルスの立ち上がりで短いパルスと長いパルスの2つにとってしまう。

 紙にパルスの状況とサンプリングのタイミング図を散々書いて調べた結果、やっとその原因がわかった。要するに、急速にパルスの立ち上がる区間にたまたまサンプリングの周期が入ると、その前後の値はちょうどピークの1/2づつの差が出来て、閾値の設定が非常に微妙になり、閾値が大きいと2つとも逃すし、小さいと2つとも拾ってしまう。どのタイミングにサンプル期間が来るかはわからない。Onkyo_pulse

 これは、この方式では構造的な問題で、閾値をどれだけ追い込んでも、サンプリングの巾を変えても解決できない。2点ではなく、3 点で評価すれば解決しそうだが、それほど複雑なロジックが必要なものとも思えない。もっと簡単なロジックがあるはずだ。機械式がまだ正確なのは、パルスが立ち上がった後すぐ大きく変化し、電子式のように前後がちょうど1/2になるタイミングになることが少ないからだと思われる。

リズムキャプチャーと命名(10/4/08)
 パルス判定ロジックは暗礁に乗り上げたが、まあ、これはソフトウエアで解決する話だ。測定データは完全に数値化ができているし、こればかりに時間もとっていられない。先に進むため、そろそろ実装に向けて作業を開始することにした。

 まず、正式な名前を考える。これまでリズムメーターと呼んできたが、どうも実態をあらわしていない。そこで、音響パルスのリズム間隔をキャプチャーする(つかまえる)「リズムキャプチャー」という名前にすることにする。これならば、このあいだのコメントにあったように、電子メトロノームと誤解される心配もない。

 アナログ関係はあとはゲインの調整用の可変抵抗器をどこかにつける必要があるだけでもう余り心配はない。懸念されたLEDのノイズはブレッドボードと電源スイッチの間の接触不良が大きな原因であることがわかった。しっかり差し込むとノイズは殆ど無視できるほど下がった。電源のレギュレーションをここで悪くさせていたのか、高周波でも出ていたのかもしれない。パスコンを色々な所に挟んでノイズ対策をしていたが改善せず、放置してあったのだけれど助かった。

 プログラムはこれまでスイッチでタイミングを測っていたコードを流用していたが、あとからコードを追加したため構造が複雑になってしまった。最初から作り直すことにする。今度は、持ち運べるようにLCDに表示するコードも必要だ。Tiny861 はフラッシュが8kもありプログラムはいくらでも増やせるが、入出力ポートは意外に少なく、LCD表示をしようとするとピンが足らない。ISPの3つのピンは使えないわけではないが、デバッグ用のUARTに残しておきたいし、LEDも今の3つはともかく、2つくらいは欲しいし、スイッチは測定開始終了の指示のため必須なのでこのピンもいる。結局、LEDの数を2つに絞ってピンアサインは何とか納まった。

 次は、実装である。手持ちのケースやLCD、電池ケースなどを並べてレイアウトを考える。アナログ増幅のため、電源は最低でも5V近くは欲しい。するとバッテリーはやはり3つは必要で、バッテリーだけでケースの半分を占めてしまうが仕方がない。ゲイン調整のVRを何処に置くか、LCDの配置をどうするか。保守性を良くするためLCDは基板につけて、上蓋に固定するのは避けたいが、位置あわせや、見栄え良く仕上げることが難しいし、耐久性が心配だ。いやいや悩むことが沢山ある。しかしこれも電子工作の醍醐味のひとつである。Pict0752

埋もれていたバグを見つける
(10/5/08)
 リズムキャプチャーのソフトを作り直す話である。このプログラムはイベントドリブンで、一番主要なイベントは0.25ms毎のタイマー割込みである。このときにADCを動かし音響入力を測定する。回数を数えておいて一定の間隔でADCからの出力を平均化し、前回の数値と比較して閾値を越えればフラグを立てる。別のところでも数をかぞえていてこれはLEDを点滅させるのに使う。次の割込みでさっきのフラグを見て別のタイマーを止め、これまでの時間を測る。これがリズム間隔となる。このタイマーはただちにスタートし次の間隔を測り始める。

 このイベント以外に不定期に発生するイベントが2つある。ひとつは測定開始・終了を制御するスイッチ割込みと、リズム間隔を測るタイマーがオーバーフローすると(4秒余り)、タイムアウトして計測を中止し初期状態に戻すタイマー割込みである。この2つはさっきの0.25msの割り込みとは全く独立していつ起きるかわからないイベントである。

 そう難しい構造ではないが、プログラムの中のフラグやスイッチはなるべく少なくしたい。良い加減に作っていくとスパゲッティになる。久しぶりに擬似コーディングを紙の上でやった。擬似コーディングという言葉に聞きなれない人も多いだろうが、要はいきなりソースコードを書いて行くのではなく、普通の言葉でプログラムの動作をステートメント風に箇条書きに書いて矛盾がないか確かめる方法である。if文やwhile文の条件文も日本語で書く。こうするとロジックが理解しやすい。

 もうひとつ肝腎なことは、自分が使う立場になってソフトウエアの仕様を完全に決めてから開発に入ることだ。操作面(業務要件)から入るのは、大規模ソフトウエアのときと変わらない。中途半端に仕様を決め開発に入ってしまうとあとで痛い目に会う。特に何か処理をするときのことは一生懸命考えるが、それが終わったあとどうするかまではなかなか考えておかない。これをつめておかないと丈夫なソフトウエアにはならない。

 今度のリズムキャプチャーの操作仕様をまとめてみた。まず、電源を入れるとウエルカムメッセージが出て、電源が入ったことが確認できる。スイッチを一度押すと、測定が始まる。リズム音を検知するとLEDが点灯し測定に入ったことがわかる。最初は測定値だけだが、何回か測定が進むと平均値のメトロノーム数(一分間の拍数)が出る。測定中にスイッチを押すと無条件に測定を中止し、もう一度押すと測定を再開する。拍の間隔が5秒以上になるとタイムアウトとして初期の状態に戻り、測定中を示すLEDが消える。

 以上のことをなるべく構造を簡単にしてプログラムしていくわけである。まあ、これ以外に気を遣う事は山ほどある。割込みルーチンの中にはなるべく複雑な処理をいれない。これはレジスター退避などを少なくしてフラッシュメモリを節約するためもあるが、処理をなるべくメインルーチンでひとまとめにしてあるほうが、デバッグの時に余計な心配をしないで済む。それに余り長い間割込みルーチンに入っていると、別の割込みが入ってフラグが変わってしまい、わけのわからないバグに悩まされる。このあいだのI2Cドライバーのときも非同期にプログラムが2つ動いていてこれにやられた。

 今度のソフトは最初、3つのフラグを使っていたが、擬似コーディングを重ねて、ひとつ減らすことが出来た。しかし、フラグを減らすことばかり気を取られていると、構造がかえって複雑になり、デバッグに苦労することになる。何事もバランスが大切だ。

 などと能書きを垂れつつ、やっとソフトが完成した。これまではスイッチをメトロノームの音響パルスに見立てたテストプログラムだが、今度は実装を前提にした本格版である。公開にそなえてコメントもなるべく入れる。

 と、これが動かないのである。かなり自信を持って組み上げたはずなのだが、開始のスイッチを入れてもうんともすんとも言わない。やれやれ、テストステートメントを挿入し動きを追跡する。スイッチで開始フラグが立つのだがスイッチを押してもフラグが立っていない。さらにテストステートメントをスイッチ割込みのところまで増やしてテストする。

 なに、割り込みが2回も起きている。スイッチはトグル(0なら1、1なら0)なのでこれでは永遠にスタートにならない。チャタリングなのか。待ち時間を増やす。これでも解決しない。しかたがない。ロジックアナライザーを持ち出す。マイクロスイッチのチャタリングは1ms以内でそのあと全く起きていない。しかし、フラグは暫くして(20msほど)、元に戻る。なんだ、なんだ、これは。

 暫く考えて、原因がわかった。スイッチは10数回チャタリングを起こしていて割込み要求を上げ続けるが、割込みルーチンに入ったところで処理されるのは最初の割り込みのときだけで、残りはペンディングになったままだ。割込みルーチンを出たところでまた割り込みがかかる。やれやれ、この前もこんなことがあった。ルーチンを出る前に割込み要求フラグをクリアすることで解決した。しかし、このコードは散々他のプログラムで使っている。何故今まで起きなかったのだろう。

 今までのプログラムは2回以上割込みルーチンを通過しても問題のないことしかやっていなかった(クリアなどを何回やっても変わらない)からだと思う。こんどはトグルスイッチの機能を持たせたので埋もれていたバグが顔をだしたというわけだ。いやいやプログラムの世界も奥が深い。

オシロで波形が見えるのも考え物(10/7/08)
 パルス判定ロジックの問題が解決した。なまじ全ての音響パルスの姿が見えたためにアナログ的な判定ロジックをあれこれ考えていたが、そんな難しく考えることは不要だった。

 オシロの波形を見ながら、何故人間はこれはパルスだとすぐわかるのに、機械ではうまくいかないのかと考えていた。人間はパルスが起きた後の全体の波形を見られるから、パルスと認識できるが、機械は次から次に発生してくる音の大きさだけで判断しなければならない。非常にせまい視野で、これがパルスだと判断する必要がある。

 判定ロジックをWebに相談しようにも検索キーワードの見当がつかない。学問のどの分野に入るのかもわからない。2点(前後)の比較だけでは無理なのだろうか。だが、3点なら間違いなく判定できるかは保証の限りではない。どうもこの方法(相対差で判断する)では3点でも完全ではないような気がする。

 最初、パルスの大きさの絶対値でうまくいかず、相対差でやってうまくいったため、これにこだわっていたが、もういちど絶対値比較の方法を考えてみることにした。ADコンバータでなくコンパレーターでこのデータを考えてみたのである。

 デジタル化したチャートを手書きで描いてみて、頭に電灯が点った。なんだ、こいつはスイッチのチャタリングと同じだ。沢山デジタルパルスが出ているが、パルスグループの次の間隔は短くても300ms以上ある(拍数で200以上)、パルスのブロックは精々50ms。

 オシロのアナログ波形にこだわりすぎていた。閾値を越えるパルスを観測したら、そのあとのパルスは無視し、パルスのおさまる時間(50ms)から観測を再開すれば、次のパルスを間違いなく捉えられる。なんだ、なんだ。どうしてこれに気がつかなかったのだろう。

 早速、コーディングする。ADCの値を比較するのは1ms単位なので、カウンターを入れて、パルスを観測した後50回までは、パルスが来ても無視するようにする。

 やった、やった。3つのメトロノームとも百発百中。全くエラーを出さずに間隔を表示する。素晴らしい。いやそれにしてもここまでの道のりは長かった。オシロでそれぞれのメトロノームの音響波形がそれこそマイクロセカンドのオーダーで観測できるものだから、ついこれにこだわっていたが、あまり細部が見えるのも良し悪しであることを学んだ。

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

2008年10月 1日 (水)

メトロノームの間隔測定に成功

ADコンバーターは気難しい(9/26/08)
 ブレッドボードの別の場所に組んであったリズムメーターのTiny861のデジタル部をアナログ部の隣に移し、いよいよ音響パルスでリズムを刻むマイコンシステムのテストに入る。ソフトは、この前スイッチでリズムを作り、LEDにその誤差を表示するソフトが出来ているので、これを殆どそのまま流用する。

 ADコンバーター(以下ADC)で一定間隔(1ms)毎に値を収集し、何回か(当初10回その後3~5回)合計した後、その値が閾値を越えたときスイッチがONされたとみなし、スイッチが押されたときと同じフラグを立てる。これで今までの構造を全く変えずに時間間隔がとれるはずである747

 はやる心を抑えて電源を入れる。音源は、この前の掛け声で家族を驚かせた経験を踏まえ、マイクの横にメトロノームを置く。ADCの閾値は、とりあえず基準電圧(1.1V)の半分程度とする。しかし、全く反応がない。スイッチの割り込みは生きているのでCPUが動いていることは確認できている。

 おかしいな。メトロノームの音のパルス出力はオシロで確認できている。P-Pで4V近くある。ローパスフィルター(以下LPF)が入ってTiny861のADC入力ピンで2V以下に下がっているが、ちゃんと音声パルスはでている。

 ところが、Tiny861が動き始めた途端、この出力が0になってしまっていることを発見する。これはどうしたことだ。データシートによれば、ADCへのアナログ入力は出力インピーダンスが10KΩ以下であることというのが条件で、オペアンプの出力インピーダンスはこれよりはるかに低いはずで問題ないはずだ。

 ただ今度は、オペアンプとの間にLPFが入っている。こいつが悪さをしているのかと直結してみた。ところが反対に、オペアンプそのものの出力までが1/10以下に下がってしまう。もちろんADCピンにも出てこない。これはまずい。ADCは随分前に温度センサーで使ったことがあるが、このころはWebの情報どおりにやっただけで基本的なところは全くわかっていない。

 データシートを読み直すが、先の条件以上のことは書いていない。基本がわかっていないので手の出しようがない。素人判断では、ADCの入力インピーダンスが相当低く、オペアンプの出力にまで影響を及ぼしていることを示している。

 それでは、オペアンプが悪いのか。このあいだ買った「定本 トランジスタ回路....」の出力インピーダンスを測定する方法で、オペアンプ単独の出力インピーダンスを測ってみた。無負荷で出力が4Vなので2Vになる負荷抵抗をつないだとき、この抵抗値が出力インピーダンスになる理屈である。10Kからはじめて、4.7K、1Kと負荷抵抗を下げていく。全く変わらない。100Ωでも変化なし。つまり100Ω以下であることは間違いない。

 オペアンプが動いているほうがまだましなので、LPFを入れた状態で色々調べる。オシロの測定電圧の感度を上げると、ADCピンにノイズに紛れてはいるが、わずかながら、音響パルスが出ていることがわかった。LPFの1KΩを何の根拠もなく100Ωにしてみた。これが何とADCピンに音響パルスが出始めたのである。50Ωにするともっと大きくなる。748

やれやれ0オームでは全く出なくて、50Ωを入れると動くなんて、理屈に合わない。しかし現実には1V近く出ているのでノイズはやや多いものの、もうデジタル計測が可能な状況になった。理屈はあとで考えることにして、このままでプログラムを動かしてみる。出た。メトロノームの音で時間が区切られUARTのコンソールにはインタバル時間が表示され、LEDがつき始めた。

やったやった。遂にリズムメーターの機能が動き始めた。暫く動かしてみる。しかし、パルスのとりかたがまずいのか安定しない。時々とりこぼしたり、メトロノームの中間で早く時間を切ってしまっている。オシロで見ている限りはきれいなパルス状の波形が出て、人間の見る限り、間違えようがないのだが、ソフトがうまく動いていない。
7463
ソフトロジックも結構難しい(9/29/08)
 ADコンバーターがとりあえず音を拾うようになったので、本格的なソフトの改修を始めた。まず、家中のメトロノームを動員する。常用している定番の大きなメトロノームに加え、携帯用の小さな機械式メトロノーム、それに次女が持っている電子式の小さなメトロノームの3つを揃える。とりあえずは電子式のものがやはり一番取りこぼしが少ない。それはそうだ。オシロでみてもきれいな方形波になっていて、これはそばで音を立てない限り正確にタイミングを記録する。
Photo
 小さな機械式のメトロノームが意外に成績が良い。音は小さいがパルスが揃っている。こいつは古くなって、往復の時間が狂ってきたのでもう使っていないのだが、正確にその違いがこのリズムメーターでわかる。率にして実に10%近い差があることが測れた。これは便利だ。早速役に立った。

 しかし、大きなメトロノームの方は問題が多い。筐体が大きいのでその反響音があるのだろう。オシロで見ると小さいメトロノームのパルスに比べて、パルスが不ぞろいで、ピークが2つ山になることがある。判定ロジックが練れていないので、この谷を次のタイミングと間違えるのと、時々音が急に小さくなる拍があり、ここで取りこぼしている。

 やれやれ問題は山積である。しかし、オシロは大活躍だ。スイープを長くしていくと短いパルスがメトロノームの音と音の間に発生しているのが発見できた。調べているうち、出てくるときが限られているのがわかった。どうもLEDが点滅しているときのノイズのようだ。LEDをドライブするピンはどういうわけか、アナログ入力の隣のピンになっていてジャンパーコードが近い。LEDはしょっちゅう点滅するのでなく、緑、橙、赤の3つのLEDを間隔の移動平均との差で点滅させたり、常時点けたりしている。

 ブレッドボードなのでこの辺の対策は無いに等しい。あわててLEDの配線をオペアンプから離し、ジャンパーコードが近づかないようにする。この対策で少しミスが少なくなった。実装のときはアナログピンを離して設定することにしよう。いや素晴らしい。オシロのおかげでこんなことがすぐわかる。まあ、アナログ入力のすぐ隣に10mA近く流れるピンを設定すること自体が非常識なのだけど。

 それはともかく、懸案はロジックである。閾値を変えてみたり、平均回数を増減したりするが、あちら立てればこちらが立たず。パラメーターの違いで大きいメトロノームが良くなったと思うと、電子式がとりこぼしを始めたりしてうまく収束しない。

 もうすこし賢い方法がありそうである。閾値を固定するのは本当は良くない。それと1ms単位にデータをサンプリングして10回の平均をとるのは、メトロノームの音響パルスが機械式では高いところは10~20ms程度しかなく、電子式でも30ms程度なので、タイミングがずれると正しい値を示さないことになる。いわゆる量子化ノイズである。

 それはわかっているのだが、連続的にADCを動かすのは今のロジックを大幅に変更する必要がある。何とか今のやりかたで出来ないか、可能な限りのパラメータ変更や、ローパスフィルターの調整をしたりするが、なかなか百発百中というわけにはいかない。いやいやソフトも難しいものだ。

 それと今のプログラムにはもうひとつ大きな問題がある。 LEDの点滅の仕様である。LEDで間隔時間の移動平均と直近の観測値との誤差を表示するようにしている。5%以内なら緑が点灯(good)、それより離れると15%(fair good)まで点滅し、それを越えると今度は橙色(caution)のLEDが点くというような仕様である。現在は移動平均の間隔時間を1とし、これより長くなっても短くなっても、その算術差で判断している。時間が長くなるときは移動平均との差でよいのだが、短くなったときの差はそのままではおかしくなる。

 1割増しと1割引きとの差は同じと考えられるが、3割あたりからおかしくなり、5割増しと5 割引では明らかに後者の差は前者より大きい。前者は1.5倍だが、後者は半分になっている。8割増までくると違いははっきりする。8割り増しは1.8だが、8割引というのは残りは2割(0.2)で、元とは5倍の差がある。

 どうすれば感覚的に同じになるか。2割遅くなったと感じたときは元の長さの1.2で良いが、逆に2割早くなったと感じる速さは、1.2で割ってやれば良い。つまり元の長さの1/1.2で0.83の長さが2割早くなったと感じるところということになる。要するに対数目盛りだ。

 この改修も含めてロジックを修正し、メトロノーム3台を実験台に今日一日試行錯誤した。しかし状況は好転しない。やはり飛び飛びのサンプリングで、しかも何回かの平均値を単に前後比較するだけで、音響パルスを正しく把握することは難しい。サンプル点をもっと増やすか、比較する範囲を広げた知的なロジックが必要だ。今日の実験はひとまずやめて、ソフトを基本的に考え直すことにしよう。

 と、ここまで書いて、後片付けし始めたとき、新しいロジックのアイデアが閃いた。よしこれを最後にやめようとソフトを少しいじり、動かしてみた。何と何と、これが大当たりだった。換えたところは一箇所だけ。今まで絶対値で大きな値になったとき、前の値が一定限度以下のときスイッチが入ったと判断していたのだが、絶対値をやめて、両方の値の差が一定の大きさを超えた時にスイッチが入るようにしただけである。

 Tiny861は、メトロノームが出す音響パルスを正確に把握して、PCコンソールに次々にタイミングを記録していく。どのメトロノームでもミスがない。これまでの状況がうそのように見事だ。いやあ、参った、参った。ソフト一つでこんなに状況が変わるとは。これだから電子工作はやめられない。

 一時は実装をあきらめようかと思うほどエラーだらけだったが、これで胸を張って次に進めそうだ。冷静になって考えれば、なぜこれを今までやらなかったのかというほど簡単な手法である。激しくパルスが立ち上がっているのだから、この前後の関係にもっと注目すべきだったのだ。これでもう少しサンプリング間隔を縮めればもっと確実になるはずだ。

ADコンバーターの入力インピーダンス(9/30/08)
 昨夜遅くの成功に気を良くして、今日も仕事から帰った後、工作室にこもって実験の再開である。サンプリング間隔をもっと小さくするとか、単純な平均でなく移動平均をとっていくとか、ソフトロジックにはまだまだ工夫の余地があるのだが、当面は昨夜のロジックをもとに最適な閾値を追い込む。不思議なことに、この方法は機械式の2つのメトロノームのほうが成績が良く、パルスの正確な電子式がむしろたまに間違える。
745
 これは電子式が音量の一定な音を30msだけ出しているのに対し、機械式は打撃音でパルスが鋭いため音量差が大きくなるためと見られる。平均をとる回数を3回(3ms)から5回(5ms)に増やしたり、閾値の値を減らすと電子式のメトロノームも正確になった(最上段 電子式 中段 機械式(大) 下段 機械式(小)ただし電子式はタイムスケールを2.5倍にしている)。

 それより前から気になっているのが、ADコンバータへの入力743電圧の低さである。どうも入力インピーダンスが予想よりはるか に低そうなのである。そうでなければ、ADコンバーターが動いただけで、あんなに一気に電圧が下がるわけがない。オシロで測ってみても、高々100Ω程度のローパスフィルターの抵抗の前後で大きな電圧降下がある。電流が流れている証拠だ。

シグナルジェネレーターから1Khzの入力をマイク入力に入れて整流回路のオペアンプで得られる出力は、脈流なので実効値(RMS)で見て0.8Vあるが、ADCが動き始めるとローパスフィル744タの100Ωの抵抗を介してピンの電圧は0.3Vまで下がる(コンデンサーははずしてある)。単純に考えると5mAも流れていることになる。

となると、ADCの入力インピーダンスは何と60Ωしかないことになる。本当にこれだけ電流が流れているのか、少し乱暴だけれど、テスターで電流を測ってみることにした。テスターの表示した値は6.05mA。やっぱり間違いない。こんなに低いとはどこにも書いていない。これは大変だ。下手にフィルターをはさむわけにはいかない。最初LPF(ローパスフィルター)に1KΩの抵抗をつけたらピクリとも動かなかったわけである。

それでは、このあいだ動かなかったオペアンプ直結にしてみてはどうだろう。やってみた。表示が5mAから10mAと見る見る増えていく、15 mAを超えたところで怖くなって電源を慌てて切る。CPUチップのピンに流せる最大電流は20mA程度だ。これではCPUが壊れてしまう。60Ωだとすると1Vに対して17mA流れるはずなのでこの測定値は間違いではない。直結したときオペアンプの方が動かなかったのは、このあたりと関係があるのかもしれない。

 困ったときのWeb頼みで調べたが、特にこういう話は出ていない。他社のADCの入力インピーダンスは数KΩが多いようだ。ご本尊のTiny861のデータシートをもういちど調べる。最後にADCの電気特性が出ているのを見つけた。入力インピーダンスは100MΩとある。そんな馬鹿な。Mega単位とはとても考えられない。チップが壊れているのだろうか。いやAD変換は全く問題なくやっている。どこかに大きな勘違いがあるのかもしれないが、今のところ動いているので余り深追いはしないことににしよう。

 ただ、何故これにこだわるかと言えば、アナログ入力をもっと増やしたいからである。LEDのスイッチング電流が場所を離しても結構アナログ入力に載って来て、前後の入力差にロジックを換えたせいもあって、頻繁にエラーを起こす。それで今はLEDの点滅をやめている。しかし、実装のときは是非欲しい機能なので、パルスを無視できるほどの、アナログ入力レベルにしたいのだ。こうした周辺ノイズを減らす対策が非常に面倒なことは経験上知っている。余りやりたくない。LPFはオペアンプを使ったアクティブフィルターにでもすればもう少しゲインが稼げるかもしれない。

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

« 2008年9月 | トップページ | 2008年11月 »