エントリー

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

AVRtiny13Aでつくるシリーズ2 LMT01を使った温度計

  • 2016/03/30 10:50
  • カテゴリー:make:

 秋月の少し前の新製品に,TIのLMT01という温度センサICが登場しました。面白そうだったのでそんなに安くはなかったのですが,買ってみました。

 デジタル式の温度センサなのに,わずか2端子で電源の供給から測定値の送信までやってしまうという,なんだかよく分からないセンサなのですが,使いやすさ向上のためにピン数を減らして行く過程で,いつのまにやらピン数を減らすことが目的にすり替わり,使い勝手はむしろ悪くなっている事に気が付かないという,賢い人がよく陥る罠を地で行っているICだと思います。

 まあ,本来の目的そっちのけで,意地になって違う道を追い続けるという姿勢は,私は嫌いではありません。

 このIC,測定値をパルスの数にして,消費電流の変化で出力します。考えましたね,消費電流の変化とは。

 元々の消費電流が極めて小さいので,抵抗を挟んで電源を供給しても動いてくれます。その抵抗の両端に発生する電圧をつかまえれば,パルスの数を数えることができますね。でも,数を数えるといっても,どこからどこまでの数を数えればいいのやら。

 もしここで,勢いでLMT01を買ってしまい,途方にくれている人がいらっしゃったら,データシートを横目で見つつ,読み進めて下さい。

 LMT01は気温を測る温度センサICです。出力はデジタルで,2ピンの小さなICの中に温度センサとA-Dコンバータ,そしてシリアルインターフェースが入っています。どんな風にやってるかは知りませんが,リニアリティの補正も行われているので,出てくるデジタルデータをそのまま使う事ができます。

 その上,測定温度範囲が広く-50度から150度(おいおいシリコンの破壊限界じゃないか),しかも精度が他に比べて良好で,-20度から90度までなら誤差はわずか±0.5度です。電圧出力のセンサICではないので,A-Dコンバータが必要ありませんし,A-D変換時の誤差を考えなくて済みます。

 デジタル出力のセンサですので,データは電圧でも電流でも抵抗でもなく,数字で出てきます。電源とデータ出力を兼ねるという変態っぷりを実現したのは,その特徴的なシリアル通信によってですが,これ,クロックが別にないだけではなく,スタートもエンドもわからないなんて,なんちゅう無茶をやるんだか。

 私は最初,温度に応じた頻度でパルスが出る程度の物だろうから,ローパスフィルタで平均化して電圧値に変換すればいいか,位に考えていました。けど,それだったら,デジタル値で出力されるというこのセンサのメリットを生かせません。別にサーミスタでもいいという話です。

 考え方としては,測定1回分のデータは,決まった時間の中で出てくるという事が基本になります。かつ,パルスの周期は温度に無関係で一定です。

 このICは25度くらいで1200くらいのパルスを送って来ますが,温度の変化でこれが500になっても2000になっても,1回分の時間はほぼ同じです。パルスの周期も同じですから,あいた時間はパルスが出てこない期間となります。

 なら,こうしましょう。とにかくパルスの数を数えます。パルス何周期分かの時間を待って,前後のパルスの数を比べてみましょう。もし変わっていればパルスが出続けている,つまりデータの転送中ということになりますから,まだ数え続けます。

 もし,前後で値が変わっていなければ,もうパルスは出ていないという事ですから,転送は終了ということになります。すなわちその値が,測定値です。

 僅かな電流の変化を,ほんの僅かな電圧変化に変換してマイコンに突っ込むわけですが,ここにはトランジスタによるIV変換を使う事が,データシートでは紹介されています。しかし,コンパレータを内蔵するマイコンなら,直結が可能です。幸い,tiny13Aにはコンパレータがあります。

 コンパレータで電圧変化を掴んで,変化があれば割り込みで変数をカウントし数を数えます。しばらく待ってから数を比較してやればいけそうです。

 そして,その値を摂氏に変換しないといけません。データシートでは,(パルスの数/16-50)になるということです。すごいですね,ちゃんとリニアリティの補正もすんでいます。

 ですから,パルス数が1234だったら,27.125度ということになるわけです。お,小数点が出てきましたね。面倒くさそうです。

 LCDは前回と同じデジットの8桁14セグのLCDを使います。

