エントリー

2010年01月28日の記事は以下のとおりです。

GPS時計 - 後日談

  • 2010/01/28 17:01
  • カテゴリー:make:

 先日,ここをご覧頂いているある方からメールを頂きました。

 内容は,GPS時計を作ったが動かない,なにか思いつくことはないか,ということでした。

 昨年末にAVRのtiny2313を使ってGPS時計を作り,その顛末をここに書いたのですが,私にしては珍しくソースも公開したので,自分も作ってみようと思って下さった方がいらっしゃったようです。

 最初に申し上げておかねばならないのですが,この日誌は自分のためのメモがわりなので,他の方が見て問題なく制作できるほどの情報を書いていません。今回のGPS時計にしても,実は回路図はどこにも書いていませんし,ソースの変更履歴もありません。さらに掲載した画面の写真は最新のソースのものではありません。

 ということで,誰もこんなの作ってみようと思わないだろうと,不親切きわまりない内容だったにもかかわらず,果敢にも実際に手を動かした方がいらっしゃるとは,ちょっと驚くと共に,申し訳ないなあという気がしました。

 頂いたメールは非常にシンプルで,「SATと20だけが表示されあとは何も出てこない」ということだけが書かれていました。

 うーん,正直なところ,これだけでは原因として思いつくことがあまりに多すぎて,ちょっと答えようがないなあ,と思っていたのですが,まず最初にピンと来たことを中心に答えることにしようと考えました。

 私のお返事は,

----
 その原因として,思いつくものを列挙します。
LCDに表示が出ているので,AVRとLCDは動作していると
仮定します。

 また,ソースは「GPS時計 - 完結編」にある
最新版(起動時にV1.33と出る)であるとします。

(1)GPSモジュールのボーレートを変更していない。
 購入直後の設定は9600bpsなので,これを
 19200bpsに設定する必要がある。(やりかたは
 ぐぐってください)

(2)AVRを外部発振で動かしていない。
 AVR側のボーレートは,内蔵発振では
 補正を入れないと正確にならず,受信出来ない。
 (最終版のV1.33では20MHzの外部発振でなくては
  動きません)

(3)書き込み時のヒューズビットの設定ミス。
 特に外部発振の設定はヒューズビットで行うため
 適切な設定を行う必要がある。

(4)配線ミス。
 GPSモジュールのピン配置は?
 GPSモジュールの信号レベルは?
 GPSモジュールは動作している?
 単純な配線ミスは?
