エントリー

カテゴリー「make:」の検索結果は以下のとおりです。

周波数カウンタの精度確認

  • 2016/06/08 13:55
  • カテゴリー:make:

 先日,ついつい出来心でOCXOのジャンクを買ってしまいました。10MHzのもので,もともとGPSDOについていたものようです。

 トリマによる周波数微調整がない代わりに,電圧制御で周波数の調整が出来るものです。この手のタイプは初めて買いました。

 安い物なので,ダブルオーブンではないでしょうから,性能的には期待していませんでしたが,動作確認くらいはしようと周波数カウンタの電源を入れました。

 そう,この周波数カウンタは以前GPSを使って内部のTCXOを追い込んで,8MHzに大して0.1Hz以下にしたものです。そして同時に,手持ちの10MHzと9HzのOCXOもぴったりの数字にあわせ込んでいます。

 早速,この時あわせた10MHzと9MHzを測定してみます。電源投入後2時間ほどすると周波数も消費電流も安定してくるので,このあたりで数字を読みます。すると,

9MHz・・・9000.0014Hz(+1.4Hz)
10MHz・・・10000.0012Hz(+1.2Hz)

 となりました。また,今回手に入れたOCXOを測定してみると,

10000.0025Hz(+2.5Hz)

 となりました。

 うーん,すっきりしないなあ。この結果をどう見ればいいのか。考えてみることが訓練になるので,逃げずに考えてみましょう。

 まず,このズレが周波数カウンタのタイムベースと,被測定対象であるOCXOの,両方のズレに来ていることは否定できませんが,2つのOCXOの間のズレが0.2Hz程である事を考えると,タイムベース側のズレの方が大きいだろうと推測できます。

 で,仮に10MHzのOCXOが全くずれていないと考えて,誤差は10MHzに対して1.2Hzですから,0.12ppmです。TCXOの規格が2ppmですし,以前書いたようにこのTCXOは電源電圧の変動に弱いので,電源の安定度まで加味して0.12ppmというのはかなり頑張っている方だと思います。

 でもでも,これだけ頑張っているように見えても数字というのは残酷です。8桁の7セグメントLEDのうち,2桁が違った値を示していることのやるせなさたるや。

 これをきっちりするには,GPSDOを自分で作り,これをクロックソースとして周波数カウンタに供給するしかないでしょう。おや,ここにちょうどいいOCXOがあるじゃないか。

 以前書きましたが,GPS衛星に搭載しているクロックは10E-13くらいの精度が本当はありますけど,地上に届くまでに大気の揺らぎなどで10E-8くらいまで精度が落ちてしまいます。

 それでもまあ10E-8ですから大したものだと思いますし,10E-8といえば10MHzに対し0.01Hzであり,8桁くらいの周波数カウンタならこれでもう十分なわけですが,もっと上を目指そうと思えば,この誤差は蓄積せず長時間の平均を取れば取るほど小さくなっていきますので,1000秒の平均で10E-12,10000秒で10E-13まで理屈の上では追い込めることになります。3時間ほどで10E-13ですか。本当かなあ。

 まあ,0.2ppmくらいならもういいかなと言う気もしますし,GPSDOを作らずともOCXOベースでタイムベースを作ればいいかなとか,そもそも8桁では足りないのでこの際だから53131Aを買っちゃうか,などといろいろ考えているところです。