続きを読む

AVRtiny13Aでつくるシリーズ1 電圧計

  • 2016/03/29 07:05
  • カテゴリー:make:

 AVRtiny13Aを使った工作,第一弾は電圧計です。


20160329082048.jpg


 この工作のテーマですが,複雑に入り組んだ現代社会に鋭いメスを入れ,さまざまな謎や疑問を徹底的に究明するようなものではなく,たった50円で手に入る一番安いマイコン,AVRtiny13Aを使って,いろいろなものを作ってみようという物です。

 改めてAVRtiny13Aを眺めてみると,

・最大20MHzで動作,内蔵クロックを使う場合は最大9.6MHz
・1kバイトのプログラムROM
・64バイトのRAM
・64バイトのEEPROM
・10ビットA-Dコンバータ
・8ビットタイマ/カウンタ
・コンパレータ
・最大6本のGPIO
・ちゃんとCで書ける
・安い。秋月価格で1個50円

 てな8ピンのマイコンです。なにせ8ピンですからね,配線数が少なくて,作るのがとっても楽ちんなのですよ。ピン数が少ないマイコンってこんなに楽だとは思いませんでした。

 ワシの若い頃はな,CPUが40ピンもあってな,GPIOも外付けで40ピン,カウンタ/タイマも28ピン・・・そもそもメモリも32kByteで28ピンじゃからな・・・配線だけで頭がおかしくなりそうじゃった・・・

 ・・・その時作ったZ80ボードは捨てられずにまだとってあります。

 それでも,CPUもTTLで自作していた時代から考えると随分楽になったんだろうとは思いますが,細いリード線を切り,両端を剥いてはんだめっきをして,ハンダ付けをしていくという単純作業をしていると,まるで写経をしているかのように,心が澄み渡り,世の中の煩わしい物がすべて後ろに流れていくような感覚に陥ります。ええ,単純作業大好きですよ。

 本題に戻ると,こんな小さなマイコンでどこまで出来るかという話です。GPIOについても,1つはRESET端子と排他ですから,これを使うと安いライタでのプログラミング(ISP)も出来なくなります。

 それ以外でも,GPIOは必ずなにか他の機能と兼用になっています。でも,この数本というGPIOの数と1kバイトのプログラムというのは,やってみると案外バランスが良くて,特にCで書いた大雑把なプログラムだと,1kバイトくらいでちょうどGPIOを数本動かす程度で一杯になります。

 そうなると64バイトのRAMなんてのはユーザーが意識するRAMというより,スタックや変数といった,いわばコンパイラが使うスクラッチパッド,と言う感じです。これは悪い意味ではなく,むしろCでプログラムを書くことが出来る,ギリギリのマイコンに仕上がっているという話です。堂々とCで書きましょう。

 これが,ちょっと上位のtiny2313だったり,あるいはmegaシリーズだったりすると,ペリフェラルも豊富ですから,やりたいことは大体できます。でも,すべての機能を試し,いつでも使えるように鍛えておくには少々骨が折れます。使い切った感じがしないというのは,懐の深さでもありますが,底なし沼の深さでもあるのです。

 てことでtiny13Aです。

 手始めに10ビットのA-Dコンバータで遊んでみましょう。

 13Aの前世代品にはなかったものだそうで,こんなちっこいマイコンにマルチプレクサ付きの10bitA-Dコンバータなんかいるんかいなと思うのですが,なかなかどうして,これがあるといろいろつぶしが利きます。

 もちろん,単純に電圧を測ることにも使えますが,ボリュームを使ってデータのエントリーに使うことも出来ますし,抵抗分割でスイッチを8個くらいぶら下げる事もできます。GPIOが不足するtiny13Aでも,結構便利に使えそうです。

 まず,LCDはデジットで売っていたポケベル用と思われる200円の8桁14セグメントのもの,A-Dの基準電圧は内蔵の1.1Vで,1chだけ使います。

 14セグメントLCD,なかなかいいですよね。

