エントリー

ユーザー「gshoes」の検索結果は以下のとおりです。

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にして様子を見ています。長い目で見ていくしかなさそうですね。


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

Si5351Aを検討する その5

  • 2016/03/09 14:52
  • カテゴリー:make:

 前回までで,Si5351を使う環境は整いました。しかし,その周波数の素性が悪ければどうにもなりません。以前書いたように,長期的精度については問題はないと思いますが,原発が2ppmでも最終的に20ppmになってしまうようだと,これを使う意味がありません。

 少なくとも精度くらいは見ておきましょう。

 繰り返しになりますが,原発は26MHzのTCXOで初期精度が±2ppmです。そして設定後Si5351Aから出力された周波数は,CLK0から10MHz,CLK2から9.765625MHzが出るようにしてあります。

 ちょっといい周波数カウンタで測定してみたのですが,

CLK0からは9.99999586MHz
CLK2からは9.76562085MHz
原発の26MHzは25.999988MHz

 という感じでした。これを割合で計算してみます。

絶対精度(20℃,電源投入後5時間経過)
CLK0は10MHzに対し,-0.414ppm
CLK2は9.765625MHzに対し,-0.425ppm
原発は26MHzに対し,-0.46ppm

 こんな感じです。ここから言えることは,TCXOは十分仕様を満たしていること,Si5351Aの出力の精度は,そのまま原発の精度を引き継ぐこと,の2つです。これは狙い通りです。

 さて,気になったことが1つ。出力をオシロスコープで見たのですが,10MHzは短期的な周波数変動がなく,ぴたっと10MHzと表示されています。しかし9.765625MHzは,ふらふらと周波数が変動し,平均すると9,765625MHzに近づいていくという感じになりました。

 これ,Si5351の分数分周に起因する揺らぎではないかと思うのですが,実はオシロスコープのトリガのかかり方が,10MHzと違って不規則になるため,揺らいで見えるだけかも知れません。

 本来だとスペアナでスプリアスを見れば分かることだと思うのですが,私はスペアナを持っていませんので,あきらめました。

 他の方がスペアナを使ったレポートを上げてくれていたので見せて頂きましたが,分数分周でもスプリアスは小さく,無線にも使えるレベルだという話でした,

 まあ,分数分周の場合,分数比の設定でジッタやスプリアスの出方が変わって来ますので,この結果だけを見て判断出来ないのですが,とりあえず短期間での精度については分からないことが多くて,使う時には注意ということだけは,覚えておきましょう。

 それにしても,SI5351Aは面白いICです。いろいろ応用を考えています。安いし,しょーもない検討にも気兼ねなく使えます。

 ということで,次回はSi5351Aの応用についてです。

Si5351Aを検討する その4

  • 2016/03/08 14:01
  • カテゴリー:make:

 さて,貧乏生活が抜けきれない私は,50円の8ピンマイコン,ATtiny13Aを使って,Si5351Aを設定しようと企て,同じAVRだし楽勝だろうと思ってtiny2313のコードを移植したものの,まったく動いてくれません。

 はて,何がだめなんだろうと首を練っているところから,今回の日誌は始まります。

 なにせ,2313でちゃんと動いているコードで,しかも単なるGPIOの制御だけのものですから,これで動かないなんてのはちょっと考えにくいわけです。あれこれと試行錯誤をしますが,状況は変わらず。

 こうやって,適当に試行錯誤をすることは,私はそんなに無駄ではないと思っています。確かに理論的ではありませんが,そういう理由も理屈もない手当たり次第な方法によって,なにか変化が見つかれば,そこを手がかりにして尻尾をつかむことができます。

 分からないからといって何もしないと,何も前に進みません。こういうときは,余計なプライドは捨てて,初心者に戻るのです。

 で,コードに問題がないとすると,コンパイルオプションをいじってみようという話になりました。クロックの設定,最適化の設定を変えても変化はなし。この過程でヒューズビットの設定を誤り,ライタで書けない13Aを作ってしまったことは内緒です。(後日ヒューズリセッタを作って復活させましたのでご安心を)

 ところが,CPUの設定を13Aから2313に強引に変えると,なんとまあ動いてしまったではありませんか!これには驚きました。

 これはどう考えたらいんでしょうか。コードにミスがないから動いている,そして動かないのはコンパイラのオプションのせい,ということは,コンパイラのバグなのか!

 しかし,私の環境はAVR Stuidio4.19という古い物で,十分に枯れています。これでこんなバグがあるんだとしたら,世の中の13Aの大半は動かないんじゃないでしょうか。

 いや,でもコンパイラのバグというのは,案外あるものです。もうバグだと決めつけて,最新の環境に変えてみようとしたり,バグの情報を探して半日が過ぎました。しかし成果なし。誰もバグなんてことは言ってません。

 さらに手探りをします。それでは,2313以外に動くCPU設定はあるだろうか?

 試してみたら,これが案外あるんです。動く物と動かない物,かなり拮抗した感じです。ただ規則性があるようでありません。85Aでは動くけど45Aでは動かないとか,そういうよく分からない状況なのです。

 こんなに動く物と動かない物が出てきてしまうなら,もうコンパイラのバグのはずがありません。もう一度疑いの目を自分に向けて見ましょう。そうです,コンピュータというのは,指示されたとおりにしか動かないものなのです。

 ここで,ふと,13Aのメモリが小さいことに気が付きました。いや,プログラム格納用のフラッシュメモリが半分になっていることは分かっていましたが,RAMも半分,EEPROMも半分になっていることを,あまり意識していなかったのです。

 RAMはたったの64バイト。Cでコードが書けるギリギリのメモリと言ってもいいでしょう。

 この続きを,私が嫁さんに説明した会話を再現してみます。嫁さんはソフト屋で,こういう失敗談を笑い話として聞いてもらえる,貴重な相手なのです。

 ・・・