LCD8812K4-01のバックライトが暗くなった

  • 2016/06/06 15:41
  • カテゴリー:make:

 今年4月8日に,aitendoで売っているLCD8812K4-01を使った時計をここに紹介しました。この時計,非常に精度が良くて,2ヶ月経過しても目で見えるレベルでのズレがなく,ほとんど狂っていないと言っていい感じです。

 ・・・なのですが,5月の末くらいから,なんだか画面が暗くなっていることに気が付きました。いつも煌々と点灯したバックライトにクラクラしていたのですが,日に日に暗くなっていき,なんだか元気がなくなっていくペットを見ているような気分で辛くなってきました。

 最初は,キャラクタ側のドライバICを全く初期化しないで使っている関係でLCDに直流がかかったりして,LCD全体が劣化しているんじゃないかと考えたりもしたんですが,まあそんな馬鹿な話はなくて,新品のLCDを比べて見たところ明らかにバックライトの輝度が落ちていることが確認出来ました。

 LEDなら交換出来るしと,ちょっと安心したのですが,劣化した理由が気になります。

 疑わしいのは,電流の流しすぎです。電流制限抵抗が小さすぎる,もしくは入っていないという状況でよくおこる話なのですが,LEDの電圧を測定すると2.71Vとまあ問題はありません。(そうそう電源電圧は4.5Vとやや低めにしてあります)

 回路を追いかけると,LEDは並列に繋がっています。抵抗は100Ωの抵抗が並列になっており,トータル50ΩでLEDに直列に入っています。これが電源に直接繋がっていました。

 抵抗が並列になっているのは,おそらく電力の問題でしょう。この部分で32mWほどの電力を消費しますので,100mW定格のチップ抵抗1つではちょっと心配です。それで並列にしたんじゃないかと思います。

 LEDのVFにばらつきがないと仮定し,両方に同じだけの電流が流れているとすれば,4.5Vから2.7Vを引いた1.8Vが抵抗にかかる電圧です。ゆえに抵抗に流れる電流は36mAとなりますが,これがLEDに流れるわけですので,LED1つあたりは18mAとなります。

 あれ,VFが2.7Vで18mA?普通じゃないか。なんでこれで壊れるんだ?

 1つだけ壊れるんだったら個体不良でしょうが,2つ同時に同じ程度で劣化しているので,やっぱり使い方じゃないかなあ・・・でも,1つが壊れて電流が流れるようになったら,そっちに引っ張られてもう片側は電流が減るので暗くなるし,逆に電流が流れないようになったら,もう片側にたくさん流れて劣化するので,どっちにしても暗くなるのか・・・

 ということで,LEDの劣化を疑わず,交換をしてみました。交換したら確かに明るくはなったのですが,新品の頃のまぶしいくらいの明るさにはほど遠い感じです。おかしいなあと思ってさらに調べます。

 すると,電源に直列に入れているダイオードの両端の電圧が,0.8Vを越えていることがわかりました。

 いやなに,私はうっかり屋さんなので,逆接続で壊して泣き崩れてしまう事をしょっちゅうやらかします。それで電源にダイオードを入れることをよくやるんですが,ここに小信号用のダイオード(型番不明)を適当に突っ込んだんです。

 ですが,小信号用のダイオードですからね。改めて1N4148のデータシートを見てみると,50mA流せば順方向電圧は0.8Vを越えています。大電流用のダイオードはこのあたりがうまく調整出来ていて,電柱が増えても順方向電圧が低くなるように作られています。その代わり速度が遅いわけですが。

 不思議なのは,以前はこんなに暗くなかったんです。それに,はっきりした記憶はありませんが,ダイオードの電圧降下もこんなに大きくなかったことを覚えていて,もうはっきりしたことはわからないのですが,劣化した,壊れてしまったと考えるしかないんじゃないかと,そんないい加減な結論になりました。

 交換したLEDを元に戻し,ダイオードを外して電源を直結したのですが,確かに明るくなりました。なりましたが,かつての?活差にはまだまだ届かない感じです。やっぱりLED自身の劣化もあるんじゃないかなあと思います。

 まあこれで少し様子を見てみましょう。なんか最近,深追いするのが面倒で・・・

 ところで,LEDに並列に入っている謎のダイオード,向きは逆方向に入っているのですが,結局なにか分からずじまいです。ツェナーかなと思いましたが,ツェナー電圧まで上げるのはなんとなく怖いし,でも普通のダイオードを逆方向に入れても仕方がないと思うし,結局外観から判断出来ない部品ですので,分からないままです。

 おそらく静電破壊対策か高電圧保護用のツェナーではないかと思うのですが,別にいらんよなあと思った私は,外しておきました。

 しかしまあ,どうもすっきりしません。

 もともと中華製で,しかもaitendoでしか売っていないもので,その上そのaitendoが特価で売るようなものですから,まともなものと思う方が間違いなのですが,もし本当にこれがあきらかの不良品だとしたら,検査で不合格になったり,市場でトラブルが出た回収品を廃棄せずに横流ししたものだったりするわけで,ちょっとブラックな臭いがしますよね。廃棄したことにしてブラックマーケットに流してしまうと,横領とか脱税とか・・・なんかそういうややこしい話がついてまわりそうです。

 以前のジャンク品は新品なら品質は実力でほとんど問題なく,大人の事情で安く売られているだけというものあったのに,なんだか残念な話です。

 そういえば,ひところ偽物の電子部品が話題になりました。PC用のCPUで,クロックの低い安い物をリマークして高速版として偽る話も聞きましたし,希少価値の出ているトランジスタも,形がそっくりのものをリマークして売るとか,ひどい物だと耐圧の大きな電解コンデンサに見せかけるために,アルミの缶の中に小さなコンデンサを入れて偽装した物までありました。

 2SC1971という,三菱製の高周波用電力トランジスタがあります。50MHzで10Wくらいとれる便利なトランジスタで,メーカーやアマチュアを問わず多用され,当時は安価に供給されていた定番品ですが,ディスコンになってからはプレミアが付き,今は10倍にも20倍にもなっています。新品が手に入ればまだ良い方で,そういう事情に目を付けた悪い奴らが,偽物をばらまいて一儲けしているんですね。

 見た目はそっくりなものから,明らかに偽物と分かる物まで。差し替えればとりあえず動く「良心的」な偽物から,通電した瞬間にはじけ飛ぶどうしようもない偽物まで,それはそれはこの話だけで酒の肴になるくらいです。

 この手の偽物や不良品が市場に出てくる話は,特に半導体が供給不足になったときにはしばしば出てきた話で,古くは1970年代後半のインベーターゲームブームで訪れたTTLの不足,1980年代中頃のDRAM不足と,悪い業者が一儲けを企んできたわけですが,昨今の不良品や偽物騒ぎというのは,こういうものとはちょっと違っていて,明らかに悪意があるように思います。偏見かも知れませんが,偽装した部品が現役で,大量に使われるような物ではないのに,わざわざ形だけ似せた偽物をつくるんですから。

 今回のLEDが不良品なのか偽物なのかはわかりませんが,繰り返すように通常の使い方をして3ヶ月ほどで擦過してしまうわけですから,これが消費者の手に渡っていたらと思うと,ゾッとします。