20160329082049.jpg

続きを読む

Si5351Aを応用する その3 TCXO時計

  • 2016/03/24 12:37
  • カテゴリー:make:

20160329082050.jpg

 TCXOを時計に使うという話については,以前ここにも書いたとおり,aitendoの時計キットのクロックである12MHzを,デジットで売っている12MHzのTCXOにすることで,ほぼずれることがなくなりました。

 これで私はTCXOの威力を思い知ったわけですが,TCXOは高価ですし,使い勝手のいい周波数があるわけではないのです。これこそSi5351Aを使う動機になります。

 Si5351Aの設定に2ピン,あとはボタンの最低2つ,Si5351からの正確なクロックの入力に1つと,これで5本の端子が必要です。これに一番数の必要なディスプレイを考えると,tiny13Aでは作れそうにありません。

 いやいや,まてまて。手元に100円で買ったaitendoのI2CセグメントLCDがあるじゃないか。

 無駄に大きなLCDで,数字が出るのは下側の1/3ほど。後のセグメントは簡体字だったりするので,怪しさがもうビリビリきてしまいます。

 I2Cなら,SI5351Aと共用できますから,tiny13Aでも足ります。よし,これでいくか。

 まず,tiny13Aはタイマ/カウンタが8ビットです。しかもカウンタへの外部からの入力はプリスケーラも挟めないので,分周は最大でも1/256です。

 CPUクロックをタイマにも入れる場合であればプリスケーラを通せますのですっきりまとまりそうな気もしますが,Si5351Aからクロックが出るのは,Si5351Aの設定が済んでからです。CPUの動作クロックが入ってこないのに,どうやってSi5351Aを設定するのか・・・

 なので,RC発振の内部クロックでCPUを動作させ,Si5351Aで生成したクロックをタイマに突っ込むことにします。精度はタイマへのクロックで決まりますし,CPUのクロックは処理が間に合えば精度はあまり関係ありません。今回はCPUクロックに1.2MHzを選びます。


 SI5351Aで生成するクロックは,当初4.194304MHzにするつもりだったのですが,前述の理由で分周が足りず,ここは素直に32.768kHzにします。Si5351は3kHzから生成出来ますので,これでいきましょう。

 これをタイマーの標準動作で1/256ごとに割り込みを発生させ,用意した他の変数で128個数えます。128になったら1秒ですので,あとは普通に時計を作るだけです。

 また,aitendoのLCDですが,先人達の苦労のおかげで,割に簡単に動かす事が出来ました。数字だけ表示に限定し,表示桁と数字を指定すればそこに表示される関数を作って,おしまい。


 割り込み処理のルーチンは,次に発生する割り込みに間に合わないという最悪の事態を避けるために出来るだけ軽く作るのがセオリーなのですが,秒や分の桁のリセットがちょっとずれてしまい,60と表示が出てしまうことがあるので,時分秒のカウンタの更新とリセットまで,割り込み処理でやってしまいます。

 メインでは,表示だけです。本当は,表示も1秒に1回だけにすべきなんでしょうけど,割り込み内で表示までやってしまうのは時間的に無理そうなので,やめました。

 ボタンは2つだけ,これも簡単に書いて,時計が出来上がりました。TCXOですので,ズレはほとんどないと思います。長期試験で様子を見ようと思います。

 これでプログラムは95%ほど使いました。EEPROMは100%ですし,13Aを結構ギリギリまで使った感じです。Si5351Aの設定に60%ほど使っているのが,痛いです。

 

