W.Deeの2009年4月の日記

kikyou.info»日記
最新月 : 2008年10月
2003年 [             3    4    5    6    7    8    9   10   11   12  ] 月
2004年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2005年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2006年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2007年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2008年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2009年 [   1    2    3    4    5    6    7    8    9   10   11       ] 月
前月の日記  次月の日記

2009年4月30日

基板設計をしてみた

gschemで編集したデータをgsch2pcbでnetlistに変換して、基板設計用プログラム PCB でマトリクスLED電波時計の基板を適当に設計してみた。

基板レイアウト

うーん、僕は他のこういうソフトを使ったことが無いんですが、勝手に配線してくれるのですごい楽。そりゃそうか。でも電源ラインの引き回しとかは指示してやらないと、とんでもないところをグルッと回されたりしてしまいます。

ここまできたらせっかくだからプリント基板を……と考えてしまいますが、少量発注だと単価が高いんだよなー。。。

  • 2009-05-07 11:35 AZ-UME : Deeさんの回路は面積でかいから割高になっちまいますね。オリメックスかP板あたりに発注するにしても高い。
  • 2009-05-13 01:49 W.Dee : こまっちんぐですね。おうちで気軽に両面プリント基板が作れるのとかどっかがつくったら大ウケすると思いまんす。スルーホールは異方性素材で、配線は金属粉末+加熱融解とかでなんとかならないのかなあ。なりませんね。

2009年4月29日

マトリクスLED電波時計完成

いつまでもいじってると永遠に完成しないので、一応完成としましたー!

通常表示中

ケースは百均の黒い書類ケース。サイズはちょっと大きいですが、黒スモークでいい感じです。

明るさは正面のボタンでかえることができます。明るさ全開だと夜間まぶしいのでこれはいい感じ。CdSで部屋の明るさを感知して設定した輝度にするようになってます。どの部屋の明るさでどのぐらいの輝度の設定が行われたかもEEPROMに記憶するようにして、部屋が明るくなったときや暗くなったときも自動的に設定に追従するようになっています。

まぁ壁掛け用途を想定しているのでアラーム機能とかないですし、時刻も自動受信を前提としているため、時刻合わせのインターフェースもありません。正面のボタンは、強制受信(緑)と、明るさ調整(青)、ステータス表示(黄色)のボタンのみです。受信周波数は40kHzと60kHz両方対応しています。正常に受信できるほうを自動的に使用するようになってるのでこれもとくに意識する必要は無いのですが、強制受信ボタンで強制的に周波数を切り替えることもできます。

受信中はこんな感じ。

受信中

中を開くとこんな感じ。

ご開帳

いろいろと途中で回路を変更したりしたので割と裏面はぐちゃぐちゃです。

アンテナと受信回路は分離していて、タッパーにいれてあります。こんな感じ。感度のよい好きなところに置けます。

アンテナと受信部

ソースと回路図を公開します。

訂正: CONN4の2ピンからmiraにつながっている線(TCO)はRE2ではなくてRA6につながります。STATUS LEDとPILOT LEDにつながる電流制限抵抗は5.6kではなくて3.2kでしたが、これはLEDの特性によって大きく異なります

ソースはsdcc用。電波時計信号受信部分はlibjjyなんて名前をつけて分離してあります。再利用性はあると思うので気に入ったら使ってください。実際にこれをつかってコンパクトな電波時計をもう一つ制作中。

回路図はgschemを使って書いてみました。ううーむ。シンプル。

PICを使って思ったことは、ほんとに標準ロジックICいらないなーってところがかなり強いかなといったところです。これだけの機能があるPIC16F886が200円とかいったら、そこらの標準ロジックICは価格的にも機能的にも太刀打ちできませんよね。低価格なPICラインナップは実際にはマーケティング的に標準ロジックICの置き換えも視野に入っているらしいですし。もっともこっちは趣味としてこういうことをやっているのでそういう感想になりますが、実際の製品の開発現場ではまたかなりコスト感覚が変わってくるのかもしれません。

昔、中坊のころ、標準CMOSロジックICだけで時計(日付表示つき)を作ったころが懐かしい。20個ぐらいロジックIC使った気がするんですが今だったらPIC一個で十分じゃないかしら。

あとsdcc偉大。gccに比べればさすがに変なところがたくさんあってくせの強いコンパイラだけれども、これでPIC用ソフトウェア開発がどれだけ楽になったことか。

AVRはまだいじったことがないですが、こういった低価格マイクロプロセッサは弄ってて楽しいです。

さて、ハードウェア屋に浸かりすぎたのでもうそろそろソフトウェア屋にもどりたいのですが、その前にいま製作途中の奴を完成させて、あとどうしても雷センサーを作りたいのであります。ううむ。

  • 2009-05-07 11:22 AZ-UME : ハードばかりとかソフトばかりやってると煮詰まりますから気分転換程度でよろしいかと。
  • 2009-05-09 23:57 W.Dee : そーっすねー。でも一作品仕上げるのが大変なのとモチベーション維持を考えると結構一旦スイッチが入るとなかなかやめられないwwww

2009年4月14日

なんか完成が見えてきた

電波時計が完成に近づいてきましたー!

最初、表示部分は 8個の8x8マトリクスLEDを横に並べて使って表示しようと思ったのですが、秋月で100円で売ってるこれだと横幅が30cmぐらいになってしまい、なかなか合うケースが無いので、しょうがないのでこれを5x2の10個つかって40x16マトリクスにして表示することにしました。

そしてやっぱり悩むのがI/Oの本数。仮に16行を 4-to-16 デコーダ(74HC154とか) でやったとしても44本必要なわけで、40pinのPICだと足が足りません。

