アプリ版:「スタンプのみでお礼する」機能のリリースについて

いま、PIC12F683を用いてCCPモジュールのCapture機能の実験をしています。一応、ビルドはできたので書き込んで動かしてみましたが、思ったとおり(スイッチを押したときにLEDを点灯させる)に動作しませんでした

動作はとしては、押しボタンスイッチを押したときにキャプチャーして
LEDを点灯させるという簡単なものです。

下に使用しているプログラムを掲載しますので、どうしたらいいか教えてください。
// CaptureTest.c
#include <pic.h>
#include "delay.h"
#include "CCP.h"

__CONFIG( FCMDIS & IESODIS & BORDIS & WDTDIS & UNPROTECT & UNPROTECT & MCLRDIS & PWRTEN & INTIO);
__IDLOC(0x00);


unsigned char temp;

ioport();

main(void)
{
//ポートの初期化、入出力設定など
    ioport();
//Captureモード、立ち上がりエッジに設定
setCcpMode(CCP_CAPUTURE_PGE);
     //フラグ(CCP1IF)を「0」にセット
ResetCcpFlag();
     //CCP割り込み許可
setCcpEnable(ENABLED);
//TIMER1のプリスケーラを「1/8」に設定
     T1CKPS1=1;
T1CKPS0=1;
    //外部回路を動作させない
T1OSCEN=0;
    //TIMER1を同期モードにセット
T1SYNC=0;
    //TIMER1のクロックは内部クロックを使用
TMR1CS=0;
    //全割り込み、周辺割り込み許可
GIE=1;
PEIE=1;
     //TIMER1をリセット(0セット)
ResetTMR1();
//TIMER1スタート
    T1_START();
     //CCP割り込みフラグが立つまでチェック
while(ChkCcpFlag()==0);
    //CCP割り込みフラグクリア
ResetCcpFlag();
    //GP3をハイレベルに設定してLEDを点灯
temp=1;
GPIO3=temp;

}
ioport()
{
ANSEL=0x00;
TRISIO=0x04;
}
//CCP.c
#include <pic.h>


void setCcpMode(unsigned char mode)
{
CCP1CON= mode;
}
void setPwmPeriod(unsigned char T)
{
PR2=(T-1);
}

void setPwmDuty(unsigned int duty)
{

DC1B0 = 0x01&duty;
DC1B1 = 0x02&duty;
CCPR1L = 0xFC &duty;
}

void setCcpEnable(unsigned char flag)
{
CCP1IE=flag;
}

void ResetCcpFlag(void)
{
CCP1IF=0;
}

unsigned char ChkCcpFlag(void)
{
unsigned char ret=0;
if(CCP1IF==1) return ret=1;
return ret;
}

void ResetTMR1(void)
{
TMR1H=0x00;
TMR1L=0x00;
}

void T1_START(void)
{
TMR1ON=1;
}

void T1_STOP(void)
{
TMR1ON=0;
}
//CCP.h

#define ENABLED 1
#define DISABLED 0

#define CCP_OFF 0x00
#define CCP_CAPUTURE_NGE 0x04
#define CCP_CAPUTURE_PGE 0x05
#define CCP_CAPUTURE_4th_PGE 0x06
#define CCP_CAPUTURE_16th_PGE 0x07
#define CCP_COMPARE_SET_ON_MATCH 0x08
#define CCP_COMPARE_CLR_ON_MATCH 0x09
#define CCP_COMPARE_INT 0x0A
#define CCP_COMPARE_RESET_TIMER 0x0B
#define CCP_PWM 0x0C

extern void setCcpMode(unsigned char);
extern void setPwmPeriod(unsigned char);
extern void setPwmDuty(unsigned int);
extern void setCcpEnable(unsigned char);
extern void ResetCcpFlag(void);
extern unsigned char ChkCcpFlag(void);
extern void ResetTMR1(void);
extern void T1_START(void);
extern void T1_STOP(void);

「PIC12F683を用いたCapture」の質問画像

A 回答 (1件)

PICは実際に使った事が無いので感で回答します。



まず、オシロスコープがあれば、4pin をモニタすると
原因をつかみやすいのかもしれません。

この様な場合に考えられる原因は

1.4pin が"H"レベルになっていない。
2.4pin は"H"レベルになっているが、時間が短すぎてLEDをドライブできない。
もしくは、ドライブ時間が短すぎて人間の目では確認できない。
3.4pin のドライブ能力が不足している。
4.5pin がスイッチの動作を検知できていない。

と、いった感じでしょうか?

この辺の切り分けが出来れば解決しやすいと思います。


このプログラムは、スイッチに寄る立ち上がりを検知したら
4pinを "H" にホールドしたままプログラムを終了する事を
意図している…って、事で良いのでしょうか?

この回答への補足

あれから、よく配線を調べてみたらスイッチの接続箇所が間違えていました。

接続箇所を変えて動かしたところ、ちゃんと動きました。

お騒がせいたしました。

補足日時:2009/02/26 07:27
    • good
    • 0
この回答へのお礼

ありがとうございます。

いろいろ条件変えて調べてみます。

また、よろしくお願いいたします。

お礼日時:2009/02/13 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!