2016-02-07
秋月電子で販売していた電波時計。これは既に販売終了している。新型は受信基板が分離されている。当方が購入したキットの中で唯一動かせなかった物。先ず動かない原因を探る。ネットを検索すると感度が低くてダメな報告がかなりある。現行商品の回路図を見てみたが受信部は変わっていない様子
波形にノイズが入る。アンテナがダメと言うことはたぶん無いので水晶が怪しい感じ。電波が弱いと言うことも考えられるが転居のたびにテストして動かなかったのでこの可能性は低い。4地点で偶然電波が弱い確率はゼロに近いはず。電圧が4.2V程度になっているのはトランジスターの出力側で計測しているため。
矢印がノイズ。たぶん
こんな風になってしまうことも
電波受信IC->トランジスター->PICの経路で信号が流れるがトランジスターの使い方ちょっと変なので電圧が下がっている。機能上は問題ない。上の波形はTP1で計測。C8,C9が意味不明な図になっているが2つのコンデンサを上下接近させすぎて書いているのでくっついてしまっているだけ。寸法の違うコンデンサを取り付けられるように片側は2つパターンがあるので3端子になっている。トランジスターは2SC1815とあるが実際のキットは2SC1213
ノイズ発生源になるICを外してテスト
ノイズが無くなった気がする。新バージョンで基板が分離されたのはこれが理由か
AC100Vをスイッチングさせているネオン管時計を近くに置く。ネオン管のスイッチング周波数は1kHz付近
ノイズが入る
2016-02-08
回路図とキットの部品が違っている2SC1213。特にこれと言った特徴は無し。低周波用。これは関係なさそう
とりあえずarduinoでデコーダーを作ってデータをダンプしてみたが使い物にならない。95%程度正しいというレベルではダメで100%正確に受信できないといけない。1秒間隔で0.2,0.5,0.8秒のいずれかのパルスが出力されるので0.35秒、0.65秒を閾値として信号をより分けている
0001 unsigned char prev;
0002 unsigned char current;
0003 unsigned long c_time;
0004 unsigned long p_time;
0005 unsigned long d_time;
0006 unsigned char prev_code;
0007
0008 void setup() {
0009 p_time = 0;
0010 prev_code = '0';
0011 pinMode(7,INPUT);
0012 Serial.begin( 9600 );
0013 }
0014
0015 void loop() {
0016 current = digitalRead( 7 );
0017 if( prev != current ) {
0018 c_time = millis();
0019 if( current == HIGH ) {
0020 d_time = c_time - p_time;
0021 if( d_time < 350 ) {
0022 if( prev_code == 'M' ) {
0023 Serial.println( "" );
0024 }
0025 Serial.print( "M" );
0026 prev_code = 'M';
0027 } else if( d_time < 650 ) {
0028 Serial.print( "1" );
0029 prev_code = '1';
0030 } else {
0031 Serial.print( "0" );
0032 prev_code = '0';
0033 }
0034 }
0035 }
0036 prev = current;
0037 p_time = c_time;
0038 }
データシートを見るとC2(キットではC8)の値が違う。ローパスフィルターらしいのだがキットは0.1μFのフィルムコンデンサを使っている。フィルムコンデンサの周波数特性は悪かったと思うが良いのだろうか?
0.1μを取り外す。配線がかなり大回り。40kHz程度なら問題ないと思うが遠回りは無駄な感じ
0.22μFは在庫していなかったので0.1μFを2個並列にするつもりが間違えて直列
何故かこれで正常受信できるようになった。ローパスフィルターのコンデンサを小さくしたのでより高い周波数を通すようになってしまったはず。電波の状況は時間帯によってかなり違うのでしばらくテストを続ける
C8をいろいろ変えてみた。0.022μFは茶色いセラミック。それ以外は青い積層セラミック。コードは負論理のようなので波形は反転してある
0.1μF 2個並列 全然ダメ
0.1μF 1個 少し歯抜け
0.047μF 1個 良好
0.022μF 1個 ノイズ多し
実測値。0.047より0.1μF2個直列の方が感度が良いので理想値は0.047~0.1μFの間にある
0.047μF 実測 0.0455μF
0.1μF 2個直列 0.057μF
プログラムを少し改造。受信状況が悪いときは E を表示するようにした。立ち下がりの間隔が950~1050msecに収まっていないとEを表示する。0.1μF2個直列だとバーアンテナの感度が一番低い方向以外は正常に受信できる
9時頃から受信できなくなったり一定パルスがくるだけで不安定になった
偶然停波の時間帯に当たったようだ....と思ったらしょっちゅう停波している。何ページスクロールしたら一番下まで見えるんだ。HTMLをダウンロードし文字列検索で集計したら841時間1分1秒。延べ日数にすると35日。昼間の時間帯に工事しているようなので日中に限ると確率1/4程度で停波していると思って良い。工事は連続して行われることが多いようなので運が悪いと1週間くらい昼間は電波を受け取れない。いいのかこんな運用で?福島の原発の近くで震災の時は停波していたらしいが地震が有っても無くてもたいして変わらない。独立行政呆人が運用しているらしいのでまともな運用にはなりそうも無い
2016-02-09
C8を変更したらPICを戻しても受信してくれるようなのでプログラムを作り直し。電波の状態をダンプできるようにした。SP232は外したまま
プログラム書き込み端子を追加。PICKIT2でオンボード書き込みできる。下段がビット列。上段はエラー。正常の場合は日時
水晶を交換。19.669MHzから正確な1秒は作れない(たぶん)ので20MHzに変更。きりが良い値ならTimer2を使えば正確な1秒が作り出せる
LEDは受信進捗状況。眩しいので輝度の低い緑に変更
水晶の外側ケースとビア経由でパターン干渉しているスイッチはいらないので除去。タクトスイッチはこの丸い銅板(たぶんリン青銅)がバネ兼接点になっている
2016-02-11
バーアンテナは特注品のようなので市販品を調べてみた。C-MAX社(DigiKeyに有り。但しMOCが100個)の物は コイル2.3mH コンデンサ0.0068μF。このキットは コイル585μH(共振周波数からの推測値)コンデンサ0.027μF とだいぶ異なる。キットの物はAMラジオのバーアンテナに近い
2016-02-14
バグが有るかもしれないがこれで完成
================================================================================
作り直したプログラムの仕様
================================================================================
・年は毎時15分と45分の1時間に2回だけ送られてこない
この時年表示は ?? となる
信号は時刻とは無関係になるため読み飛ばす。この間下段には -SKIP SIGNAL- と表示
・データは受信直後にデコードして表示
年のデータが日付の後に送られてくるので月日は年を受信しないと確定しない
年を受信しないと閏年の判断が出来ないため閏年で無い時の暫定値を表示し年を受信した後に閏年を考慮した月日を上書き
分以外のデータは書き換わり頻度が少ないので次のデータを受信する直前に一旦 "--" 表示にしている
・0.2秒のパルスが2回連続して受信できたらそれをゼロ秒としているため実際の時刻より秒表示は1秒遅れる
・LEDは
信号に同期して TCO点滅 TCOの点灯時間はパルス幅で変わるため1秒置きにデータが来ていることが解りにくい
TCOの点灯時間を強制的に 0.1秒に にしているのが ALM2 信号が正常に受信できれば 1秒間隔で点滅する 電波の状態が悪いと大抵は早く点滅するようになる
エラーが発生したとき s点灯
エラー無く 分データ を受信完了したとき m点灯
エラー無く 時データ を受信完了したとき h点灯
エラー無く 延べ日数の上位データ を受信完了したとき M点灯
エラー無く 延べ日数の下位データ を受信完了したとき D点灯
エラー無く 年データ を受信完了したとき ALM1点灯
1カ所エラーを起こすと後続のデータが信用できなくなるので再度マーカーを見つけるまでデコードはしない
エラー以降マーカーを見つけるまでLEDは点灯しない
・閏秒は無視
・パルス幅
0.35秒以下 のパルスをマーカーおよびポジションマーカーと判断
0.35~0.65秒のパルスを1と判断
0.65秒以上 のパルスを0と判断
・対応しているエラー
-常にゼロであるはずの値がゼロ以外
-パリティー
P1にエラーがあったとき:分を ** 表示
P2にエラーがあったとき:時を ** 表示
-マーカーやポジションマーカーが所定の位置に無い
該当するLEDが点灯しない
-信号のパルス間間隔が950ミリ秒~1050ミリ秒に収まっていない
下段に E を表示
・液晶2段目の表示
M:マーカー
P:ポジションマーカー
E:エラー
1:符号1
0:符号0
・上段一番右は曜日 0:日曜 1:月曜 ....
===================================
JJYのフォーマットについて
===================================
・日時の送信には丁度1分かかる。送信開始時点ではその時の時刻であるが送信完了時には1分前の時刻となる
・年は西暦下2桁
年は毎時15分と45分の1時間に2回だけ送られてこないため運が悪いと正確な日付を得るために3分かかる
XX時14分01秒に電源を入れると約1分後のXX時15分00秒にデータの頭出しが完了、15分なので1分間は年データを得られず年月日確定せず、XX時16分00秒から受信開始、XX時17分00秒に日付が確定する
・月日は1/1からの通算日数で表すので計算しないと月日はわからない
・数値はBCDコード。BCDコードは計算しなくても文字列に変換できるのが良いところなのだが1分前の時刻が送信されてくるので現在時刻を表示するために計算が必要になるという間抜けなことになっている
・1分待たないと時刻がわからない点を除いて各国独自の日付フォーマットになっている
・電波は強弱が変わるAM方式
・タイムコード表
JJY タイムコード表 通常時
JJY タイムコード表 呼び出し符号送出時(毎時15分、45分)