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ではなく、単発のパルスではどう?
いろんな条件で、問題の切り分けを行いましょう。
没有评论:
发表评论