20160329082051.jpg

 これはLCDの裏側に配置した基板の写真です。左から3.3VのLDO,tiny13,Si5351とその裏側に26MHzのTCXO,スイッチが2つならんでいます。


 ・・・あれ,まてよ。TCXOが欲しいだけなら,Si5351Aを使う事なんかないんじゃないのか?

 外部クロックにTCXOの10MHzを突っ込み,これをプリスケーラで1/64,さらにタイマで1/250して割り込みを書かけ,625カウントで1秒とすれば,Si5351Aなんかなくても正確な時計が出来るじゃないか?

 ちょっとやってみたら,出来ました。なんだかバカバカしい結果ですが,これは32.768kHzを作る実験と,32.768kHzで時計を動かす実験だと思うことにします。

 ・・・と思ったら,なんとTCXOを内蔵したリアルタイムクロックICが売られていることに気が付きました。2ppmとか3ppmらしいです。しかもカレンダーも内蔵,低消費電力とくれば,もう電池駆動も夢じゃありません。

 うーん,今回の工作は,そもそもの存在意義を問われる結果となりました。

 さてさて,SI5351Aを使うために久々にAVRをいじり,tiny13Aという小粒のマイコンで案外いろいろ出来そうだと,その面白さに目覚めてしまった私は,もうSI5351Aに関係なくtiny13Aであれこれ作ってみることにしました。

 次回から数回,tiny13Aの作例を紹介します。

