製作例 パルス発振器


【パルス発信器の概要】

PIC10F206を使った製作例の紹介です。パルス発振器で、DIPスイッチで選択
できる8種類の周波数の連続パルスを出力し、小型スピーカを鳴らします。

外観は下記写真のようになっています。


右上がボタン電池 3V200mAHの容量です。
下がICSP用モジュラージャック
中央がPIC10F206のDIPタイプ
その上が小型スピーカ
左側がDIPスイッチです。



【回路構成】

このパルス発振器の回路は下図のようになっています。
4ピンの入出力ピンのうち、3ピンをDIPスイッチの入力に、1ピン(GP0)をパルス
出力ピンに使っています。
入力ピンは内部でプルアップしていますが、GP2はプルアップが無いので外付け
の抵抗でプルアップしています。
小型スピーカはピエゾスピーカでPICに直接接続で十分の音量ですので、そのまま
GP0ピンに接続しています。




MPLAB ICD2のICSPで書き込みができるようにモジュラージャックを付けました。
ここで一つ書き込み時に注意することは、書き込み時にはDIPスイッチをオフに
する必要があることです。そうしないとGNDに直接接続されてしまうので、ICSPで
正常に書き込みができなくなってしまいます。


【プログラム】

今回パルスとして出力する周波数の種類は、下記としました。この周波数はテーブル
のデータを変えるだけで自由に設定できます。
  
DIPスイッチ 周波数 プリスケーラ値 TMR0値
x111 10kHz 1/1 0xDC
x110 5kHz 1/1 0xA9
x101 2kHz 1/1 0x13
x100 1kHz 1/2 0x86
x011 500Hz 1/4 0x84
x010 200Hz 1/8 0x64
x001 100Hz 1/16 0x64
x000 50Hz 1/32 0x64

この周波数は、内蔵タイマで作成し、タイマのオーバーフローごとにGP0の出力を反転
させることでパルス出力を作っています。
スイッチの切り替えの判定を、やはりタイマのオーバーフロー時に行っていて、スイッチの
状態を読み込んで、前回と同じかどうかで判定しています。
同じであれば何もせず、異なっているときには、周波数を変更するため、プリスケーラ値と
TMR0の設定値をデータテーブルから取り出してOPTIONレジスタとTMR0レジスタに設定
しています。

これ全体で68ワードしか使っていませんから、全体512ワードの大部分がまだ未使用
の状態です。

このプログラムのリストは下記となります。注意が必要なことは、タイマのオーバーフロー
判定を、TMR0レジスタの上位5ビットが0であることで判定していることです。判定ループの
命令の途中でTMR0レジスタが0x00になったときには0x00を検出できないので、"0000 0xxx"
の状態であればオーバーフローが起きたと判定しています。

まず下記が初期設定と周波数設定用のデータテーブル部分のプログラムリストです。
周波数テーブルの値は、命令サイクル数を元にパルス幅が求まりますから、それを基本
にして、命令実行による時間分を差し引いた値をTMR0の設定値とします。
正確には、MPLABのStopWatchで時間を計りながら値を決めます。




次がメインプログラム部です。







  目次ページに戻る