VP-7722Aのファンを交換

  • 2016/05/25 13:26
  • カテゴリー:make:


 さて,2013年夏に修理を終えたオーディオアナライザVP-7722Aですが,次の機会にやらないといけない事の1つとして,間に合わせに取り付けた廃熱ファンを,正しいものに交換するというのがありました。

 以前書いたように,VP-7722Aには2つのファンが付いています。1つはCPUやDSPなどのデジタル部が格納され,厳重に封止されたアルミのケースに取り付けられたファン,もう1つは全体の熱を排熱するファンです。

 前者は60mmのファンで,元々付いていたものは25mmの厚みがありました。これは当時,何かに必要になるかも知れないと買っておいた新品のファンが偶然同じ寸法で,うまく交換出来たのです。(とはいえPC用でもなく,騒音に配慮しない産業機器用なので,とにかくうるさいです)

 腐っても一流メーカー製のファンですし,価格が1つ280円と安いこともあって偶然買った物が役に立ったわけですが,問題はもう1つの廃熱ファンです。

 これは80mmのファンで,元々の物は真っ黒なホコリが付着し,ベアリングからは異音が発生,風を切る音も爆音と,もう交換しないと落ち着かないレベルの物だったのですが,残念な事にこのサイズのファンは手持ちがありません。

 そんなに嫌ならPC用のファンを買って来ればいいじゃないかと思うのですが,当時の私はそんなことなど全く考えに及ばず,我が家のジャンク箱をひっくり返して,どういう経緯で手に入れた物か全く忘れてしまったのですが,とりあえず新品のファンを発掘してこれに交換したのでした。

 交換したとは言え,元のファンは80mm,今回見つかったファンは92mmですので,そのままでは取り付けできません。そこで後日80mmのファンを買って取り付けることにして,パネルに92mm用の穴を開けて,なんとか取り付けたのでした。

 ところがこれ,やっぱり強烈にうるさいのです。元のファンに比べれば静かですけど,それでもうるさくて,これでオーディオの測定なんか許されるのか,と思うほどなのですが,うっかり忘れていたりして,なかなか80mmのファンを買い直す機会がありませんでした。

 ですが先日地デジPCのメモリを買った時に一緒に,80mmのファンを買いました。PCパーツのファンというのは特別安いわけではありませんが,PC自作マニアの要望をとらえた,細かな売り文句が楽しいです。長寿命をうたうベアリングとか,羽根の形状を静音のためにチューニングしたとか,LEDで光るとか,辛抱防止で一体成型とか・・・

 ただ,大昔の話ですが,PowerMac7600を使っていた頃,電源ユニットに内蔵されていたファンを,当時流行しつつあった静音タイプに交換したところ,非常に静かになって快適だったことがあり,以後ファンは出来るだけ静かな物を選ぶ事にしています。

 さて,今回買ったのは「GELID Silent8」というもので,安いからという理由で選びました。

 ところが私が腰を痛めてしまい,とてもじゃないですがVP-7722Aと組んずほぐれつ格闘するのは無理,という状況が続いてしまい,ようやく先日になって,取りかかることにしたわけです。

 VP-7722Aを分解するのは,リレーを交換した時以来です。出来るだけ分解しないようにしてファンを交換しようと試みますが,リアパネルのファンの位置にはなかなか手が届かず,外すことはなんとか出来たのですが,取付は結局出来ず,最終的にはリアパネルを綺麗に取り外すことになってしまいました。

 取付が終わって試しに動かしてみると,十分な風量もあるし,とても静かです。これは快適ですよ。もう1つの60mmのファンの音が耳障りになったので,こちらも交換したいなあと思ったほどです。

 元通り組み立てて針運転。そしてラックに戻して動作確認です。問題なし。随分と静かになりました。

 いやほんと,長時間は辛いと思うくらいの騒音でしたので,せっかくのオーディオアナライザも使うのに躊躇していたのは事実です。でもこの静かさなら,気にしなくていいレベルです。よかったと思います。

 私のVP-7722Aは,左右でちょっと特性が異なります。基板を入れ替えても同じchがずれるので,どうもレイアウトかワイアリングによるものだと思うのですが,30kHzのLPFを入れれば内蔵発振器の歪率は1kHz,6dB時に0.00007%となかなか優秀です。80kHzのLPFを入れれば0.00036%となり,こちらもまあまずまずでしょう。

 残念な事に,オーディオ機器の自作をあまりしなくなってしまったので,かつて喉から手が出るほど欲しかった歪率計の出番が少ないのが寂しいのですが,こういうのは使いたい時が突然やってくるもの。そのいつかに備えて,平時のコンディションを維持することもまた大事な事でしょう。

 しかしなあ,この大きさと重さ,私がもし死んだらどうするんだろうなあ。残った人に迷惑かかってしまうなあ。

