LED Flasher
去年入手したLM3909、せっかくなので一番簡単なLED Flasherを組んでみました。
『初歩のラジオ』1981年1月号掲載のものをそのまま作ってみました。
とてもシンプルで、外付け部品は100μFの電解コンデンサとLEDのみです。
これに電源として1.5Vを加えると約1秒に1回LEDが光ります。デューティは低く光るのはほんの一瞬です。ちなみに電源電圧を上げると点滅周期が短くなります。
個人的に製作してきたものの紹介です。
電子的なものがほとんどですが、そうでないものも出来るだけ出していきたいと思っています。
回路図、ソースコードなどは出来ればすべて載せたいのですが、以下の理由で難しいものが多いです。
残っていないのではなく、そもそも書かないことが多かったためです。
もちろん仕事ならば書きますが。
特に古いものでは雑誌など掲載のものをベースにしているものがあり、オリジナルと分離できないものは公開できません。
5インチや8インチのフロッピーだったり、PC-9801フォーマットだったりして読むのが難しいものがあります。
去年入手したLM3909、せっかくなので一番簡単なLED Flasherを組んでみました。
『初歩のラジオ』1981年1月号掲載のものをそのまま作ってみました。
とてもシンプルで、外付け部品は100μFの電解コンデンサとLEDのみです。
これに電源として1.5Vを加えると約1秒に1回LEDが光ります。デューティは低く光るのはほんの一瞬です。ちなみに電源電圧を上げると点滅周期が短くなります。
NS32016ボードのコメントにちょっと書いたようにNS32081 FPUを搭載してみました。
空きエリアに24ピンソケットを置いてNS32081D-10を載せます。
このFPUはたったの24ピンしかないのにバスは16ビットあります。接続は簡単でデータシートの通りにNS32016の同名の信号と接続するのみ、CPU空間のデコードを必要とするMC68881などよりシンプルです。あ、クロックだけはNS32201から引っ張ってきます。
ハードウェア的に接続出来たら次はソフトウェアですが......
前回プログラムが動き始めたので、例によってUniversal Monitorの移植を行なっています。似ているプロセッサとしてMC68000をベースに、HEXファイル関係については長いアドレスに対応したH8/300Hが元にしています。
現時点でD(ump), G(o), S(et), L(oad), P(unch)の各コマンドが動作するようになっており、引き続きR(egister)の実装を進めているところです。
ということで気付いたことを書いてみようかと思います。
NS32000のバイトオーダーはリトルエンディアンなのですが、命令語に含まれる即値やディスプレースメントなどはビッグエンディアンで格納されます。
面白いのはディスプレースメント(絶対アドレッシングのアドレスも含む)は可変長で、最初のバイトの最上位ビットが"0"なら符号付7ビット、上位2ビットが"10"なら符号付14ビット、"11"なら符号付30ビットになることです。
今回はNS32016ボードの組み立て終わってからUniversal Monitorの移植を始めるまでの動作確認編をお送りします。
まずは発振器とTCUのみで動かしてみます。CPU→TCUの信号が数本あるので仮にプルアップしておきます。これでPHI1, PHI2が出ていることを確認します。
リンギングが酷いですが、とりあえずTCUは動作してそうですね。
続いてRSTOのタイミングを確認します。NS32016のデータシートによるとPHI1が"H"の間に立ち上がることとありますが......
約半年ぶりにマイコンボードを作ってみました。
今度のはNS32016のボードです。もちろんEMILY Boardを使っています。
8ビットバスのNS32008を使った方が配線が少し楽になりますが、こちらは入手しずらいのと、NS32016はいくつも持っているからです。
NS32016はマルチプレクスバスなのでアドレスラッチ回路部分が配線済みのボードを使用しました。以前NSC800に使ったのは8ビット分のラッチですが、16ビットバス用のものも作っていました。
メインはもちろんNS32016D-10、10MHz品です。
今回はその9で軽く触れたリングオシレータの電源を電流制御にするのを試したいと思っていたのですが、いろいろあって全く進捗していないので......
初期に作った74LS624にるVCOと74HC4046によるVCOのF-V特性を測ってみました。
まずは74LS624です。
Cx=47pF でRNGを 0V, 2.5V, 5V と変化させた場合です。
リングオシレータを見た後では可変範囲狭いなという印象が強いですね。
ただ下から上まで単調で直線性も悪くないので、何か変な現象が出たときの比較用には良さそうです。
続いて74HC4046です。
今回もPLLというよりVCOの話になっています。
その12で書いたようにVCOのF-V特性が比較的手間がかからず測れるようになったのでいろいろ見てみます。
まずはTC74HC14APでリングの段数を1, 3, 5段にしてどうなるかです。
下の方が乱れているのは前回同様ですが、3,5段はかなり酷いですね。
一応私としてはこれが本命と考えています。
続いてもう少し周波数の高い方の例としてTC74AC04APについて同様に......
前回周波数カウンタ機能が動き始めたので今回はいよいよVCOのF-V特性の自動測定です。
D/A値を0~4095まで5刻みで増加させながら以下を実行していきます。
ターミナルソフトでこれを記録しておきグラフなどの処理を行ないます。
2.で待つのは2つの理由があります。
一つはVCOの応答を待つため、とは言ってもループフィルタなどは通っていないので遅延は大きくないはずです。
もう一つは...... こちらの方が重要です。前回書いたようにゲート時間は256msあり、しかもタイマ割り込みで非同期に動いています。仮にゲート時間が始まった直後にD/Aを変更したとするとその結果が出るのは256ms後になります。しかもゲート時間が始まってからVCOの周波数が変わるまでは不正な値をカウントしてしまいます。本来ゲートの切り替わりを2回待つべきですが、0.5秒以上待つことで済ませてしまいました。
今回は...... PLLシンセサイザ関係ではあるのですが、ちょっと脱線してみます。
実験用に作った基板にはPLL ICの初期化用にAVRマイコンを搭載しており、VCOの実験用にD/Aコンバータも搭載しています。マイコンにはカウンタ・タイマも載っているのでちょっとソフトウェアを追加すれば周波数カウンタ機能も実現できそうです。
外部に周波数カウンタを接続すればいいではないかと思われるかもしれませんが、D/Aコンバータの出力を変化させながら周波数を測定できればVCOのF-V特性を自動的に測定できる可能性があります。
ということでまずは可能性を探っていきます。
周波数は簡単には1秒間のパルス数を数えれば良いわけですが、カウンタの桁数が多く必要になる上に測定時間も長くなるので、16ms間のパルスを数えて16で割ることでkHz単位の値を得ることにします。
もう「その10」と2桁に達してしまいましたが、当面は何か進捗があるたびに書いていこうと思います。
今回は何が進捗したかというと、出力周波数を下げていくとロックしたりしなかったり不安定になる問題です。
1MHzというのはVCOを単独で動かして求めた可変範囲をもとに出せるはずと思っていたわけですが、ループフィルタの出力の範囲が狭い、あるいはその付近でVCOのF-V特性が急峻になっていて周波数が安定しない、という可能性もあります。
前回リングオシレータの電源云々と書いたのは後者の対策だったのですが、ちょっと実験するだけならもっと簡単な方法がありました。
それはリングオシレータを1段から5段に変更してみることです。これで同じ入力電圧に対する周波数は約1/5(容量などの影響でもうちょっと下がるはず)になります。
試してみると設定下限の300kHzまで安定に動作します。代わりに上限も下がって14MHz程度までしか出せなくなりました。