前回までで、3つの状態(M,0,1)のパルス幅を定義出来た。
今回はそれを使ってビット列の評価を行うところ。
60秒で60bit(1pps)のデータを受け、それが1データとなる。
データはビットシフトを使って最下位ビットに判定結果を入れる方向で
実装してみた。
表現される状態が2より多いため、2値で表現する事が出来ない。
そのため、64bit幅(longlong)の変数を2本用意して
ビット方向に同期させている。
longlong JJY_DAT … 1の条件:”1″ , 0の条件:”0″or”M”
longlong JJY_MKR … 1の条件:”M” , 0の条件:”1″or”0″
と、2つの変数で、それぞれ1/0のもつ意味が異なる。
MKRの方はマーカ(M/Pn)が”有る所”を”1″にする。
DATは、データの”1″が有る所を”1″にしている。
つまり、データ”0″は、MKRが”1″ではなく、かつDATが”0″の所
…という事だ。
マーカの来る位置というのは既知なので、全60bitの中で
マーカが来るはずの所全てを満足する条件をMKRからひたすら探す。
条件に合うタイミングで、DATを取り出すと、既知のデータが
取り出せる。 と、こういう訳だ。
取り出した結果がこれ。
>33 , 779 mSec
>19 , 218 mSec
>Zero!! ——————— (23:18分ジャスト)
>Minute Parity(PA2) OK
>Minute : 17
>9 , 245 mSec
>978 , 808 mSec
“Zero!!”というのが、マーカ照合が通った所。
これは正分(0秒)を示していて、ここから次のデータが始まる。
始まりを検出というよりは、終わりを検出しているので
分データはリアルタイムと比較すると1分過ぎた値を示している。
時データと、分データにはパリティがあり、パリティの照合を
行った上でデータとして採用する事にしている。
取り敢えず、分の取得が出来たので、年、日、時、分、曜日の
全データをデコードして表示してみようと思う。
Comments