2012年5月1日星期二

PICマイコンのプログラムで分からないことがあるのですが・・・。

PICマイコンのプログラムで分からないことがあるのですが・・・。

外部割り込みとして5Vの矩形波をRB0に入力し、その立ち上がりでパルスを出そうとしています。



そこで以下のプログラムを書いたのですが、うまく動作しませんでした。

なぜ、うまく動作が出来ていないのか把握できていない状況です。



どのような問題があるのか、ご教授のほどよろしくお願いします。





#include <16f873a.h>

#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP

#use delay(CLOCK = 20000000)



static long pulse;



#int_EXT

void EXT_isr()

{

output_high(PIN_B1);

delay_us(10);

output_low(PIN_B1);

}



#int_CCP2

void CCP2_isr()

{

long rise,fall;

rise = ccp_1;

fall = ccp_2;

if(fall > rise)

pulse = fall - rise;

else

pulse = (0xffff - rise) + fall;

}





void main()

{

set_tris_A(0);

set_tris_B(0x01);



setup_ccp1(CCP_CAPTURE_RE);

setup_ccp2(CCP_CAPTURE_FE);



setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);



enable_interrupts(INT_CCP2);

enable_interrupts(INT_EXT);

ext_int_edge(L_TO_H);

enable_interrupts(GLOBAL);



if (pulse != 0)

disable_interrupts(INT_CCP2);



while(1)

{

}







うまくいかないとはどういうことですか?

「こうしたい」けど「こうなってしまう」と書かないと、なにがなんだかわかりません。

プログラムはたいていあっています。

あっている=作ったとおりに動くということです。

あなたの期待通りでないだけで・・・

もうひとつ、問題の切り分けのためにCCP2関連を消したらどうなりますか?



>出力の電圧値が低く、タイミングも立ち上がりからずれています



私はCを使いませんが、ソースをざっと見た限り変な感じはしません。

CCP関係の文を全部消しても起こりますか?

そもそも、電圧が低いというのは、正常なデジタル回路では起こりえません。

(あり得るとすれば、パルスが継続していてテスターでははかれないとき)



電圧はオシロスコープで確認したんですよね。

1kHzで10μsのパルスが発生していて、ピーク電圧が5Vを下回っていると言うこと?

タイミングについても、PICの処理時間を調べた上のことですよね。

割り込みがかかった瞬間に出力が変化するわけではないので。



どのくらいタイミングが違って、何ボルトの出力なのか具体的なことを書かないと、何が起こっているのかわからないです。

エンジニアというものは文学的な表現ではなく、数字で話をするべきです。



もう一つ、ハードウエアは完璧?

1kHzではなく、単発のパルスではどう?

いろんな条件で、問題の切り分けを行いましょう。

没有评论:

发表评论