NASのHDDを入れ替えた

  • 2016/05/18 11:04
  • カテゴリー:make:

 うちで立ち上げているNAS,QNAPのTS-119P2は非常に便利で,これなしの生活はもう考えられません。HDDはWD REDの3TBを入れていますが,残りが1TBを切っており,そろそろ容量を気にして使わないといけなくなりつつあります。

 しかも,HDDは消耗品なので3年で交換するつもりだったのに,もう4年になるんです。これはまずい。全然壊れる気配がないので油断をしていましたが,4年間休みなく24時間運転しているHDDに生命線たるデータをてんこ盛りしてある現状は,まさに薄氷を踏む想いです。

 交換しないといけないのですが,同じ容量にするのは時間もお金ももったいないですから,ここは容量アップです。4TBがリーズナブルですが,増えた容量が1TBくらいでは面白くないですから,ここは6TBと行きましょう。

 WD REDの6TBも,少しずつ値段が下がっていて,amazonで安くなってきた頃を見計らい購入しました。27500円くらいだったと思います。

 これをどうやって3TBと入れ替えるか考えていたのですが,前回失敗したQ-RAID1で同期してから入れ替えるという作戦を,とりあえず今回もやってみることにしました。

 私と違い,うまくいったという話が散見されることと,前回の失敗は2TBから3TBに入れ替えるということが原因だったのではないかと思ったからです。3TBと6TBなら,管理領域もおそらく同じはず。ですから入れ替えも出来るのではないかと思ったのです。

 ダメならダメで,以前のやり方でやり直せばいいだけの事ですし,Q-RAID1ならNASを動かしたままでコピーがとれますので,丸2日以上かかる作業の間,NASを止めなくてもいいのが便利です。

 3日弱かかり,ようやくコピーが終わりました。NASを落として入れ替えます。あれ,なんか新しい6TBは振動がやたら大きいようで,大きな音がします。

 電源を入れて起動しますが,ステータスランプが点滅しており,起動できない様子です。これはもうダメですね。これが金曜日の21時頃の話です。やっぱりQ-RAID1で作った外部ドライブは,そのまま内蔵に入れても動かないことがもうはっきりしました。

 なら,前回と同じように,新しい6TBを内蔵し,新規にセットアップしてから,保存してあった設定情報を書き戻して3TBを外部ドライブとして接続,その後Q-RAID1からの書き戻しを行う事にしましょう。

 ・・・と思って,6TBを内蔵し,過去の設定で起動させて3TBを外部ドライブとして認識したところまでややったのですが,いくら探しても前回と同じような,Q-RAID1からの書き戻しを行うという機能が見当たりません。

 Q-RAID1のメニューから外部ドライブをQ-RAID1設定すると,初期化されてしまいますよと警告が出ます。前回もこんなだったような気がするな・・・とボタンを押してしまいそうになりますが,万が一という事もあるので,これは実験をして確かめてみましょう。

 手持ちのフリーの2TBをNASに詰めて初期化。小さいファイルを1つか2つほど書き込んで,新しく買った6TBを外部ドライブに接続します。そしてQ-RAID1を使って6TBでバックアップをとります。

 今度は6TBを内蔵し初期化。設定を書き戻して2TBを外部ドライブとして繋いで,Q-RAID1のボタンを押します。サイズが小さいので,数時間で結果が出ます。

 果たして結果は,2TBが6TBによって上書きされてしまい,これまでの2TBのデータは完全に消えてしまいました。

 いやはや,これをこれまで使っていた3TBでやっていたら,過去数年の膨大なデータを私は一瞬のうちにすべて失っていたことになります。背筋が寒くなりました。

 事ここに至って,もうQ-RAID1からの書き戻しは出来ないと判断し,手動でデータを書き戻すことにします。6TBを再度初期化,設定の書き戻しを行って3TBの以前のドライブを外部ドライブとして接続します。

 しめしめ,FileManagerでちゃんとファイルが見えています。PCを経由してコピーをすると随分と時間がかかるのですが,NASで完結してコピーが出来ると,高速でコピー出来るので,助かります。

 と,その前に完全に設定を復元しないといけません。QNAPのNASはパッケージをインストールすることで機能拡張が出来ます。私の場合,パッケージマネージャであるOptwareIPKGをインストールしてあり,ここからperlとdnsmasqをインストールしてありました。

 まずはOptwareIPKGを入れます。しかし,App Centerで検索をしても見つかりません。これは困った。google先生に聞いてみると,メンテナンスを終了したので,昨年秋頃にApp Centerでの公開も取りやめたという事です。Entwareというのが後継らしいのでこれをインストールしようとするも,App Centerにはないのでどっかのサイトからファイルを落としてきて,手動でインストールします。

 perlはApp Centerにあるのを確認したので,dnsmasqを入れようとしますが,Entwareでは見つけることができず,このパッケージマネージャではインストール出来ないことがわかりました。

 ならばとQNAP用のdnsmasqがあるのでは,と探してみたところ,あるにはありました。しかしうまく動かず。設定も反映されず,起動もしません。そこでこの線はあきらめました。

 どっかにOptwareIPKGがおちてないかと探しましたが,すでにリンクが切れていたりと見つかりません。それならばとWebarchivesで遡ってみたら,なんとまあダウンロード出来ました。ファイルの安全性なんてもう頭にありません。わらをもつかむとはこのことです。

 幸いなことにうまくOptwareIPKGがインストール出来ました。そしてdnsmasqも無事にインストール出来て,設定を変更後に起動し,きちんと動作することも確認出来ました。

 この段階で,土曜日の朝7時。なんと,この歳になって一睡もしない「完徹」をやってしまいましたよ。

 待ち時間で5分ほど寝落ちしたりしてはいましたが,作業のログを見るとちゃんと数分単位でなにをやったかが記録されています。本当に徹夜したんだなあと。

 まあここまで来たら,あとはファイルのコピーです。フォルダを作り直し,コピーをしていきます。この段階で朝8時。こんな時間から寝ると一日無駄にするので,もう起きていることにします。

 全部で12時間ほどでコピーが終わる計算になったのですが,悪いことにもう1時間ほどで終わるというところで,NASのDNSの設定を変えたところ,コピータスクが止まってしまいました。残念ですが,やりなおしです。

 ということで,翌朝にはすべての作業が終わっていました。問題なく動いているし,ファイルもざっと確かめたところ,ちゃんとコピー出来ているようです。4年間つ買ったとは家,まだまだ元気な3TBは万が一の為しばらくそのままにして保存して置きますが,そのうちバックアップ用途に使ってみようかと思っています。

 速度が上がったわけでもなく,ただゆとりが4TB近く出来たと言うだけの話ですから,今回はもう何度もくじけそうになりました。それよりデータを失う方が怖かったので,何度も3TBに戻して6TBは別の用途に使おうと思ったほどです。

 ところで,一連の作業を進めるうちに,Q-RAID1についての結論が出たので,ここに書いておこうと思います。

 Q-RAID1は,シングルベイのNASにのみ搭載される機能で,USBで繋いだ外部ドライブを使って,RAID1(ミラーリング)を実現するものです。

 QNAPの説明では,この外部ドライブを内蔵すれば,内蔵ドライブとして動作させることがそのまま出来るとあり。実際それが出来ているという人もいるようです。

 内蔵無理でも書き戻すことは出来るとか,それもダメだとか,google先生もいろいろな意見を引っ張り出してくるので,どれが本当なのかよくわかりません。

 で,自分の検討結果や,他の人の記事をまとめて,私なりの決着を着けました。

