PIC16F84電子遊戯(95) |
最終更新日:2003年1月25日 |
簡易信号発生器を作ろう (1ページ)へ (2ページ) |
|
簡易信号発生器のポート割付 |
ポート名 |
入出力 |
機能 |
RA0 |
IN |
SW1入力
|
RA1 |
OUT |
フィルター制御 |
RA2 |
IN |
SEL1 |
RA3 |
IN |
SEL2 |
RA4 |
IN |
SEL3 |
RB0 |
OUT |
8bitD/A出力 |
RB1 |
OUT |
8bitD/A出力 |
RB2 |
OUT |
8bitD/A出力 |
RB3 |
OUT |
8bitD/A出力 |
RB4 |
OUT |
8bitD/A出力 |
RB5 |
OUT |
8bitD/A出力 |
RB5 |
OUT |
8bitD/A出力 |
RB7 |
OUT |
8bitD/A出力 |
|
簡易信号発生器のメインルーチンのフローの一部 |
方形波と正弦波についてメインルーチンの概略フローを見て下さい。
それぞれの波形について専用のルーチンを組んでいます。
波形ごとに処理時間が異なるため各ステップでの周波数が異なります。 |
|
(方形波と正弦波の概略フローです) |
wave_countのデータを元に波形出力を制御しています。このデータに加えるデータを変化させることにより出力周波数を変化させています。
正弦波はテーブルデータを読み出しているため、高い周波数になるほどデータを読み出す間隔が広くなるため、波形は乱れます。 |
簡易信号発生器の主要RAM説明 |
wave_count |
信号出力用カウンタ |
henka_step |
wave_countに加算するデータ |
time_count |
henka_stepのデータを読み出すカウンタ |
|
henka_stepのデータ(wave_countに加算するデータ)は数値が大きくなるほどwave_countの繰り上がりに対して効果がなくなるところがありますので、その数値を間引きするためにtime_countを用いて加算するデータをテーブルから読み出しています。(すいません、説明が難しいので後でソースを見て下さいね。) |
簡易信号発生器の波形の選択 |
波形の選択は三つのSELスイッチで行います。
ポート数が足りないため、SELスイッチは電源ON時にしか判定しません。
従って、波形を切り換えるときはSELを設定した後にリセットスイッチを押します。 |
SEL1 |
SEL2 |
SEL3 |
波形 |
OFF |
OFF |
OFF |
方形波 |
ON |
OFF |
OFF |
正弦波 |
OFF |
ON |
OFF |
ノコギリ波 |
OFF |
OFF |
ON |
パルス波 |
|
簡易信号発生器の波形出力 |
ではこの発生器から出力できる波形の一部を見ていただきます。 |
方形波 |
|
|
(かなり綺麗な波形ですね) |
正弦波 |
|
|
(周波数が高くなるとちょっと厳しい波形です) |
ノコギリ波 |
|
|
(なんとか波形を保っております?) |
パルス波 |
|
|
(パルス部は細くて見えない?) |
いかがでしょうか。充分実用(?)に使えると思いますが・・・・ |
簡易信号発生器の出力電圧可変 |
一応、出力電圧が可変できるように設計しています。出力電圧は約5Vまで可能です。 |
|
(出力電圧可変の状態です。左が1Vで右が0.2Vです。) |
簡易信号発生器の全ソースリストと全HEXコード |
毎度おなじみのソースリストとHEXコードです。
一緒に圧縮していますので、ダウンロードしてからじっくり眺めてください。
(今回からXPで解凍出来るようにZIPにしています。)
ソースリストとHEXコードはこちらです。 |
簡易信号発生器の大完成 |
では大完成した雄姿とその中身を見て下さい。 |
|
(かなりコンパクトにまとまりました) |
|
(ACアダプターも使えるようにDCジャックも付けました) |
ということで、かなり重宝する発振器が出来ました。もっと精度が必要な場合は皆さんでクロックを速くするなりして工夫して下さい。 |
これからも益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。 |
|
不明点などあればメールお願いいたします。nonchansoft@nifty.com |
|
|