• 締切済み
※ ChatGPTを利用し、要約された質問です(原文:PIC(16F84A)を使用して周波数判定を行い…)

PIC(16F84A)を使用した周波数判定プログラムの作成方法

このQ&Aのポイント
  • PIC(16F84A)を使用して周波数を判定し、出力を制御するプログラムをC言語で作成する方法について説明します。
  • 具体的には、100Hz以上の周波数が入力された場合にはHIを出力し、それ以外の場合にはLOWを出力するような判定を行います。
  • このためには、周波数の判定を行う関数を用意し、それを使って入力された周波数を判定し、適切な出力を行うプログラムを組む必要があります。

みんなの回答

noname#230359
noname#230359
回答No.2

こんばんわ!グッチーです! PICを勉強中のことで!?私も初心者ですがこの手のプログラムは先駆者の御仁方々がたくさん製作されています。100Hz程度ですと色々な手段がありますが、もっと周波数が上がると手段も使用するPICも制限されることがあります。 簡単な方法を言葉でいえば(100Hzを正確に作り出せる回路がある前提)、1秒間の入力パル数が f<100、f=100、f>100 なのかを判定し、それらに応じて出力を出してやる!・・・と言ったところでしょうか?もう少し具体的には、例えばTMR0を使って1秒を作り出します。10MHzクロックですと、100ns(10MHz)*4*256(プリスケラ)*256(タイマー値)=26.2144msになります。これを約38回カウントしてやればおよそ1秒になります。その間にカウントされるパルスを計測する・・・しかし84A使う限り肝心の周波数をどの様にカウントするかは、ハードウェアとソフトウェアの難度があります。参考になるサイトを下記に示します。 http://www.picfun.com/appframe.html 関数も含め、そのものずばりのプログラムはないと思います。参考になるキーワードは「周波数カウンタ」「TMR0」「TMR1またはTMR2」、「CCP」などがあります。 またPIC16F84A以外に、PIC16F648Aなどを使えば、値段も安いし(300円→200円:08年11/26現在調)、ピンコンパチで、84Aより多くの機能が追加されていて、タイマーも3本になり、プログラムも簡単になります。(上記の悩みは解消します。) 参考サイト http://www8.plala.or.jp/InHisTime/index.html http://members3.jcom.home.ne.jp/guccitech/Mycon-Koubou.html 頑張ってください。

noname#230358
質問者

お礼

わざわざ、回答ありがとうございました。タイマー0を使用して、無事プログラムを完成させることができました!!

noname#230359
noname#230359
回答No.1

毎度JOです。 本来であればF-Vコンバータとコンパレータで実現できるのですが、 マイコンで行うのであれば、入力信号がロジックである必要があります サインウエーブのような信号を取り込む為場合、コンパレータなどでロジック信号に変換する必要があります。 入力信号のエッジからエッジを検出し、この間の時間が(100Hzであれば10mS)以内で変化するかを観測します。 しかしプログラムで行うには上限があります、マイコン内のタイマーをプリスケラなど使用せず高速動作させて、 エッジ検出~エッジ検出とその間の判定プログラムステップが30あったとすると、 マイコンのクロックに10MHzを使用したとしても、10000000/4/30≒83KHz以上の信号は判断出来ません、 C言語で行う場合は、アセンブルファイルでステップ数をカウントするか、シミュレーションでステップ数を計測する必要があります。

参考URL:
http://ww1.microchip.com/downloads/en/DeviceDoc/30430cj2.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf
noname#230358
質問者

お礼

わざわざ回答ありがとうございました。 まだ、PIC初心者でなかなか理解することができないのですが、少しずつ理解して行こうと思います。

関連するQ&A