• ベストアンサー

PICでパルス数をカウントし、カウント数に応じで、ある操作をする

PICにファンクションジェネレータからパルス(数100ms程度の幅)を0.2~1Hzで入力して、たとえば10回のパルスが入ってきたら、10回目のパルスの後、数ms後にパルスを出力するといった事をしたいのですが、わかりません。 PIC初心者です。よろしくお願いします。

  • macus
  • お礼率76% (331/433)

質問者が選んだベストアンサー

  • ベストアンサー
  • Azuma1
  • ベストアンサー率39% (78/200)
回答No.2

PICは(Peripheral Interface Controller)で良いですね。 外部入力を判断するには(1)専用入力端子を使うか、それがなければ(2)割り込みが使える端子を使うか(3)通常の入力端子をポーリング(ソフトのタイミングで見る)かのどれかを使うことになると思います。 (1)はパルスの入力やパルス幅、その他の機能が考えられますがIC自体が高価にもなります。(2)はレベルの割り込みと、エッジの割り込みがあり、(2)(3)共にノイズ等による無効パルスや有効パルス中のエッジ発生や反転を予測して、有効/無効パルスの判定(反転を認識してから一定の時間で再認識)をしないといけないでしょう。 後はダウンカウントかアップカウントの10回カウンタでゼロまたは一致にてパルスを出力すればよいと思います。タイミングを計るのは内部タイマを使うか、あまり勧めませんがソフトのループ間隔で時間を決めるソフトカウンタという方法もあります。

macus
質問者

お礼

回答ありがとうございます。 ごめんなさい。初心者すぎて、わかりませんでした。 「割り込み」という言葉が先ほども出てきたので調べてみましたがよくわかりません。 http://www.picfun.com/pic08.html を見ました。 「レジスタ」「ビット」の値を色々いじっているという印象は受けました。ただ、「レジスタ」「ビット」については理解できていません。 わかりやすく解説してくれている、URLを紹介していただけるとありがたいです。すみませんがよろしくお願いします。

その他の回答 (2)

  • Azuma1
  • ベストアンサー率39% (78/200)
回答No.3

図に示された解説がわかりやすいでしょうが http://www.necel.com/ja/faq/mi78k/__78int.html#0101 でわかりますか?  CQ出版の本などを読んだ方がわかるかもしれません。 割り込みとは、通常のソフトが進んで(走って)いる状態で、何かの事象が生じたら、即座にその処理のルーチン(プログラム)に移動して処理をし、処理後に、割り込み前の場所に戻る一連の動作を言います。つまり、通常の処理に割り込むのです。文章では限界があり、webでも説明を簡単にされている所は内容なので?まずは図書館で本を借りて見るか、本を購入するかで理解した方が良いと思います。

macus
質問者

お礼

再度回答ありがとうございます。 CQ出版の本を購入し、なんとか理解することができました。

  • ribisi
  • ベストアンサー率28% (247/864)
回答No.1

私も電子工作初心者です。 PICの機能であるタイマを使えば実現できると思います。 タイマは内部クロックでも外部クロックでも動作させることができ、 外部クロックを選べば、カウンタや分周期として使うことができます。 例えば8ピンICであるPIC12F629のタイマ0は8ビットタイマなので、 初期時にF6hと書き込んでおけば、10回目のカウントで値がFFhから00hと 変化し、そのときにオーバーフロー割り込みが発生します。 割り込み処理ルーチンでは、「数ms後にパルスを出力」の数msを NOP命令などで作り出し、その後に出力すればいいでしょう。

macus
質問者

お礼

早速の回答ありがとうございます。 私はさらに初心者です…。まだ実際に自分で考えて作ったことはありません。本を見ながら、書いてある通りに作ったことはありますが。 ribisiさんの言っていることがあまり理解できないようです。 分かった事と言えば…「私の要求していることができる」ということぐらいです…。 一応調べてみました。 ちなみに16F84を使っています タイマ:???。サイクル時間(=4/クロック周波数)のことでしょうか?普通は水晶振動子等を付けるところに、パルス信号を入力するということでしょうか? タイマ0は8ビットタイマなので初期時にF6h:8ビット=256で、16進数で2桁分に相当する。8ビットタイマということは256でオーバーフローする?だからFFhの次は00hとなる? オーバーフロー割り込み:?。わかりませんでした。 NOP命令:何もしない。何もしない時間を数ms、何とかして作るということでしょうか?振動子を使っていない場合のサイクル時間はどうやって決まるのですか? すみません。初心者すぎますね。答えるのがメンドクさかったら、参考URLだけでも教えていただけると助かります。 ただ、電子工作室はなんかわかりにくかったです。