Si5351Aを応用する その2 周波数カウンタ編

  • 2016/03/18 14:53
  • カテゴリー:make:

 さて,Si5351Aの応用の2回目,今回は数年前からことあるごとにいじくり回している,自作の周波数カウンタのお話です。

 これも20年くらい前に秋月電子で売られていたキットなのですが,多くの方が作られたキットのようで,未だにたくさんの情報が検索されます。

 で,このキットのポイントの1つはプリスケーラです。私の買った物は2.4GHzまで動作可能な富士通のプリスケーラが搭載されたバージョンで,入力周波数を1/1024にします。

 1/1000ではなく1/1024ですから,結果を直読するにはタイムベースを1000/1024にした周波数に切り替えないといけません。この周波数カウンタの場合,10MHzのタイムベースを1000/1024にした9.765625MHzへの切り替えが必要です。

 このちょっと特殊な水晶発振子も貴重なものらしく,欲しい人はオークションで買ったりしているようですが,私の場合ここに改造TCXOを使っていることは以前書きました。

 実力は1ppm以下の精度とはいえ,そこは改造品です。もやもやしたものがあるのは気分的に良くありません。

 しかしようやく,信頼のおけるTCXOから作った周波数を投入出来るのです。Si5351Aで9.765625MHzを生成するのは,なんの問題もありません。

 本当は10MHzのクロックも一緒に生成してもいいと思ったのですが,そうするとSi5351Aの設定が終了する1秒ほどの間,すべてのクロックが出てこず,周波数カウンタが完全に止まってしまいます。

 電源投入時にリセットもかからず,LEDのスキャンも止まり,しばらく固まってしまうので,クロックが出てから電源を入れるなどの制御が必要になるのですが,そうすると大幅な改造が避けられません。

 そこで今回は,9,765625MHzのTCXO互換のモジュールを作るということにしました。

 26MHzから9,765625MHzを生成する設定を行い,この周波数が出ていることを確認。実は配線ミス(Si5351Aの3ピン(XB端子)に26MHzを突っ込んだ)でとんでもない周波数が出てきたりしたんですが,それは内緒。

 一応,精度の高い周波数が得られたようなのですが,それ以前の問題が発覚。どうもこの周波数カウンタに使われているICM7216というICは,メインクロックの10MHzだけではなく,もう1つのクロック(サブクロックとします)も発振していないと,固まってしまうようなのです。

 そんなばかなと思って,サブクロックの端子をオープンにしました。そうすると固まりません。ここがGNDなりVDDに固定されると,固まるようなのです。

 理由はよくわかりません。しかし10MHzだけではだめなのだと,あきらめることにします。

 ということで,両方のクロックが出揃ったときに,ICM7216の電源を入れるような仕組みを入れざるを得なくなりました。

 そうなると,10MHzを先に別のTCXOで発振させる必要もなくなります。なら,もうちょっと精度の良い,高価な12.8MHzのTCXOから10MHzと9.765625MHzを作ってやることも出来るでしょう。

 ということで,秋月で一緒に買っておいたVM39S5Gという12.8MHzのTCXOを使ってみましょう。これは安価に売っているTG-5021CEに比べると昔ながらの14ピンDIPの大きさで,金属ケースに入ったものです。トリマで周波数を微調整でき,VC端子もあるので電圧制御も可能です。

 秋月によると,初期値は1ppm以内に調整されているということです。まあ,TG-5021CEも初期値は1ppm以内の実力があるので,そこはトントンかなと思います。

 実は,温度特性はTG-5021CEが2ppmなのに対し,これは3ppmですからちょっと緩いのです。その他の特性はほぼ一緒ですので,いかにTG-5021CEがお買い得かわかります。ただ,VM39S5Gは1つ1つ調整がされているので,その分は安心かも知れません。

 後で気が付いたのですが,実はこのVM39S5Gは電源電圧によって周波数が大きく変動します。とあるサイトでは,0.1Vの変動で40Hzも動くのだそうです。初期値を1ppm以内にしてあるというのはあくまで電源電圧が5Vでの話であり,ここが動いてしまうとスペックから外れてしまいます。

 ということで,クロック基板を作り直します。初代の基板は12.8MHzのTCXOとTC5081を使ったPLL,2台目は10MHzのTCXOと改造TCXOのダブルTCXO。そして今回は12.8MHzのTCXOのSi5351Aです。

 電源電圧は電圧可変型のLDOを使い,5.00Vに合わせます。そんなに大変な回路ではないので,割と簡単に完成しました。動作を確認すると問題なし。ちゃんと国民機っぽい起動音も出ます。設定が完了した印をLEDで点灯させるようにもしました。

 問題は,どうやってICM7216の電源を制御するかです。ICM7216にはちょっと高めの電圧を供給するため,5.6VをLDOで作っているのですが,このLDOには制御端子があることに気が付きました。この制御端子をtiny13Aから出している設定完了信号で動かしてやればいんじゃないかと思ったのです。

 実験すると,ICM7216の電源がONになる前に他の端子からの回り込みが発生し,中途半端に動作してしまい,誤動作をすることがわかりました。

 でもこれ,どこから回り込んでいるかわかりません。とりあえずやるだけやってみようとクロック基板を作り,組み込みます。そして電源ON。

 よかった,回り込みによる中途半端な動作もなく,誤動作も認められません。なんどやっても大丈夫です。思うに,回り込みはクロックの入力端子からだったんじゃないかと思います。先の実験では,クロックを入れたまま電源を切っていましたから,回り込んで当然です。

 今回は,Si5351Aからクロックが出るのとほぼ同時に電源が立ち上がりますので,それまではこの端子はLowのまま。これで誤動作は防げたわけですね。

 おかげさまでクロックの問題は解決。SGの周波数も測定しましたが,10MHzも9,765625MHzも申し分なし。

 ついでですから,ICM7216とLEDの間に入っているドライバICを,抵抗入りのTD62003Aに交換しましょう。

 これ,よく知られている設計ミスなのですが,わざわざフェイスセーフだと明言して使っているTD62101は入力に電流制限用の抵抗がないため,ICM7216からダイレクトに電流が流れ込んでしまい,非常に強いストレスをかけています。ICM7216がかなり熱くなるのはそのせいです。

 秋月の設計者はこれを「簡易恒温槽だ」などと言ってますが,外気温に対して変動する以上は恒温槽でもなんでもないわけで,なんだかおおらかな時代だったんだなあと思った石鯛です。

 そもそもTD62101は抵抗をいれて使う事が仕様書にも書かれているわけで,知っている人はみんな,ここに抵抗をいれて使っています。

 私は,そうしたチマチマした改造が面倒だったので,抵抗入りのドライバICに交換してみました。どっちかというと,抵抗入りの方が普通なんですけどね。

 今回は定番中の定番,2003の互換品としてよく知られたTD62003APに交換してみました。

 ちょっと小ネタですが,この2003というドライバICは,オリジナルがスプラーグ(そう,あのスプラーグです)のULN2003です。ダーリントントランジスタが7個入っていて,逆起電力を打ち消すダイオードも入ったタイプなのですが,なにも面倒な事を考えずに,TTLはもとより,MOS-LSIにも直結可能で,コイルなどの重い負荷を楽々ドライブ出来る便利なICです。

 その便利さ故,世界中のメーカーで互換品が作られていて,TIは同じ名称のULN2003,NECだとuPA2003,東芝だとTD62003,となります。

 実際,これを使うとなにも考えずにマイコンにLEDやリレーが直結出来るので,とても便利なのです。

 で,東芝のTD62003がディスコンになったという噂を聞いて,いよいよこの手のICも入手が難しくなるのかなあと思っていたら,なんとこれをMOS-FETに置き換えた新製品,TBD62003に置き換わると言うではありませんか。

 MOS-FETですので,入力電流はいりません。それまで,いかにダーリントントランジスタとはいえ,マイコンにも僅かながらドライブ電流が必要だったわけですけど,それがほぼゼロになるのです。

 1つ1つは僅かでも,この手のICというのは数を使う場合も多くて,ドライブするだけの電流も無視できなくなることがあります。それが本当に無視できるというのですから,うれしいじゃありませんか。


 で,そのTD62003ですが,手持ちがないとあわてて秋月で買った(TBD62003も一緒に買いました)ら,実はパーツケースからゴロゴロ出てきました。とほほ。

 そんな状況とは裏腹に,ドライバICを交換するとあっけなく動作しました。ICM7216の温度も低いままで,これまで20年間,随分辛い思いをさせてきたのだと思うと,涙を禁じ得ません。すまない,ICM7216。

 ということで,何度かの改修を経て,今度こそ完全版になった周波数カウンタ。50円の8ピンマイコンとは言え,とうとうマイコンまで内蔵する羽目になってしまったわけですが,壊れない限りはもうこれ以上いじることはないでしょう。

 次回ですが,Si5351Aを使えばTCXOで時計用の32.768kHzを作る事が出来ます。これを応用して時計を作ってみたので,紹介します。

