• 締切済み

H8/3664Fでパルス幅測定

H8/3664でパルス幅を測定しようと思っています。 秋月の超音波距離計のT7の信号を取り込んでいます。 距離を測る前にパルスの立ち上がりと立下りがちゃんと拾えてるか調べようと思い、下記のようなプログラム(mainループのみですが)を作りました。 ・・・・ PUP:  BTST  #1,@PDR8 ;P81にパルス;立上がりか?      BEQ RED1       JMP @PUP RED1: BSET #3,@PDR5  ;P53にLED-1,ON      BTST #1,@PDR8 ;立下りか?      BNE RED2     JMP @RED1 RED2: BCLR #3,@PDR5 ;RED-1 OFF      BSET #4,@PDR5 ;RED-2 ON     JMP @RED2     .END  しかし、スイッチを入れるとRED-1はつくのですが、RED-1が消えRED-2がつくまでに5秒くらいかかります。最後は命令どうりになっているのでバグではないと思うのですが・・・なぜタイムラグがあるのかわかりません。  オシロスコープでマイコンに取り込む直前の信号を見たのですが、きれいな信号で問題なさそうです。  タイムラグがある原因を教えてください。どうかよろしくお願いします。

みんなの回答

  • techa
  • ベストアンサー率60% (41/68)
回答No.1

いきなりアセンブラか...とおもったのはおいといて、 BTSTで判定しているわけですが、立ち上がり/立ち下がりを みているわけではなく、ONかOFFかをみているだけですよね PUP : BTST BEQ RED1 BCLR ==>LED1off JMP @PUP RED1: BCLR ==> LED1on JMP @PUP でよさそうなもんですね。 で結論なのですが、ただしく動いているんじゃないでしょうか。 ただ、超音波なので、ON/OFFが非常に頻繁に繰り返されて いるはずで、LEDの消灯の目視による確認ができないだけでは ないですか? オシロがあるなら、入力(P81)とLED出力(P53)を観測すれば 動作の確認はできるとおもいます。 オシロがないとすれば、まず、超音波ではなく、SWなどをつけて ON/OFFさせ、それに応じた処理が正しくできているかどうか を確認するなどの方法をとるべきでしょうね。 いずれにせよ、何事も一歩づつすすめることが肝要だとおもいます。

st03s40
質問者

補足

 丁寧な回答ありがとうございます。返答が遅くなって申し訳ありません。 (旅行で・・・)  いろいろやってみたのですが、SWではできました。 ですが、ONのときLEDを点灯させ、OFFになったとき、別のLEDを点灯させようとしているのですが、一瞬でOFFのLEDがつくと思うんですけどそれが数秒たってつきます。  パルスの電圧を測ったら6.2Vあってそれが原因なのでしょうか?  最終的にはある距離になったらLEDが点灯するようにしたいです。(インプットキャプチャで一回やってみましたがうまくいかず)  初心者の質問で申し訳ありません。わかれば教えてください。

関連するQ&A