関連するQ&A

  • PICでパルス数をカウントする方法

    PICで不規則な幅のパルス数をカウントする為にはどうのようなプログラムになるのでしょうか? ループで入力ポートを監視するのでは出来ないように思うのですがどのような方法を用いると出来ますでしょうか?

  • pic12F683で2mS.ON 4mS.OFFのパルス出力

    はじめまして PIC初心者です。PIC12F683 OSC外部入力16Mhzで、2mS、ON4mS、OFFのパルスを、出力したいんです。プログラムを、mikuroCで、具体的にお願いします。

  • PICの出力パルス幅について

    初心者です。 PIC24FJ64GB002を使用し、添付ファイルのソース(シリアル出力)を作成しました。 ●仕様 スイッチ入力→シリアル出力(1パルス=約10μs) 実際動作させると、望み通りのシリアル信号が出力されるのですが、連続的に出力すると、1秒間隔位でシリアル出力のパルス幅が何倍かに延びるヶ所があります(延びるヶ所は不特定)。 考えられる原因はございますでしょうか? よろしくお願い致します。

  • 安価なパルスジェネレータ

    12V、50%duty方形波、0~4kHzを出力できるパルスジェネレータを探しています。 ファンクションジェネレータは非常に高価ですので安価なパルスジェネレータは無いでしょうか? なお、コンピュータから制御するのではなく、機器単体で設定できるものを考えています。

  • PICマイコンができること

    PICは入力信号によって「Yes」か「No」かを出力させるという仕事はできるが、入力信号をそのまま出力させるという仕事はできないものなのでしょうか? 今、PICマイコンに入力する信号は、サーボモータを動かすためのパルス信号であり、サーボモータが右に動くときと、左に動くときとで別々のポートから信号を出力させることを考えてます。 そのために、入力信号のパルス幅をタイマーで計測し、判断させているのですが、問題は判断項目(while や if)が加わると入力信号をそのまま出力することができないことです。 一応、PIC16F84Aを用いて10MHzの内部クロックで 1.判断項目がないとき入力信号をそのまま出力(別々に出力はしない) 2.判断項目は同じとして出力を入力信号にせず、5Vにして別々に出力 の2つについて実際にできました。 結構、厳しい条件ですがPICに期待しすぎなのかわからなくなったので質問しました。 よろしくお願いします。

  • ファンクションジェネレータで任意波形

    以下のような波形をファンクションジェネレータで出力したい場合どうすればよいでのしょうか?? パルス(1) _||_____ パルス(2) __| |__ ランプ(1) ____/|__ 順序はパルス(1)が入力された後にパルス(2)が入力され、 パルス(2)が入力されている間にランプ(1)を入力します。 この動作を繰り返し行います。 電圧は0Vと3.3Vです。 ファンクションジェネレータ二台用いて行う予定です。 よろしくお願いします。

  • パルスジェネレータ

    レーザ発振器を使用しての加工機を考えているのですが、客先指定のレーザ発振器を使用するためにはパルスジェネレータがいることが分かり探しています。下記のようなパルスジェネレータがあれば教えてください。 ・周波数が変更できる・パルス幅が変更できる・ラインドライバ出力 ・RS232Cで外部からコントロールができる(三菱PLCで制御できる)

  • 任意波形の作成について

    (1)ランプ波:_|\_ (2)パルス波:_||__| |_ 上記のような波形をファンクションジェネレータで生成したい場合,そのように操作すればよいのでしょうか? (1)のランプ波に関しては _/|_ という波形は出力できますが,上記のような波形の出力方法がわかりません。 (2)のパルス波に関しては幅の異なるパルスを一つのチャネルより出力したいのですが,出力方法がわかりません。 なお,用いているファンクションジェネレータはTektronixのAFG320です。 よろしくお願いいたします。

  • パルス波 発振器について

    装置のテストのために下記の内容でパルス波発振器を作成したいと考えてます。 (パルス幅50ms、パルス振幅5mV~100mVまで可変、周波数0.5Hz~2Hz程度で可変) webサイトや市販のキットなど検索したのですが、知識不足もあって回路がうまく構成できません。 どなたか具体的な回路構成をご教授下さい。よろしくお願いします。 (できればアナログ、単電源で作成、必要部品も最小限で構成したいと思っています。)

  • パルス発信回路

    数百ミリ秒間隔で入ってくるTTL信号にの立ち上がりに同期させて、3マイクロ秒幅のパルス信号を2発だけ出すTTL回路を考えているのですが、皆様のアドバイスをお願いします。 入力信号___| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄         出力信号____| ̄|_| ̄|____       幅3マイクロ秒程度のパルスを続けて2発 入力信号に対して、最大10マイクロ秒くらい出力信号が遅れてもOK パルス幅、パルス間隔はともに3マイクロ秒程度としたいので、555やXtalでCLOCK信号を作って利用してもよいです。  よろしくお願いします。

専門家に質問してみよう