Si5351Aを応用する その1 スクロールクロック編

  • 2016/03/17 09:43
  • カテゴリー:make:

 さて,作ったからには,使わないといけないというのが私の工作のポリシーでして,Si5351にATtiny13Aで散々検討したわけですから,なにか面白そうな応用を考えてみましょう。

 まずは,バカバカしい応用例として,あの「スクロールクロックの源発振」への応用を試して見ましょう。

 我らが秋月電子に古くからある時計キットの1つに,スクロールクロックという物があります。シャープ製の10x10ドットマトリクスLEDが特価で入ってきた時に,ほぼ同時に発売されたキットだったと記憶していますが,我々はそんな古いキット(しかもPICですよ)が未だに売られているという現実を、ベストセラーと解釈するか,あるいは不人気と理解すべきか,大いに悩むところです。

 不人気の可能性に言及したには訳があって,このキット,確かに面白いのですが,作った瞬間からとにかくがっかりなキットなのです。

 まず,精度が全然出ません。トリマコンデンサでクロックを微調整出来ますし,機能の1つとして進みと遅れを0.08秒/日単位で調整することも出来るのですが,まあとにかく全然追い込めません。結果を見るのに24時間かかると言うも途方に暮れますし,そうこうしているうちにクロックそのものがずれたりしてしまうので,もう暗闇を手探りで歩くようなものです。

 根気よく頑張って,結局調整範囲を超えてしまうことがわかると,もう一気にやる気がなくなります。こういうキットこそ,無調整でばちっと精度が出るように作らないといけないと思い知りました。

 その上,10x10ドットという中途半端なドット数による文字の読みにくさ,10ドットしかないところでスクロールされても一度の表示される情報が少なすぎて,なんだかよく分からない表示になる,LEDチップが小さく,しかも隣と間隔が開いているので少し離れてみないと読めない,でも離れてしまうと小さくて読めないという,結局読めないづくしの時計なのです。

 ラーメンタイマになるのがオチだという書き込みも2chにあったりしたほどですが,1日で数十秒もずれるラーメンタイマでは,ラーメンすら美味しく作れません。

 ある日私は,「それなら周波数カウンタで正確に合わせてみよう」と思い立ちました。プローブの容量で周波数が変わってしまうのを避けるため,わざわざ発振回路を作り,バッファを噛ませてから測定を行い,狙った周波数に合わせます。

 ・・・はて?合わせる?どの周波数に?

 取説を読むと,4.194340MHzとあります。でも,これでは分周しても正確な1秒を作れません。4.194304MHzの間違いじゃないのか?

 付属していた水晶発振子を見れば,4.19としかマーキングされていません。なんじゃそりゃ。これ,最初から精度なんてどうでもいいと思ってるでしょ。

 ところがこの水晶を使って,4.194304MHzには出来ませんでした。4.194349MHzにもうまく合わせる事が出来ず,この水晶はあきらめました。

 手持ちを探すと,自動車のECUに使われていたフィリップス謹製の4.194304MHzが出てきました。おお,これはすごい。これで発振回路を組んで,ばちっと4.194304MHzに合わせます。これで楽勝だと思って数時間後,派手にずれているではありませんか。

 ここで私は力尽きて,スクロールクロックはジャンク箱に放り込まれることとなりました。

 今回は,これを復活させようというわけです。そもそも,前回までの検討では,クロックの周波数の理論値が分からない上に,発振周波数も小数点2桁までしか記載がなく,温度特性も含んだ精度だっていい加減です。時計が狂うのは,何が原因か分からないじゃありませんか。

 そこでTCXOにSi5351Aです。これなら実力で1ppm以内の精度を作り出せます。

 まずは,取説のとおり,4.194340MHzを作ります。これで試してみると,24時間で7~8秒程度のズレが出てきました。ということは,4.194340MHzが理論値ではないということになります。

 なら,取説の誤記と考えて,カウンタを22段使えば1秒が作れる4.194304MHzにしてみましょう。それでも,3時間で数秒のズレがしまいました。どうやら,これも違うようです。

 なら,なにが正解なのか。ソースもありませんので,推測するしかありません。そもそも,このクロックをどんな風に使って1秒を作っているのかさえも解りません。空ループをまわして作っているんだとしたら,ちょっと心許ないです。

 ざっと計算すると,4.194340MHzの時,86400秒(24時間)で7秒ずれたわけですから,これがぴったり86400秒になるような周波数は,切りのいいところで4.194MHzです。

 この時計の設計者は,どうせ精度など追い込んでも仕方がないし,水晶発振子も4.19MHzまでしか書いていないようなものだから,とりあえす4.194MHzで作っとけ,あとは調整頑張れ,という軽いノリで作ったんじゃないかと思います。

 かくして,Si5351Aに4.194000MHzを設定。ちゃんとこの周波数が出ていることを確認して,スクロールクロックの電源を投入。

 24時間経過後,1秒ほどずれていました・・・こんなことをやっていたら切りがありません。24時間で1/100秒に追い込んでも,3ヶ月もすれば1秒ずれるわけです。しかも,それがわかるのは3ヶ月も先です。(これはこれで立派な精度なんですが)

 そもそも,こういうことが面倒だから,理論値をびしっと生成出来るSi5351Aがありがたいのですから,こんなやり方ではどうにもなりません。

 かなり投げやりな気持ちで4.19394MHzという適当な値を設定し,24時間経過後にすると0.8秒くらい遅れた感じです。

 もう面倒になったので,時計の機能として備わっている補正機能を使います。0.08秒ステップで調整出来るという事ですので,初期値60に対し,63だとちょっと進みます。62でちょっと遅れる感じです。

 そこで今は,4.19396MHzにして様子を見ています。長い目で見ていくしかなさそうですね。


 次に行った応用は,今回の本命,周波数カウンタのタイムベースなのですが,これは長くなるので次に。

ページ移動

ユーティリティ

2020年05月

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

検索

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

ユーザー

新着画像

新着エントリー

過去ログ

Feed