電子工作を楽しむ掲示板
電波時計の実験 - Shuji009 URL
2012/08/03 (Fri) 14:57:12
夏風邪を引いてだるだるになっていますが・・・
電波時計を実験しています。
整時については、自分で作ってみました。
i2cについては、そら。さんが作成された電波時計
のプログラムに同梱されているものをそのまま使用
させていただいておりますm(_ _)m。
液晶は、ストロベリーリナックスのI2C液晶です。
電波時計そのものは、Aitendoの60kHzをそのまま使用。
尚、ベランダでの撮影です。暑い・・・。
Re: 電波時計の実験 - そら。 URL
2012/08/03 (Fri) 15:52:13
おぉ〜。デコードできていますね。さすがです。
得られるタイムコードは結果的に1分前なので+1分がちょっと面倒ですよね。
なので私のプログラムでは得られた時刻が59分だと破棄してもう一度タイムコード受信動作にしています。(^_^;)
Re: 電波時計の実験 - Shuji009 URL
2012/08/03 (Fri) 16:11:18
そら。さん、どうもです。
> 得られるタイムコードは結果的に1分前
私の方法は、-1秒から同期を始めて58秒で同期が
終わる方法にしています。
ので、+1分していません。 xx分59秒から、とりあえず、動作させています。
その直後0秒のMの途中で、実際の同期を取る必要があるのですが、
まだ作っていません(汗;)。
しかし、i2c.cは、使い勝手いいです。ありがとうございます。
Re: 電波時計の実験 - そら。 URL
2012/08/03 (Fri) 16:53:43
> 58秒で同期が終わる方法にしています。
なるほど、その手がありますね。
その方法利用させて頂きます。
Re: 電波時計の実験 - そら。 URL
2012/08/03 (Fri) 21:31:50
58秒でタイムコードのデコードを完了して、59秒目でRTCに設定するようにしてみました。
これで桁上りはRTCに任せられるので楽ですね。
私の場合は、58秒目で950msワンショットタイマをかけてそのタイムアウトで59秒でRTCに設定しています。
JJYの信号ではなくワンショットタイマにしたのは次のJJYのタイミングを受信できるとは限らないからです。
また、1秒ではなく950msなのは電波時計モジュールの遅延を考慮してです。
とりあえず、そんな方法で時報とLCDの秒表示の目視確認では同時に見えました。
Re: 電波時計の実験 - Shuji009 URL
2012/08/03 (Fri) 23:19:34
そら。さん、どうもです。
流石、仕事が速いです。
私も0秒のMには、拘らずに、やってみる方向で考えてみます。
Re: 電波時計の実験 - そら。 URL
2012/08/06 (Mon) 15:22:16
http://www.aitendo.com/product/5029
http://www.aitendo.com/product/5030
40kHz専用と40/60kHz切り替え版が出ました。(^_^;)
Re: 電波時計の実験 - Shuji009 URL
2012/08/07 (Tue) 09:10:44
おはようございます。
まだ40kHzの水晶とか入手していませんので、
>http://www.aitendo.com/product/5029
>http://www.aitendo.com/product/5030
注文してみます。
うち(大阪府枚方市)は、距離的には60kの方がやや近い
って程度なので、40kHzでもなんとか受かるかも?
Re: 電波時計の実験 - Shuji009 URL
2012/08/08 (Wed) 11:22:08
Aitendoから40kHz版届きましたので、実際に受信実験してみました。
結論から言うと、40kHzでは、外でも受信できませんでした。
ので、「電波時計用JJYシミュレータ」で、試験してみたところ、無事受信できましたので、初期不良品ではなくて、一安心ってところです。
JJYシミュレータでは、簡易アンテナをつくっての受信が基本ですが、パソコンの内蔵スピーカ付近でも受信できるということですので、私は、外部スピーカをアンテナ近くにおいて試したところ、安定した受信ができました。
ピーピーピッ・・・という音も聞こえているので安心です(汗:)。
Re: 電波時計の実験 - Shuji009 URL
2012/08/08 (Wed) 13:30:07
そら。さん、どうもです。
写真にありますように、 472とかかれておりますので、
4700pF(4.7nF、0.0047uF)です。
Re: 電波時計の実験 - そら。 URL
2012/08/08 (Wed) 14:48:00
随分と容量が小さいですね。
それだとバーアンテナのインダクタンスは3.3mH程度の計算値ですが、見た目ではバーアンテナは今までと大差無さそう。
まぁ、シミュレータで動作していることから問題は無いのでしょうけど・・・
Re: 電波時計の実験 - Shuji009 URL
2012/08/08 (Wed) 16:42:46
そら。さん、どうもです。
定量的なデータでなくてすみません(汗;)が、
バーアンテナ、40kHz版の方が、太め(長く線を巻いているように)に見えます。
Re: 電波時計の実験 - そら。 URL
2012/08/08 (Wed) 17:38:08
確かにaitendoの商品写真でも40kHz版とデュアル版のバーアンテナは巻が多いように見えますね。
データシート通りのインダクタンスになったのかな。
aitendoに注文する機会があったら40kHz版を注文してみます。
Re: 電波時計の実験 - Shuji009 URL
2012/08/08 (Wed) 22:54:12
40/60kHz切り替え版も購入しましたので、これも簡単な試験をしています。
個体差があるかもしれませんが、私が入手したものは、残念ながら、外での受信はできませんでした。
JJYシミュレータですと、受信できましたが、40kHz専用版に比べて、安定性が悪いようで、少し苦労しました(もっとも、アンテナを作っていませんので、それが原因かもしれません)。
コンデンサは、大きさの小さいチップコンがついています(容量不明)。
アンテナの巻き数は40kHz版と同じくらいに見えます。
と、定量的なデータが無くてすみませんm(_ _;)m。
Re: 電波時計の実験 - caskaz
2012/08/09 (Thu) 21:00:13
こんばんは
電波時計の時計は僕も2年半前に作ったことあります。
ところで「-1秒から同期を始めて58秒で同期が終わる方法にしています。ので、+1分していません。」
ってどういう方法ですか?
僕はオンキヨーのチューナーに着いてた電波時計モジュールの出力信号(パルス列が出力されます)使ってデコードしてました。まずマーカーを見つけて1秒後とにパルス時間巾から1,0,P0〜P5判定して次のマーカーパルスの立ち上がりで+1分して時刻設定してました。
時計動作もさせながらrtcは使わず常時電波受信して受信成功する度に時刻校正してました。
もちろん電波受信に失敗すると校正できないので時計はどんどんずれていきましたが。
今は使ってませんが実験してた時は40kHz/60kHz両方とも受信できてました。(こちらは1階屋内 守口市です)
Re: 電波時計の実験 - Shuji009 URL
2012/08/09 (Thu) 22:58:45
caskazsさん、どうもです。
私が書いたコードは、以下のような感じです。
マーカは、59秒と0秒とに連続して出てきますので、59秒の方をスタートとして1秒毎に来る"M","0","1"をバッファに
読込んでいきます。
データが正しければ、Mと一部の0は、固定位置に来ますので、それをチェックします。もし違っていたら最初に戻ります。
途中でパリティチェックをして、パリティエラーだったら、やはり最初に戻ります。
そうやって58秒のデータまでを受信します。
58秒でのデータは、"0"ですので、実際にデータの正当性が判るのは、約58.8秒位に、「現在」の(年月日)時分が取得されますので、59秒付近で、RTCに、現在の年月日時分+「59秒」をセットしています。
0秒で処理をすると、例えば、12月31日23時59分とかだと、+1分処理も面倒になるので、RTCに丸投げをしています。
具体的なプログラムは、無茶苦茶単純で、こんな感じです。
while(Lp < 60) {
while(Lp == 0) ;
while(Lp == oldLp);
oldLp= Lp;
order = Lp - 1;
c = logbuff[order] + '0';
switch (order) {
case 0 :
case 1 :
case 10 :
case 20 :
case 30 :
case 40 :
case 50 :
if (c != 'M') Lp = oldLp = 0;
break;
case 5 :
case 11 :
case 12 :
case 15 :
case 21 :
case 22 :
case 25 :
case 35 :
case 36 :
case 56 :
case 57 :
case 58 :
case 59 :
if (c != '0') Lp = oldLp = 0;
break;
case 37 : // parity hour
if (jjyPAR1_H != c - '0' ) Lp = oldLp = 0;
break;
case 38 : // parity minute
if (jjyPAR2_M != c - '0' ) Lp = oldLp = 0;
break;
default :
if (c == '?' ) Lp = oldLp = 0;
} //end of switch
----------------
(げっ・・・間違っている・・・汗;)
------------------
+1秒と書いていた部分を+1分に訂正しました
Re: 電波時計の実験 - そら。 URL
2012/08/10 (Fri) 07:51:44
Shuji009さんの方法を知って、マーカーを含めて58ビット(58秒)のデータが揃ったらタイムコード確定にしました。
私の場合は、59,60ビット目は無視して59秒目でRTCに設定しています。
Re: 電波時計の実験 - Shuji009 URL
2012/08/10 (Fri) 10:04:38
プログラムを組んだ後に、ChaNさんの昔の製作記事を見ていますと、
http://elm-chan.org/works/jjyclock/report.html
の最後部分
「その時刻をリアルタイムカウンタにセットして秒を59にセット、即時秒インクリメント処理して」
・・・流石です。F/Wは、アセンブラですので、具体的にどうやっているのかは、見ていません{汗;}。
-----------------------------------------
蛇足ですが、+1分しないメリットは大きいです。
電波時計も使用中のRTCも、数値表現はBCDです。
もし+1分処理をするなら、年月日、時分をバイナリ
とBCDの相互変換が、必要となり、プログラムが増大します。
が、+1秒処理がないと、そういった処理も不要ですので、
プログラムはコンパクトになります{私の実験プログラム
だと、それに気がつかず、bin2BCD.BCD2bin処理をやって
しまっていますが・・・汗;}。