(1)Q-RAID1の外部ドライブを内蔵しても,内蔵ドライブとして動作しない。

(2)Q-RAID1の外部ドライブから内蔵ドライブへの書き戻しは,ファームウェアのバージョンが3.7くらいまでは可能だったが,4.0以降は出来ない。

(3)内蔵ドライブの入れ替えはQ-RAID1を使うと時間がかかって仕方がないので,新しいドライブを内蔵したら古いドライブをUSBで繋いでFileManagerで書き戻した方が早いし安全。Q-RAID1だと3日かかるものも,コピーなら12時間ちょっとで終わる。

 特に(2)については,以前自分が出来ていたので,出来ないよと言う意見を見る度に「ウソだ」と思っていましたが,これはファームのバージョンで来出る出来ないがあるんだとわかり,納得をしました。

 Q-RAID1は,rsyncを使ったミラーリングということがよく知られているのですが,確かに自動的に完全なバックアップが用意出来ていることの安心感は大きくて,そのためだけでも使う価値があるかも知れません。しかし,時間はかかるし,よくよく注意しないとデータを完全に失う可能性もあるので,私は怖いからもう使わないと思います。

 それより,信頼性の高いHDDを使う事と,本当に大事なデータは別にバックアップするという方が間違いないと思います。

 そうそう,今回大金を出して購入したWD REDの6TBですが,やっぱり振動が大きいです。筐体がぶるぶる振動して大変です。ブーンというかなり大きい音がしますが,REDってもともとこういう振動が信頼性を低下させるというので,振動を抑えた(管理した)というのも,売りになってませんでしたっけ?

 4TBで振動が大きいと嘆いた人は,初期不良で交換してもらい,交換品が静かなことに驚いたと言ってましたが,6TBでもそうなんでしょうか・・・面倒くさいのでもうこのままにしておきますが。

 次はまた3年。次の3年では,NASごと交換することになったりするかも知れないですね。

