周波数カウンタにトライ
以前から「PICのプリスケラは早い物が付いている」のを噂では知っていました。どうも10MHzの水晶を使った物は約18MHzがMax周波数と聞かされていました。
いちどプリスケラを全部使って3月頃試した所、36MHzぐらいまで数字が出て来ました。その後別の基礎実験が忙しく進展させず今日に至っています。
最近再度試すとPIC(16F648A、たぶん16F84Aも同じ)本体のみで54MHz辺りまで作動(表示が少しふらつき、完全ではない)しています、この辺まで伸びているんですね(この件もっと伸びているようなので、再度チエックしたいと思います)。お蔵入りしていたカウンタを出してよく見ると、本やあちこちの情報だと「13ステップ」でカウントアップするのが常識になっています。
私も初心者なので始めは物まねでやって見ると、なるほどそれなりに作動しました。
でもCarryの所でどうも一ついらない感じがしたので削除して試して見ました。結果は今の所正常に動作しています「問題が出て来たら戻せば良い」ので削ったものを現在使っています。13ステップではなく12ステップ!
プログラムを見ると、加算命令で桁上げのCarryが立っているのに、新たに取り出しているのでもしかして不要では!と思いました、そこで次のプログラムを試して見ました。ADDWF BYTE1,F ;BYTE1+T0IF ;ここで既にCARRYは発生したり、しなかったりしている。 (ADD命令はCarryを含めて加算しない、わざわざ抜き出さないと加算出来ない為次の処置をしている。) RLF BYTE1,W ;* CARRYを取り出す作業 ANDLW 1 ;* ADDWF BYTE2,F ;* CARRY分の加算 . ;BY JA1HWO btfsc STATUS,C ;* incf BYTE2,F ;* CARRYがあれば+1加算[*]の3つのコマンドは下の2つのコマンドに置き換えられる。従って、13コマンドは一つ減って12コマンドになります。
もし、このプログラムを使っている方はNOPを入れてステップ数を合わせて動くのか試して下さい、たぶん作動するはずです。
但し、欠点としてBYTE3を作って32bitにする場合、Carryが立たないので桁上げが出来ません(INCF/DECFコマンドではCarryは立ちません)。
水晶発振の限界!
基準として、水晶発振を使いますが、これだと6桁程度の精度しか取れません。従って、数字が出ても絶対精度は限界で意味が無くなります。
ただ、増加や減少の目安としては使えると思います。一般にそういわれるのですが本当でしようか、試して見ました。
水晶27MHzのオバートーンの基本波発振の場合です(デイップメータで発振させた)。9.04326MHzの表示がカウンタに出ている場合、指で水晶をつまみ体温で温度上昇をさせます(室温21℃)。
すると周波数はどんどん下がって9.04317MHzまで下がりました、室温と体温の差が無いと変化しないと思いますが結構動くとは思いませんか。もちろんもっと温度安定度の良い水晶があるとは思いますが、今回の実験は現実の一つです(ドライヤなどで強制的に加熱すると極端に変化すると思います)。手づかみの実験では約1/100.000ぐらい変化しました。これから普通の水晶は「5桁程度しか安定が保てない」ということが分かりました。私は今回のPIC発振には温度を安定をした水晶発振器を使っています、スイッチを入れ(5分程度か)暫くするとほんのり温まります(秋葉原では数百円で買えます)。
動くのは剥き出しの水晶です、基準の水晶も10MHzなのですが温まるまで0.00004MHz程度動きます。温度が安定するとしっかりしますが始めはこちら(基準)も動くのです。水晶発振周波数の動きは今まで気にしませんでしたが、よく見ると結構動くものです。あながち周波数は6桁程度という話はでたらめではないようです。
従って、8桁表示にしても後ろの桁はあまり意味が無い感じもします。アマチュア無線自作の場合5MHz代のVFOで100Hz台は十分安定に表示出来ますが、10Hz台表示はかなり気合を入れないと少し怪しい数字になりかねません。出来れば、温度コントロールをしたい所です(ただ電気を食います・5V20mA以上)。
「桁表示もほどほど!」という所でしょうか、でも分解精度が100Hzや50Hz表示なら温度コントロールするほどの事もないと思います。
我が家みたいに夏はうだるような暑さになり、冬では氷が張る感じの所では細かい調整をすると季節の度に再調整が必要になります!2007/MAY/24
もどる [MAIN MENU]