[Homepage][BBS][YouTube][Blog]

エアーバリアブルBBS
エアーバリアブルBBS
初めにお読み下さい Please read first ホームページ ブログ YouTube 過去ログ倉庫
PIC12F1822 のRA3よりのピン状態変化割り込み
PIC12F1822のRA3よりの状態変化割り込みを行っています。BUTTON関数を使った物はうまくいきました。(4/3BBS)BUTTON関数を使わない場合は何となく癖があるようですので報告します。mikroC4.60で試しています。どういう理由で動作したり動作しなかったりするのか教えていただきたいと思います。


下記のプログラムでIOCピン状態変化割り込み(RA3)動作OK
----------------------------------------------
void interrupt(){
INTCON = 0x00;
Delay_ms(5); // ・・・①
if (PORTA.F3==0){
i++;
Delay_ms(10); // ・・・②
}
IOCAF = 0;// IOC Flag = 0
INTCON = 0X88;
}
----------------------------------------------
<結果1>②のDelay_ms(10); を Delay_ms(1); としても動作をする。

<結果2>更に②で変更したDelay_ms(1); を全く取ってしまってもOK

<結果3>①のDelay_ms(5);をDelay_ms(1);とすると次の状態に飛ぶこと(スキップする)が出る。うまく動作しない。

<結果4>IOCAF = 0; を外す とうまく動作しない。

<結果5>IOCAF = 0;をINTCON = 0X88; の下に移動するとうまく動作しない。