私:まず,I2Cで設定するレジスタの値は,配列にいれてあるわけよ。
嫁:うんうん。
私:ところが,私はこいつをconst宣言してなかった。
嫁:ぶーー(笑)。あんた何年組み込みやってんのよ。
私:そんなん,今どき広大なRAMがあるんやから,いちいちconstなんか宣言せえへんよ。
嫁:またそういう屁理屈を・・・まあええわ,それで?
私:ところが,const宣言しても,動かない。
嫁:ほー。
私:ここがAVRの特殊な事情で,const宣言してもRAMは使うのよ。つまりROMとRAMの両方に同じデータがおかれるわけ。
嫁:なんでそんな無駄な仕組みなのよ?普通const宣言すればRAMにはおかれないよね。
私:そう,これはAVRがハーバードアーキテクチャゆえ,データとプログラムが別々のメモリに配置されるようになっているから,なのね。置かれているものはプログラムだけという前提のROMにデータがおかれていても,それはデータとしてアクセス出来ない。それで結局RAMにコピーするわけ。
嫁:うーん。const宣言だけではだめのか・・・
私:まあ,そもそもconstなんてのはコンパイラに「定数ですよ」と教えて上げるだけで,そこから先はコンパイラ任せよね。「だからどうしたてやんでいバーローチキショー」と冷たいコンパイラやったら,ROMにもRAMにもおくわね。
嫁:ところで,そのレジスタの値は,何個あるのよ?
私:それが,100個ほど。
嫁:なるほどー。それで64バイトのRAMからはみ出すのか。
私:そう,だから128バイトのCPUを使うと,const宣言をしていないこのコードでも動いたわけよ。けどここであきらめる訳にもいかん。なんとかRAMを使わない方法で設定をしないといけないんで,google先生にすがってみたのよ。そうすると,先人達が便利な方法を考えてくれていて,配列をプログラムメモリにおき,使う時にこれを引っ張り出してくる方法を用意してくれてあった。プログラムメモリだけではなく,EEPROMにも置けるようになるという,素晴らしいもの。
嫁:それで,動いたの?
私:うん,動いた!
嫁:それはよかった。というより,本当に何年やってるのよ?組み込み。
私:でも,なんでCPUのオプションを変えると動くんだろうとおもわんか?
嫁:確かに。
私:実は,この設定値,後半の50個ほどは,ほとんどゼロ。意味のある設定値は前半の数十個だけなのね。
嫁:なるほど,RAMが大きいCPUの設定であれば,実メモリが存在しないところでもなんとなく動いて,ゼロを書いてくれたと。でも正しいCPUの設定では,そこで別のデータが読めてしまい,動かなかったと。
私:おそらく,そういうことやろうね。

 とまあ,こんなほほえましい夫婦の会話があって,結局AVRに特有の,定数の置き方を使う事にしました。

 この,AVRならではの方法ですが,プログラムメモリに置く方法とEEPROMのおく方法の2つがあります。どちらも,RAMからデータを取り出す命令とは異なる手順と命令を使いますから,使いやすいようにライブラリとして用意してくれてあるんですね。

 具体的には,最初にavr/pgmspace.hをincludeします。そして定数の定義には,

