
今日は関東地方は大荒れの天気です。予定していた外出もままなりません。
そこで、途中で放り出している周波数カウンターを見直してみました。
12F675を使ったオーディオ帯域の発振器に、発振周波数を直読できる、周波数カウンターをつけようというものです。
コストとスペースの関係で7セグメントのLEDを使います。簡易実験電源でつかったものと同じものです。簡易実験電源では電圧を読み取る必要があるので、16F88を使いました。が今回はADコンバータは必要ないので、16F648Aをつかいます。
タイマー0で12F675からのパルスの数を数えます。タイマー0は8bitなのでタイマー0オーバーフロー割込みで別の変数(TM0H)を+1します。
一方、タイマー1で基準時間を作ります。今回は0.5秒としています。タイマー1オーバーフロー割込みが入ったとき(0.5秒の間)のタイマー0の数とTM0H*256を足したものが、基準時間内にカウントされたパルスの数です。これを7セグメントの表示ルーチンに送ります。
とここまではいいのですが、
7セグメントのうちaとb(aは一番上の横棒、bは右上の縦棒)が表示されません。
へんだなぁ。。。。
配線ミスがあるのか確認しますが、なさそうです。
PICのソケットから直接Hレベルになるように結線すると、点灯します。
ハードはOKのようです。
ソフトは7セグメントの表示データに固定値(例えば888888)を指定してみます。やはり駄目です。
うーん。なにかなぁ。。。。。
ということで、判らず、お蔵入りになってしまいました。
さて、気分を新たに見直しです。でもどういう意図で書いているのか暫くは思い出せませんね。
同じようなチェックを再度していて、aとbに接続しているPB6、7の信号が浮いているような感じです。
再度(何回目かなぁ。。。)PICのマニュアルを見てみます。PB6、7は通常のIOのほかに、Timer1 Oscillator Output と Input となっています。どうもタイマー1の外部発振器の端子になっているようです。
タイマー1のコントロールレジスタ(T1CON)のbit3がTimer1 Oscillator Enable Contorol bit で1がセットされています。タイマー1は内部発振で使っているのですが、内部発振でもこのbitはセットするのだと勘違いしていたようです。
これを0に書き換えて、。。。。。。。動きました!!。。。。。
やれやれ。。。。
じつはこうした中途半端でお蔵入りしているものが一杯あるのですよ。
早く日の目を見させなくては。。。。