以上よろしくお願いします。
  • T2
  • 2011/04/09 (Sat) 04:54:11
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
前回の記事が流れないようにアドレスを付加しておきます。
http://airvariable.bbs.fc2.com/?act=reply&tid=3790075
  • air_variable
  • URL
  • 2011/04/09 (Sat) 18:27:22
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
>Delay_ms(5); // ・・・①
>if (PORTA.F3==0){

のところを、つぎのように

>①のDelay_ms(5);をDelay_ms(1);とすると次の状態に飛
>ぶこと(スキップする)が出る。うまく動作しない。

とのことですが、

これはPORTAの状態を読んでいるのでしょうか?

PORTAの状態は割り込み処理中も変化する可能性があります
ので、PORTAの割り込みレジスタのRA3フラグの状態を読んで
みてはどうでしょうか。

mikroCはまったくわかりませんが、たとえばこんなふうに
記述するのかも…。

if (IOCAF.F3==1){

><結果4>IOCAF = 0; を外す とうまく動作しない。
データシートによると、INTCONレジスタのIOCIFフラグは
IOCAFのフラグの状態を反映するそうです。つまり、
割り込みがかかったままの状態になるのでしょう。

The IOCIF Flag bit is read-only and cleared when all the Interrupt-on-Change flags in the IOCAF register have been cleared by software.

><結果5>IOCAF = 0;をINTCON = 0X88; の下に移動す
>るとうまく動作しない。
同じ理由だと思います。

以上、見当違いだったらごめんなさい。



  • FENG3
  • 2011/04/10 (Sun) 06:15:24
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
FENG3さんありがとうございます。書いていただいたことに対して自分なりに考えてみました。③と④と⑤のコメントは追加しました。
----------------------------------------------
void interrupt(){
INTCON = 0x00;// ・・・③
Delay_ms(5); // ・・・①
if (PORTA.F3==0){
i++;
Delay_ms(10); // ・・・②
}
IOCAF = 0;// IOC Flag = 0 ・・・④
INTCON = 0X88; //・・・⑤
}
----------------------------------------------
③でINTCON=0x00;とすると 
GIE=0;    全体割り込み禁止 
IOCIE=0;   状態変化読み込み禁止
となり状態変化読み込みは禁止されますが、IOCIF=0;も行われてしまいます。
TIM0IF=1;とINTF=1;とIOCIF=1; でmikroCはINTERRUPT
に「飛べ」という命令になると解釈できます。
そのINTERRUPTルーチンの中でIOCIF=0;が実行されると「即座」にINTERRUPTルーチンより「離脱」するためのFLAGだと考えました。
③ではINTCON = 0x00; として 3つ(GIE=0; IOCIE=0; IOCIF=0;)共に値を0にしてはいけないわけでしょう。IOCIF=1;の状態は維持する必要があるわけです。となると、③はGIE=0;として全体割り込みを禁止するのが良いのでしょう。
 この考えで行くと、④⑤の部分は⑤のみで良いことになります。
>mikroCはまったくわかりませんが、たとえばこんなふうに
>記述するのかも…。
>if (IOCAF.F3==1){
これはネガティブエッジの検出結果が1かどうか調べるのですね。
if (IOCAF3==1){
として実験してみようと思います。大変参考になりました。皆様のおかげで段々と判ってきました。
 

  • T2
  • 2011/04/10 (Sun) 07:21:05
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
データシートによれば、INTCONレジスタのIOCIFフラグの
ビットは、リードオンリーです。
IOCAFレジスタをクリアすることで‘0’になります。
  • FENG3
  • 2011/04/10 (Sun) 08:23:48
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
FENG3さんありがとうございます。下記のようにIOCAFレジスタをクリヤすることにしました。動作しました。①は取れないようです。

void interrupt(){
IOCIE_bit = 0;
Delay_ms(1);   // ・・・①
if (PORTA.F3==0){
i++;
}
IOCIE_bit = 1;
IOCAF3_bit = 0; // INTERRUPT-ON-CHANGE RA3 FLAG REGISTER = 0
}
  • T2
  • 2011/04/10 (Sun) 10:39:16
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
横槍すいません。ちょっと話題からは外れるんですが、PIC12F1822ではMPLAB SIMにてIOCがサポートされていないようです、というか私自身がこの問題に遭遇し、かなりの時間を浪費してしまった次第です。
http://www.microchip.com/forums/m517446-print.aspx
デバッグの際は頭の片隅にでも。
  • kanki
  • URL
  • MAIL
  • 2011/04/12 (Tue) 16:41:00
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
kankiさん ありがとうございます。
 MPLAB SIMが IOC をサポートしていないことはSelectDeviceで確かに黄色で点灯していることでわかりました。管理人さんに 2011/04/09 (Sat)にこの状況を示してもらっていますね。
 紹介いただいたページで質問している人がプログラムの①の部分を何で入れているのか判りませんので教えてください。TIMERとか使うときの物ではないでしょうか。
 PIC12F1822は割り込み関係がPIC12F629でスンナリ動作したのがうまくないようですね。
 この質問者の場合、RA0,RA1,RA5を入力にして抵抗でプルアップして、5は ↓↑ でIOCしたいわけでしょう。
 RA2とRA4にはLEDをつないだり、他回路の用の信号を送り出すのでしょうか。回路図がほしいところです。

OPTION_REG = 0x80;
IOCAN = 0x23;
IOCAP = 0x20;
INTCONbits.IOCIE = 1;
INTCONbits.PEIE = 1; // ・・・① 疑問点
INTCONbits.GIE = 1;
  • T2
  • 2011/04/14 (Thu) 05:45:21
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
ソースの一部しか無いのであくまでも想像ですが、仰るとおり何か他の割り込みを使ってるんじゃないでしょうか。少なくとも投稿されている範囲には何も影響していないように見えます。

I do not have a chip to test in real world,
だそうです。実験的なものなのかな?
  • kanki
  • URL
  • MAIL
  • 2011/04/14 (Thu) 10:28:10
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
kankiさんありがとうございます。
空想で言っている人なのですね。
IOC(ピン変化割り込み)でプログラムをした実践事例を提示してもらいたいものです。
たった8ピンのICですので、ちょちょっとブレッドボードで組み立ててPICkit3でプログラムをした方、
①こうしたらうまくいった。
②こうしたがうまく動かなかった。
などの事例がほしいものです。お願いします。
  • T2
  • 2011/04/15 (Fri) 06:34:00
Re: PIC12F1822 のRA3よりのピン状態変化割り込み
T2さん、
したらばBBS時代からも繰り返されてきている事なのですが、
早く問題を解決したい思いから、質問のやりとりをしているうちに、どうしても答えを探ってしまう傾向があります。

こちらのBBSでは、何かの問題や情報を共有する事で解決する事を主に運営してきております。
答えて頂いている方々は、その時間や事情の合間をぬっており、また、人により開発環境も違います。
事例はあくまでもヒントとして提示される事が殆どですので、直接の回答や解説は原則求めない様にお願いします。ましてや、「空想」という言葉は慎むべきです。今後誰も協力していただけなくなるかもしれません。

もし、すぐの回答などを得られたい場合は、開発ツール会社などに直接問い合わせるかなどして対応してください。
少し強い言い方で恐縮ですが、BBSの存続のために、ご協力をお願いします。

  • air_variable
  • URL
  • 2011/04/15 (Fri) 08:59:58

返信フォーム






プレビュー (投稿前に内容を確認)