const PROGMEM unsigned char hoge[] = {xx,xx,xx...};

 読み出しには,

a = pgm_read_byte(&hoge[x]);

 とします。もしこれがプログラムメモリではなく,EEPROMの場合にはavr/eeprom.hをincludeした上で,

const EEMEM unsigned char hoge[] = {xx,xx,xx...};

 読み出しには,

a = eeprom_read_byte(&hoge[x]);

 とします。もしbyteではなくwordの場合には,byteの部分をwordに書き換えてやればOKです。

 当然ですが,前者は定数を変更する場合には再ビルドが必要です。一方後者はプログラムだけではなくEEPROMにもライタで書き込みを行わないと動きません。ヒューズでEEPROMを保護していないと,プログラムの書き込み時にEEPROMが消去されてるようですので,気をつけましょう。

 話を戻すと,tiny13は1kByteしかプログラムメモリがありません。だから定数は出来るだけEEPROMに追い出したいです。それに,プログラムをいちいちビルドしなくても,EEPROMの内容を書き換えるだけで,欲しい周波数の設定に書き換えることが出来ます。これはこれで便利でしょう。

 最後に,設定が完了したらLEDが点灯し,ブザーがかつての国民機のようにぴぽっと鳴るようにして,最後にSLEEPモードに入るという仕上げを行い,なんとかSi5351を任意の周波数発生器として使える環境が整いました。プログラムメモリは,およそ半分強使っています。

 こうしてやってみると,50円のAVRでも,それなりの事が出来るもんだなと思います。特にI2Cは2本しか使いませんので,8ピンのマイコンには最適です。

 I2Cがあれば,センサもディスプレイも発振器も,全部まとめて2本です。実際に使ってみてつくづく思ったのは,やっぱり8ピンというのは,回路を作るのが楽です。2313のように20ピンもあると,配線だけでも結構多いですから,面倒だし,ミスも起きます。

 Si5351Aも面白いのですが,8ピンの13Aも,いじりがいがある面白いマイコンです。

 ということで,次は,作った周波数の簡単な評価です。

Si5351Aを検討する その3

  • 2016/03/07 14:19
  • カテゴリー:make:

 さて,前回までで,SI5351AがTCXOで動き,しかもその精度を維持したまま任意の周波数を生成出来ることがわかりました。I2Cで設定するだけで動くのですが,そうはいってもI2Cですし,100バイトを超える設定値ですので,マイコンを使う以外の選択肢はありません。

 それでmbedを使いましたが,これでは大きすぎて,あるいはもったいなくて,組み込めません。安いマイコンを使いたいところです。

 私が慣れているAVRのATtiny2313を使えばいいと思っていましたが,これ,I2Cがありません。ソフトでエミュレーションして動かせばどうにかなるだろうと思ったのですが,もうAVRも長く使っていないので,頭がまわりません。

 google先生にいろいろ聞いてみたら,ありがたいことにサンプルコードがいくつか見つかりました。I2Cって,単純な書き込みであってもリードをしないといけない部分があるので,ソフトでの実装は案外面倒なのです。

 ちょっとした試行錯誤はありましたが,そこは使い慣れたAVRです。tiny2313でSi5351Aを設定する事に成功し,10MHzと9.765625MHzを生成することが出来ました。

 で,最新のtiny2313の値段を見てびっくりしたのですが,なんと随分値上がりして,230円になってるんですね。私は100円でたくさん買ったのですが,こんな値段になっているんだとすると,大切に使わないともったいないです。

 I2Cは2本で通信するものです。他にマイコンで制御しないなら,2313は確かにもったいないです。ならばと8ピンのtinyを探してみれば,tiny13Aというのがありました。50円。安い。

 これなら今回の目的にぴったりでしょう。ただし,メモリが小さいので,ちゃんと実装出来るかどうか不安ですが・・・

 とりあえず,tiny13Aを10個ほど入手。どうせ大した事はしていないので,そのままリビルドすれば動くだろうと思ったのですが,さっぱり動きません。

 ここからが長いのです。続きます。

ユーティリティ

2026年04月

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

検索

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

ユーザー

新着画像

過去ログ

Feed