外部にロジック付け加えても…と考えるとやっぱりラッチかなーと思いましたが、8ビットラッチICって千石で一個150円ぐらいしてた記憶。んじゃあPICの方が安いじゃん。となります。

行制御に4-to-16デコーダをつかわずに、ダイレクトにPICでやらせるとなると足が56本必要なので、PIC16F887の35本あるI/Oを表示に30本、通信にのこり使ったとしてもあと26本必要、26本足を出せるPICとなると…やっぱり同じPIC16F887しかありません。しかもこれ秋月で200円。やすいー。

ということでPIC16F887をデュアルで使うことにしました。へっへっへデュアルプロセッサだぜwwww

二つのPICの間はシリアルの調歩同期で行うことにしました。パラレルでやるほど足ないし、近距離かつ同じクロックソースを使うので、実験だと調歩同期でも(Fosc/8)bpsまでは出るみたいなんですね。今回はFoscは11.776MHzなので通信速度は1.472Mbpsということになります。1バイトの送信に20命令サイクル分の時間が必要と言うことになりますが、ソフトウェアで次のバイトを用意したり、割り込みがかかってから起き上がるぐらいの間に転送が終わってる速度なので、速度的にはまったく問題ありません。

足がたりないわけで一つのPICで処理能力がたりないわけでは無いのですが、片方のPICは主に受信したタイムコードの処理とRTCの処理、もう片方のPICはユーザーインターフェースと表示を担わせることにしました。

11.776MHzのクリスタルはこれ。周波数を素因数分解してみると 2 2 2 2 2 2 2 2 2 2 2 2 5 5 5 23 。はて。何に使うんだろうこれ。でも安いからいいのです。安いの万歳。時計にはよく32.768KHzのような、コンピュータにとってキリのよい周波数が使われますが、今回は必要な周期をソフトウェアで計算しているので、周波数が安定してればよく、周波数がいくつかというのは重要ではありません。

行ドライブはこのトランジスタアレイを。8回路入り×2個なのでちょうどです。

んでまあデジタルの部分はこれでいいし、ましてソフトウェアの部分に入ってしまえばこっちのものなのですが、困ったのが電波受信部分。本体の表示回路から出てくる強烈なノイズの影響をモロに受けてしまうのです。

受信部分

これは受信部分です。

電源ラインや信号ラインに乗ったノイズはノイズ除去用のトロイダルコアやフェライトビーズ、CR LPFなどで何とかなったようなのですが、アンテナや受信回路がそもそも物理的にデジタル回路に近い場所にあるとダメのようなのです。基板にアルミ箔テープでベタシールドしたり、電源の配線を工夫したりして抵抗を試みたのですがダメでした。表示を消すと受信できるようになるみたいなんですけどねー。

実際はノイズがかなり入っていてもソフトウェア的にキャンセルしてしまうため、これでもあまり問題は無いのですが、なんか負けたようで気にくわないわけです。

ということでアンテナ部を分離できるようにしました。ケーブルには百均でかった手元スピーカーについてきた3メートルのステレオスピーカーケーブル。これがものすごい高品質なケーブルで、前にシリアル通信伸ばしたいなーとおもって9600bpsを流したところ、受信側では上位ビットがほぼ1になって受信されるという素晴らしいもの。波形を見てみるとものすごい鈍り具合。このケーブルはものすごい勢いでノーマルモードノイズを除去してくれると期待。

というわけでそのケーブルでうまくいきましたー!

電波受信回路からはタイムコードが出てくるのですが、特性としてはほぼDCと考えてよいほどの低速な信号なので、非常にノイズ対策がとりやすいのかなーとおもいます。最初、標準電波のタイムコードの体系をみたときは「なんでこんな変な信号なんだ」と思いましたが、実際に電波時計を作ってみるとなかなか納得させられる部分が多数。ただ月/日のダイレクトな情報がなくて1/1からの通し日数の情報しかこないところはいまだに納得できないw

タイムコード解析アルゴリズムは例のノイズ耐性が強い代わりにノンビリなアルゴリズムで、やっぱり電源を入れてから数十分は我慢しないとなりません。まぁ電源入れっぱなしだし、放置してればそのうち時刻が表示されてるってことでよいでしょう。一旦正常に受信が完了したあとは、常に電波を受信しつづけ、秒が標準電波と同期するように監視しつづけます。ずれを検出したら自動で補正を行います。水晶クロックの誤差もゆっくりと自動で補正していくようになってます。また、数時間おきにタイムコード受信動作に再び入り、最新の情報を得るようになっています。一応40kHz/60kHz自動切り替えです。うちの近辺(さいたま市)は60kHz(九州から出てくる方)でも一応は受信してくれる模様。ノイズ入りまくりだけど。

受信中

アンテナマークは受信状態を表しています。受信回路からはデジタルなタイムコードの信号しかこないので本当の電界強度などは分からないのですが、受信した信号の「綺麗さ」から適当に受信状態を求めて表示しています。

受信完了

受信完了…日付が狂ってるのはソフトウェア側のバグです。

ワイヤリングペンによる配線

面倒くさそうだったマトリクスLEDの配線はワイヤリングペンですっきり。

あとはケースに入れるだけですがとりあえず完成のめどがついたかなーというところです。

回路図どうしようかな。いつも面倒で書かないんだよなーーー。

デカ時計はFon側のソフトウェアを書く手前でひとまず置いてあります。

2009年4月1日

続・ゲームにおけるスクリプト言語の現状

http://www.igda.jp/modules/news/article.php?storyid=1622

うーん

自分にとって有用な情報があるかどうかというと、前回が微妙だったので今回はパスー。

ちなみにこんなクソ忙しいのにエイプリルフールネタなんか用意してません。