----

 としました。

 ピンと来たというのは(1)もしくは(2)の話で,表示も出ていることからAVRは動作しているし,通信が出来ていない時にこの症状になることは私も経験しているので,この2つを確かめてもらおうということにしたのです。

 とりわけ(1)は,GPSモジュールに手を入れて,ボーレートをデフォルトの9600bpsから19200bpsにしないといけないことを詳しく書いていなかったので,可能性は低くないと思いました。

 (2)も実際に実験したのですが,内蔵発振器でクロックを用意する場合,その周波数は結構ずれるため,正確なボーレートになってくれません。それでAVRライタを使ってある領域に書き込まれている補正値を読み出し,その値を周波数補正レジスタに書き込んで8MHzを作る事が必要になります。

 私が実験したというのは,あるチップで有効な補正値を別のチップに書き込んだらどうなるかだったのですが,予想通りボーレートも狂ってしまい,受信が出来なくなりました。結構面倒な話なので,私はUARTを使う場合には外部に発振子を用意しようと,この時から考えるようになりました。

 (3)は今回の現象を直接引き起こすか確証はないのですが,私の思うAVRの欠点の1つだと思うことでもあるので,書いておきました。

 AVRもマイコンですから,ソースをコンパイルしバイナリを生成し,これをライタで書き込むことで動くようになります。ただ,AVRの場合それだけではだめで,書き込み時にライタによってヒューズビットを設定しなければなりません。

 私が嫌だなと思うのは,ヒューズビットの設定をファイルに保存しておけないことです。ソースもバイナリも保存できるので残しておけますが,ヒューズビットはメモで残すか,テキストファイルで残すかした上で,ライタにいちいち設定しないといけなかったりします。(なにかいい方法があるのかも知れませんが,ライタによらない共通のフォーマットで保存出来なければ意味がありません)

 しかも,ヒューズビットの設定をあやまって,外部発振子を使わずに外部発振モード設定にしてしまうと,ISPでの書き込みが出来なくなってしまいます。ごく普通に使われているライタはISPですので,それしか持っていない人にとって,復活の方法がないという恐ろしい状況がおこります。

 チップごとに設定が異なっていて,しかもマイコンが動作する前に設定をしないといけないような部分があって,そこをヒューズビットにするという考え方は普通だと思いますが,それならそれでAVRstudioでヒューズビットの設定を行う事にし,バイナリと一緒にヒューズビットの設定ファイルを生成して,ライタはそれらをただ書き込むだけ,と言うふうにしてくれた方がよかったと思います。

 まあ,そんなことを言っていても仕方がありませんが,とにかくヒューズビットは回路によっても変わってくるので,作った方に再確認をしてもらうしかありません。


 翌日,お返事を頂きました。

 無事に動いたという事です。よかったよかった。

 原因は,GPSモジュールのボーレートを変更していなかったことにあったとのこと。私の勘もなかなかのものです。

 一緒に,正常に動作した状態の写真も送って下さいました。LCDは秋月あたりでよく売られているものをお使いのようですが,私はデジットで買った大きめのものを使っているので,同じ画面が小さい液晶で表示されたものを見るのは当然初めてです。

 こうしてみると,自分が作った覚えのないものが,同じように動いているのを見るというのは,なんだか不思議な感覚になります。自分が手を動かして作ったものは,やっぱり強い記憶に残りますから,写真を見てもなんとも思わないのですが,自分が作っていないものが同じ動作をしているのをみると,「あれこんなのいつの間に作ったのかな」という感じになるのです。

 もしかすると,突然「あなたの子よ」と子供の写真を見せられたら,こんな気分になるのでしょうか。

 私は,自分の電子工作は,自分が楽しかったらそれでいいという動機でやっていることなので,積極的に他の方に作って頂こうなどと思ったことはありませんから,今回のことは意外だったなと思うのと,こんなものでも興味をもって作ってみようと思って下さった事が,素直にうれしいと思いました。

 余談ですが,エレキジャックのNo.16に,私も使ったGPSモジュールであるGT-720Fを使って,GPS時計を作った例が記事として出ているようです。

 なぜかある領域でブームになってるニキシー管を使っているのも売りのようですが,私が疑問なのは,GT-720Fのような1PPS出力がないモジュールを使っておきながら,正確とか原子時計レベルとかいっていいものなのかな,ということです。

 GT-720Fというモジュールは,1/10秒や1/100秒の桁がゼロになっている時刻にだけ,時刻情報を送信してくるというわけではありません。

 つまり,12時12分12秒00という時刻情報が送られて来るとは限らず,12時12分12秒99といった,1/10秒や1/100秒の桁が0以外の時刻情報を送ってくることがあるということです。

 だから,単純に受信データのうち,1秒から上の桁を表示するだけでは,最悪1秒近いズレを発生させてしまうことになります。

 そりゃそうですね,GT-720Fは,12時12分12秒99の時点で「12時12分12秒99ですよ」と時刻情報を送信しているに過ぎませんから,受けた側がそれを勝手に12時12分12秒と表示したら,約1秒ずれますわね。私はここで,随分苦労しました。

 エレキジャックには最近愛想を尽かしてしまっているので買っておらず詳細は分からないのですが,ちょっとだけ気になってサポートページにあるソースを見ると,特別な処理は行っておらず,1/10秒以下を単純に切り捨てて表示させ,結果的に最大1秒のズレを発生させる可能性があります。

 もちろん,私がやったような方法で1/10秒以下を考慮しても,1PPS出力がなければGPS衛星に搭載される原子時計に同期したパルスを手に入れられませんから,12時12分12秒00になってから12時12分12秒00と送信されたデータを受信して表示をしているようでは,どうしたって遅れが生じます。これはGT-720Fを使う限り避けようがありません。

 なのに,原子時計レベルの正確な時計だ,というのはかなり無理があるように思います。私がおかしいのかなあ?

 みんな,電波時計なんかと比較しないんでしょうか・・・作りっぱなしで比較もせず,GPSで得られる時刻情報は原子時計レベルなのだという知識だけで,盲目的に自分の作った時計も正確だと信じちゃうのでしょうか。

 さて,同じ電子回路の設計技術を持つ者でも,量産品を設計するプロと,アマチュアとの間には大きな差があります。プロは1000個や10000個を「同じように」「効率よく」作る事を前提として設計を行う事になります。アマチュアは1つ動けばそれでいいので,極端な話,全部の抵抗を可変抵抗にしても別に構いません。

 こうした差から生まれる決定的な違いは,プロは記録を残すことも仕事と考えていることです。自分がいなくなっても同じものが作れるようにするには,詳細な記録がなくてはなりません。それが回路図であり,ソースコードであり,履歴であり,各種のドキュメントです。

 アマチュアはこういったものをあまり積極的に残しません。プロは,残すだけではなく,誰が見ても同じ結果になるように,決まったフォーマットで残す事を求められます。

 仕事なんだから当たり前なのですが,何が言いたいかというと,アマチュアも,しっかりしたドキュメントを残すべきだということです。私もGPS時計について,自宅にはちゃんとした資料を残しています。

 最近,電子工作を楽しむ方が増えているようです。それはとてもよい事ですし,長年楽しんでいる私にとっても心強いものがありますが,設計,製作,測定,考察,というプロセスをきちんと踏んで,それらをきちんと記録して残しておくことを特におすすめしておきたいと思います。

 必ず次に繋がりますし,飛躍的にその人の技術力を高めます。なにより,後で読み返したら面白いですよ。

 とくにオーディオマニアでアンプなどを自作する人に言いたいのですが,地に響く低音とか伸びのある高域とか静寂が身を包むとか躍動感あふれるとか艶やかなボーカルとか,そんなことを「作った結果」として誇らしげに言ってるだけじゃ,ダメですよ。

ページ移動

  • 前のページ
  • 次のページ
  • ページ
  • 1

ユーティリティ

2010年01月

- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

新着エントリー

過去ログ

Feed