GPS時計の新作

  • 2016/04/20 11:42
  • カテゴリー:make:

20160420114356.JPG
 先日から取り組んでいたGPS時計ですが,ようやく完成しました。写真はブレッドボードで作った状態ですが,近いうちに基板にハンダ付けして,綺麗にまとめようと思います。

 今回はなかなか大変でした。

 まず,aitendoで買ったNEO6M-ANT-4Pというモジュールですが,これはu-bloxのNEO6Mというなかなか性能のいいGPSモジュールを搭載しているので,基本性能は抜群です。

 ただ,NEO6M-ANT-4Pというモジュールになると,バックアップ電池が死んでいて一晩放置するとCold Startになってしまうという問題がありました。

 ですので,GPS側の設定を変更しないといけないようなプログラムを書くことは出来ません。常に初期状態で立ち上がることを前提にしないといけないので,シリアルポートのボーレートは9600bps,センテンスの更新周期は1秒に1度,1PPSパルスは衛星をつかまえないと出てこないという制約で動くようにする必要があります。

 次の問題は,データが正しくデコード出来ないという問題です。1PPSで更新せず,センテンスをデコードしてそのまま表示した時には,発生しない問題でした。

 GPSからのデータは,テキストによるセンテンスで,UARTから流れてきます。メモリの小さいtiny2313ですので,UARTのバッファは64バイト程度と極めて小さいため,バッファがあふれる前にさっさと処理をしないとダメです。

 そこで,流れてくる情報を最小限の物にしたいところですが,これは前述の通りGPSの設定を変えないといけないですから,今回は出来ません。ログを見れば,かなり大量のデータが流れ込んでいますので,処理に手間取っているとリングバッファが1周して大事なデータが上書きされてしまいます。

 ですが,1PPSで更新をしないように作った場合には問題は出ず,1PPSでの更新を行うとデコード出来ない場合が出てくるというのは,ちょっと解せません。

 調べて見ると,実はLCDの表示に使っていた関数で,ウェイトが極端に長い部分がありました。5usでいいのに,1msも安全のためにとってあったんですね。

 で,1PPSで一気に表示を更新する時に,ここで100ms近くも足止めを食らってしまい,その間にデータが流れてくると,未デコードのデータが上書きされて失われてしまうのでした。

 これが,随時更新という形にすると,時刻と日付が別々に更新されるので,付加が平均化し,なんとか上書きされずに処理が間に合うようでした。

 ということで,ウェイトをぐっと減らして,この問題は解決です。

 そして最後は,1PPSとGPGGAやGPRMCというセンテンスが完全に非同期であるという問題です。先日もちょっと書きましたが,1PPSのパルスが出た段階で受け取っている最新の時刻情報が,1PPSの前の情報なのか後ろの情報なのか,不定なのです。

 1PPSは非常に正確であり,すべての衛星で完全に同期しています。ですから,この1PPSで表示を更新すれば非常に正確な時計が作れることは明白ではあるのですが,更新に使う時刻情報が1PPSよりも過去のものなら1秒加算しないといけませんし,1PPSの未来の情報なら,そのまま更新に使わねばなりません。

 私は,未来の情報が出てくるなんてことはないだろうと思っていましたから,更新時には1秒加算した時刻で更新することにしていました。これで問題がないように思ったのですが,電源を入れて衛星をつかまえた最初のうちは,1秒進んでいる事に気付いてしまったから大変です。

 しばらくすると1秒進むのが解消され,正確な時刻になっているのですが,どこで変わってしまったのかわかりません。じーっと見ていても変化せず,気が付いたら変化しているという苦しい状況で,なかなか尻尾をつかめません。

 対策は,1秒加算するかしないかで条件分岐すればいいんですが,問題はその条件がわからないことです。GPGGAなりGPRMCで出てくる時刻の情報は,最初は未来のものなのですが,しばらくすると過去の物になります。すぐに変化することもあれば,長い間変化しない場合もあり,しかも変わったことがセンテンスからはわかりません。

 そもそも,プログラムにとって,時刻の情報はGPSから出てくる物がすべてですし,これしか時刻情報を持たない以上は比較も出来ず,結局のところGPSから出てくる時刻を信用するほかありません。その時刻が,いつの間にか過去になったり未来になったりするんです。

 ははーん,これはGPGGAやGPGMCの時刻情報のうち,1/10秒や1/100秒に違いがあるんじゃないか?

 そう思って見てみたのですが,どちらも小数点以下は00です。数年前に使ったGPSモジュールでは,ここが.99になったり.00になったりしたので,きっと今回のモジュールもそうだと思っていたのに,ダメでした。これは使えません。

 なら,つかまえた衛星の数と相関があるんじゃないか?

 残念ながら,相関はありませんでした。4個でも11個でも,未来から過去に突然切り替わります。

 なら,1PPSの有無に相関はないか?ありませんでした。

 うーん,じゃステータスがVなら未来,Aなら過去なんじゃない?違いました。

 うむむむ,じゃ,情報の信頼性(DOT)の数値に相関は?

 この数字は,Cold Start直後は99.99で,衛星をつかまえて時間が経過するとどんどん小さな値になります。1.00以下になったら過去になるとか,そういう相関があるのではないかと,シリアルポートに繋いでダラダラと記録したログを頑張って見てみましたが,残念ながら相関はなし。

 このままでは,表示されている時刻のうち,1秒があっているのかあっていないのか,わからないままになってしまいます。せっかく衛星をつかまえている限り狂うことがない正確な時計を作ったのに,1秒が信用出来ないなんて,話になりません。

 これだったら,1PPSで更新しないで,センテンスが出てきた瞬間に表示をした方が,まだ正確です。この方法だと未来かも過去かも知れませんが,ずれは1秒以内のはずですから,1PPSで更新する方が状況は悪いです。

 悔しい。やっぱりGPS時計は無理なのか・・・

 とにかく,頑張ってログをとり続けます。そして,変化したことが分かった時点でログを解析します。

 そうすると,1秒に1回送られているセンテンスに書かれている時刻が,2回続けて同じ時刻になっている箇所が見つかりました。1秒に一度なのに,2回同じ時刻が出てくれば,そりゃ1秒遅れてしまいます。

 よく調べてみると,電源を入れて衛星をつかまえた直後は,やっぱり1秒未来の時刻が出てきます。しばらくすると,ほぼ現在の時刻に一致した周期で,時刻が送られてきます。

 変化するタイミングは不定で,いつ切り替わるかわかりません。また,過去の時刻に切り替わったとしても,ほぼ現在時刻に一致していて,これをそのまま表示しても違和感はないんじゃないんじゃないかと思うくらいです。

 でも,とにかく同じ時刻が2度続いてきたことを検知できれば,時刻が未来なのか過去なのかがわかります。

 そこで,1回前の秒のデータを残して起き,今回の秒と比較をして変化していない場合には,以後の時刻データは未来の物から過去の物に切り替わったと判定し,1秒加算することにしました。

 この対策の問題点は,Hot StartやWarm Startの場合には,電源投入時にすでに過去の時刻に切り替わっているかも知れないので,変化を検知できないということです。

 もちろん,同じ時刻が二度続けば1秒加算することになるのですが,1秒加算しないといけない「過去の時刻」が電源投入時から流れてくると,加算する条件がつかまえられずに,ずっと遅れたままになってしまうわけです。

 これを防ぐ為には,なからずCold Startで起動する必要があります。ん?電池が死んでいるのは,かえって好都合なんじゃないのか?

 ただ,どんな場合でも,同じ時刻が2回続いた時には,これはもう確実に過去の時刻であることがはっきりしますから,1秒加算された状態である事が画面に表示されていれば,その時刻は信用出来るということになります。消えていれば,1秒ずれている可能性があるということですね。

 もう1つの問題は,一度過去の時刻に切り替わったあとは,もう二度と未来の時刻を出すことはないという前提になっていることです。当然,未来の時刻を出すように変化することもありえるとおもいますし,その場合には,時刻が1回前のものと比べて,2秒進んだことを検出出来ればよいだけです。

 このコードを組み込んでみたのですが,実際に動作したことがないので,正しいかどうかはわかりません。

 ということで,問題点がなんとか解決しました。

 基本構造は,センテンスのデコードを行い,得られた情報のうち衛星の個数やステータスは随時,時刻と日付については1PPSで更新を行うというものです。

 1PPSはINT0で割り込みをかけます。UARTでも割り込みを使いますが,AVRの場合は割り込みの優先度は固定で,優先度を変えたければ割り込み要因そのものを見直すということになりますが,今回は1PPSの優先度を上げたので,上位のINT0でいきます。

 Cold Startでは,衛星をつかまえないと1PPSが出てきません。1PPSでしか画面を更新しないと,ずっと画面が固まったままになるので,ステータスがV(つまり1PPSが出てこない)時には,随時更新されるようにしておきます。

 また,立ち上がった直後には時刻情報がでたらめですので,時が24以上になったり,月が13以上になっている場合には不正と見なして,時刻や日付を0でリセットします。

 タイムゾーンは悩みました。メモリサイズの関係もあり,日本標準時に固定してあったのですが,頑張ってあいたポートにスイッチを繋いで,変更出来るようにしようと思ったのです。

 ですが,プラス側の補正はこれまで通りとしても,マイナス側の補正にするとまた日時も調整をし直すコードが必要になったり,調べて見ると時差って1時間単位じゃなく,30分単位だったりして,コードがあふれてしまったのでやめました。

 とりあえずタイムゾーンは+9で固定とし,補正値を画面に出しておくことにとどめました。

 で,かなり不細工でお恥ずかしいのですが,以下がソースです。

続きを読む

ユーティリティ

2026年04月

- - - 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 - -

検索

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

ユーザー

新着画像

過去ログ

Feed