(日々の記録)デジタルオシロを買った。電波時計のデコードを考えているうち、工作が思わぬ方向に曲がってしまった。今、何か作りたい大きなテーマがあるわけではない。いう気ままな寄り道は所長の好むところでもある。FPGAのDE0とか、雑誌付録の何台かの手付かずの32ビットプロセッサー、FreeRTOSを使ったLPC2388のネット制御など懸案は山積しているが、これというアプリケーションが見当たらないので腰が重い(これを現実逃避とも言うが)。手元の電子部品で遊んでしまう。電波時計ユニットにフォトカプラー接続(8/19/2012)このところの電子工作と言えば、Aitendoの電波時計ユニットである。あとから買った40,60kHz両バンドモジュールが思いのほか感度が良くて実用化してみようという気になってきた。窓際にアンテナを出して電波を安定的に受け、本体を工作コーナーに置いて、工作室の標準時計としても良い。なると次のステップは、JJYパルスのデコードである。1秒に一回(1bps)という気の長いデータなので、マイコンにはどんなロジックでも組み込める。単純に1秒ごとのパルスの長さを測っているだけでは、ノイズに弱いデコードになってしまうだろう。それに、ひとつパルスを取り損なったら、今までのデータをすべて破棄して、次の59秒のマーカーまで休むのでは効率が悪い。ひとつのエラーでデータを最初から取り直すような厳格なプログラムでは正確な時刻を取得するのに何十分もかかる可能性がある。何かインテリジェントな方法がないだろうか。したノイズに強いデコードロジックの開発のために、まずは現在の受信状態をオシロか何かでしっかり把握しておく必要がある。電波時計ユニットは何故かオシロやロジアナをつなぐと、PCデスクの前でも出来ていた受信が不能になってしまう。デジタルノイズがプローブを通して入るからだろう。このままではLEDの点滅を見ているだけで先に進まない。JJYのシミュレーターもあるが、これは今度は完全すぎて本当のテストにならない。そのうちアイデアが閃いた。フォトカプラーである。フォトカプラーで絶縁すれば、デジタルノイズが防げるかもしれない。フォトカプラーは最近いくつかの工作に応用して経験値が上がっている。思い立ったら動きは早い。フォトカプラーをブレッドボードに差して実験を開始した。PCデスクの前でも順調にJJYの1秒パルスを受信できるようになり、オシロからやっとそれらしい波形を観測できるようになった。アンテナの角度が微妙だ。当面の観察の結果だが、ノイズは立ち上がりか立下りの時に多く発生し、パルスの中間では少ない。チャタリング防止のような考え方でかなりのノイズは防げそうである。パルスの中間のノイズは防ぎようがないが、これも100ms以内で元へ戻るようなら、なかったものとするロジック(チャタリングと同じ)で除去できるかもしれない。立ち上がりの割り込みでチャタリング防止のように立ち上がりを検知してから10ms程度の待ちを入れると、かなりノイズは防ぐことが出来そうである。立ち上がりパルスは厳密には正時0秒なので、こちらにある程度の精度のクロックがあればノイズは無視できる。中間のノイズは、一旦デコードして、かけはなれたパルス長(200、500、800msの3種で許容値が決まっている)になるなら、その立下りを無視する。判定できなければ(殆どがデータパルスだろう)データフレームを持っているので、そのブロックだけのデータを無効にして次の1分でとりなおす。日や時間などは、急には変わらないので全部取り直す必要はない。あれこれ本格的にロジックを考え始めた。そのうち、掲示板でChaNさんのサイトにも電波時計の制作記事があることを知った。何と10年以上も前の2001年の記事である。Tiny2313の前身のチップAT90S2313時代の作品だ。ソースコードもついている。ダウンロードしてみた。プログラムはアセンブラーだ。何々、クロックが4.194304MHzという半端な周波数を使っている。これはどういうわけだ。ソースコードを読むうち、彼のデコードアルゴリズムを知って目から鱗が落ちた。連続してデータを見るのではなく、サンプリングで値をとり、サンプリングの間隔を、2のべき乗で(2の22乗)の周波数で分割してずれないようにしている。いう方法ならチャタリング防止などは考える必要がない。マーカーが決まればかなり正確にデータがとれる。人のソースは見ないと頑張っていたが、やっぱり独断でことを進めるのは効率が良くない。先人の智恵をもっと調べることも重要だ。大きなヒントを貰った。このスタイルを真似て作ってみよう。半端な周波数の石は手に入らないが、分周とカウンターの上限を工夫すれば、きっちりした時間を作ることは可能だ。アナログづいて今度は焦電センサーアンプ組立て(8/20/2012)フォトカプラーを電波時計ユニットに入れてデータ波形の取得に成功した。ChaNさんのコードを見て、開発の道筋が見えてくると安心して逆にやる気を失うという、いつもの悪い癖がでて、次のステップが進まなくなった。そのうち、ウェブで8ピンAVRのTiny13の制作例を探しているうち、Napionというディバイスを見つけて気分が変わった。Tiny13は電波時計ではなく、この間の小型モーターの制御(ワンショットパルスの生成、前記事参照)に使おうと考えているCPUチップである。それはともかく、Napionとは、Panasonicが出した焦電型赤外線センサーとアンプを組み込んだ人感センサーチップである。これだけで人や動物の接近をTTLパルスで出力する。へー、こんな便利なセンサーがあるんだと調べてみたら、単品でも売っている。