• 締切済み

PIC割り込み処理の速度について

PIC割り込み処理の速度について 外部ピン変化割り込みを使う予定なのですが、 PIC割り込み周期は1MHz以上にできるのでしょうか? 現在使用する予定のPICは16F873Aです。(20MHzクロック)

  • 科学
  • 回答数1
  • ありがとう数19

みんなの回答

  • tadys
  • ベストアンサー率40% (856/2135)
回答No.1

無理です。 20MHzクロックということは1命令のクロックスピードは5MHz(200ns)ですが 1MHz周期に対応するには5命令しか実行できません。 割り込みを認識するのに1~2クロック、割り込みフラグをクリアするのに1クロック、 割り込みから戻るのに2クロック必要なのですでに余裕が有りません。 実際にはレジスタの退避や復帰に8命令ぐらい必要でしょう。 これにプラスして割り込み内での処理時間が必要になるので実用になる割り込み周期は50kHzを超えるのは難しいでしょう。

mne34677
質問者

お礼

大変わかりやすい説明をしていただいてありがとうございます。 PIC16Fシリーズでは高速処理に向いていないようなのでdsPIC30で 試してみようかと思います。 これは120MHzなので単純に計算して300kHzくらいの周期で動かせるのでしょうか?

関連するQ&A

  • dsPICとPIC24の処理速度について

    PIC12とPIC16やAVR(ATmega88など)を使ってこれらのマイコンには慣れてきたところなのですが、今回作成するものが処理速度が速いマイコンが必要で、AVRライタを自作したときに対応しているという事だったのでなんとなく買っておいた、dsPIC33FJ32GP202 か PIC24HJ12GP202 を使ってみようかと思うのですが、これらのマイコンは未経験で全くの素人です。 そこで質問なのですが、PICの場合4クロックで1命令というのはこれらのマイコンもそうなのでしょうか?・・・だとすると、これらのマイコンは40MHzとのことですが、実質10MHz?・・・AVRを20MHzで使った方が処理速度が速いという事なのでしょうか? また、上記が違い1クロックで1命令で、これらのマイコンの方がAVRより速い場合、dsPIC33とPIC24HJはどちらの方が速いのでしょうか?同クリスタルを使えば同じですか? 最後に、dsPICのdspとは何の機能なのでしょうか? 以上3点よろしくお願いします。

  • PIC12F675のRB割込みミス(?)

    PIC12F675を20MHzでポート変化割込みを使用しています。 A.割込みルーチン内では BTFSC 05.3とラストリードし、bit出力(オシロでのチェック用)をするのみ (ポート変化割込に使用しているbitへの入力は約500Hz) B.メインルーチン内では MOVWF 05という形で無限ループでGPIOに出力し続けるのみ。 (出力周期は約600KHz) オシロでみると、入力が変化しても割込みが発生しないミスがかなりあります。 ここでB.の出力にディレイを入れて出力周期を約1KHzに下げると割込みミスは減少します。 Q1. マニュアルによれば、ポート変化割込みはラストリードから入力が変化とき 発生するとあります。 ラストリードはA.の割り込みルーチン内でしかしていません。 したがってB.で出力しても(出力にBCF,BSFは使用していません) 割り込みの発生には関係ないはずですが 現実は出力周期が割り込みの発生に大きく関係しています。 どういう理由でしょうか? Q2. ここまで述べてくると PIC12F675では、ポート出力をしているときはポート変化割込み ミスがある???ということになってしまいます。 これは正しいのでしょうか? 入力の変化を見落とさないために、ソフトウェアプログラムではなく割り込みを使用しているのですが・・・。

  • PIC 外部クロックの使用について

    PIC18F24K20というPICを使用しています。 外部からクロックを供給してPICを動作させようとしているのですが、13.56MHzのクロックを入力して動作するにはコンフィギュレーションビットをどのように設定すればいいでしょうか?

  • PICの割り込みフラグについて

    PIC18F4550を使用して、RB0とRB1への入力の立ち上がり、立下りエッジを検出しようとしています。 素直に割り込み処理へ入れば実現できるのですが、他の処理との兼ね合いの問題もあり、出来れば割り込みを使用したくありません。 そこで思ったのですが、割り込みを禁止にしていても、各割り込みフラグは変化するのでしょうか? 回答よろしくお願いします。

  • PICを3.3Vで動作させるには?

    PIC初心者です。PIC16F873AというPICを3.3Vで動作させたいのですがうまくいきません。同じ回路で電源電圧を5Vにし、動作することを確認しているので回路やプログラムには問題ないと思われます。 データシートでは2.0V~で動作するようになっていると思うのですが、電源電圧5Vで動作させるときとどこか変更しなければならない個所があるのでしょうか?それとも3.3Vでは動作しないのでしょうか? ちなみにクロックは外部クロック10MHzを使用しています。 PICに詳しい方、よろしくお願いいたします。

  • 処理時間の計算 PICアセンブラ

    あるプログラムで、TIMERというサブルーチンを作りました。適当に数値を変えてうまく行った値を採用したのですが、実際に処理時間が何秒かかるのかが分りません。 TIMER MOVLW 0x40 ;この40が採用した値です MOVWF WC1 LOOPT DECFSZ WC2,F ;WC2はあらかじめCLRされてます GOTO LOOPT DECFSZ WC1,F RETURN 見難くてすいません(TIMER、LOOPTがラベルです) 使用ハードはPIC16F84Aでクロック周波数は20[MHz]です。 たしか通常は一つの命令にクロック4周期分だった気がするので、最初の二行で8/20M[s]なのは分るんですが、LOOPTのDECFSZとかは4周期分じゃなかったような気がして、混乱してしまいました・・・。 知りたいのはRETURNで戻るまで(メインルーチンに戻るまで)です。 わかる方ご教示願います。

  • picのポート変化割り込み

    ccs社のコンパイラとpic16f690を使用して機械の制御部を作成しています。 pic16f690に複数のボタンを接続しています。 ボタン毎に、個別に割り込みをかけてやるようなことはできないのでしょうか? #INT_RB void RB6_isr(){ B6ピンが押された時の処理 } #INT_RB void RB4_isr(){ B4ピンが押された時の処理 } 上記のようにコードを記述するとエラーがでてコンパイルできません。 #INT_RBを片方削除すると、コンパイルはできますが、削除した方の割り込みが発生しません。 どなたかわかる方いらっしゃいましたら、ご教授願います。

  • PIC16F1823の割り込み処理について

    PIC初心者です。よろしくお願いします。 ※HI-TECH Cコンパイラを使用しています。 最近まで、PIC16F676を使用していましたが、 今回、PIC16F1823に変更することにしました。 プルグラムをPIC16F1823用に変更し、実行したところ思ったように動いてくれません。 いろいろ調べたところ割り込み処理がうまいこと出来ていないような気がします。 割り込みルーチンに飛んだ後、なぜか戻ってこないような気がします。 下記のコードは、簡単に書き直しました。 どなたか分かる方、お願いしますm(_ _)m --------------------------------------------- #include <htc.h> __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_ON & CP_OFF); unsigned int i,Time; void main(void) { OSCCON = 0b01101010; //おそらく4MHz? //ポートA ANSELA = 0x00; //全てデジタル CM1CON0 = 0b00000111; //コンパレート無効化 CM1CON1 = 0b00000111; TRISA = 0b00111110; //ポートA入力出力設定 WPUA = 0b00110110; //ポートAプルアップビット指定 PORTA = 0b00000100; //各ピンデフォルト値 IOCAP = 0b00100000; //割り込みピン指定 //ポートC ANSELC = 0x00; //全てデジタル TRISC = 0b00000000; //ポートC入力出力設定 nWPUEN = 0; //プルアップ有効化 IOCIE = 1; IOCIF = 0; GIE = 1; i = 0; while(1){  if(i){   RC5 =1;   RC0 =0;  }else{   RC5 =0;   RC0 =1;  } } } void interrupt ISR(void){ //割込み if(IOCIF && !RA5){  if(i) i=0;else i=1; } IOCIF = 0; }

  • PIC16F1827の外部割込み

    PIC16F1827のRB0を 外部割込みとして入力の立上りで割込みを発生するように 設定します。 1.割込み禁止 2.プログラムAスタート 3.RB0に立上り入力あり 4.プログラムA終了 5.割込み許可 ・・・のような場合 5.以降に割込みが発生するでしょうか? ご教授お願いします。

  • PIC(16F84A)を使用しての250Hz以上…

    PIC(16F84A)を使用しての250Hz以上の周波数判定について 16F84Aを使用して外部からの信号(方形波)周波数をRA2に入力して判定し、ある周波数以上であればRA2への入力信号がHiの時にRB0からHiを出力、Lowの時には出力しないというプログラムを組み、その先にトランジスタを取り付けてLEDを点滅させるというテストを行っています。 100Hz基準くらいの周波数の判定は順調に行えるようになりましたが、約200Hzを判定基準にすると、LEDが外部信号と同期しなくなりました。 誤動作といったほうがいいのかもしれませんが、安定しない動作を行います。200Hzの信号を入力しているのに、1Hzくらいの点滅を繰り返す・点灯しっぱなし・点灯しないetc. ←同じプログラムを焼いたPICでです。  外部発振子は20MHzのものを使用しています。 私は、PICの処理速度?が追いつかなくなったのかなと考察したのですがどういった原因が考えられますか?対策方法等はありますか? PIC初心者なので、簡単な言葉で説明していただければ幸いです。 よろしくお願いします。