PIC初心者用掲示板

★★ 質問する前に下記をチェック ★★
(PICに関する疑問は必ず解決するはず)
←←←「電子工作の実験室」へ
←←←← 

■最新ツリー一覧

□このツリー付近のツリー一覧

★新規ツリー作成

◆ 9942. 16f648のコンパレータ機能について [マツ2006/03/16 20:13


9942. 16f648のコンパレータ機能について [マツ2006/03/16 20:13
初めまして。16f648のコンパレータ機能について教えてください。2個の内蔵コンパレータ機能を使って基準電圧を下回った場合にポートBの0と1を立ててみたいと思っています。CMCON,C1OUTのみを使う場合は良いのですが、両方又はCMCON,C2OUTを使うと両方が早い周期で点滅しリセットSWも効かず暴走します。このような使い方はダメでしょうか?CMCON、C1OUTを読んだ後CMCON、C2OUTは読めないのでしょうか?どうか教えてください。
list p=16F648
#include <p16F648A.inc>; Include file
;コンフィグ設定
__CONFIG _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

;RA0-AN0 基準入力
;RA1-AN1 検出入力1
;RA2-AN2 検出入力2
;RA3-AN3 RESET SW
;RA4-AN4 
;RA5-AN5
;RB0-CH1 OUT1
;RB1-CH2 OUT2
;RB2-
;RB3-
;RB4-
;RB5-
;RB6-
;RB7-
________________________

ORGH'0'
ORGH'5'

STABSFSTATUS,RP0
BCFSTATUS,RP0
MOVLWB'00000011';RA2とRA0.RA1ピンの電圧をくらべる
MOVWFCMCON
MOVLWB'00000000'
MOVWFPIR1
MOVLWB'00000000'
MOVWFCCP1CON
BSFSTATUS,RP0
MOVLWB'10000101'
MOVWFVRCON
MOVLWB'10001111'
MOVWFTRISA
MOVLWB'00000000'
MOVWFTRISB
MOVLWB'00000000'
MOVWFPIE1
MOVLWB'00000000'
MOVWFINTCON

BCFSTATUS,RP0

MAIN_LOOP:
BTFSC CMCON,C1OUT ;CMCON,C1OUTが0ならSKIP
GOTO S1 ;1ならS1へ
BTFSC CMCON,C2OUT ;CMCON,C2OUTが0ならSKIP
GOTO S2 ;1ならS2へ
GOTO MAIN_LOOP ;両方0なら戻る
;_______________________

S1BSFPORTB,0 ;ポ−トBの0を立てる
S11BTFSCCMCON,C2OUT ;CMCON,C2OUTを見る
GOTOC1 ;1ならC1へ
GOTOS21 ;0ならS21へ

C1
BSFPORTB,1 ;ポ−トBの1を立てる
S21BTFSCPORTA,3 ;リセットSWはONか?
GOTOS11 ;再度CMCON,C2OUTを見る
CLRFPORTB ;リセットがONならMAINへ戻る
GOTOMAIN_LOOP

S2BSFPORTB,1 ;ポ−トBの1を立てる
S41BTFSCCMCON,C1OUT ;CMCON,C1OUTを見る
GOTOC11 ;CMCON,C1OUTが1ならC11へ
GOTOS31 ;0ならS31へ

C11
BSFPORTB,0 ;;ポ−トBの0を立てる
S31BTFSCPORTA,3 ;リセットSWはONか
GOTOS41 ;再度CMCON,C1OUTを見る
CLRFPORTB ;リセットがONならMAINへ戻る
GOTOMAIN_LOOP

END

9944. Re: 16f648のコンパレータ機能について [eoeo2006/03/17 00:29
ORG H'5'の前に
GOTO STAが抜けてるのでは?
それまで不定の命令が実行(?)される????

答えになって無くてごめんね・・・

9945. Re: 16f648のコンパレータ機能について [初心者?2006/03/17 00:40
>ORG H'5'の前に
>GOTO STAが抜けてるのでは?
>それまで不定の命令が実行(?)される????
>
>答えになって無くてごめんね・・・

程度低すぎorz

9946. Re: 16f648のコンパレータ機能について [eoeo2006/03/17 01:10
高いのを答えられるなら答えてやれば?

9955. Re: 16f648のコンパレータ機能について [マツ2006/03/17 21:41
ソフトに自信が無かったので16f84用に書き直してポートAの0と1をスイッチ入力としてテストしたんですが、きちんと動作するんですよ。ですからソフトはOKだろうと判断したんです。やはりコンパレータ機能の使い方に問題が有るんでしょうか?

9963. Re: 16f648のコンパレータ機能について [ゆん2006/03/18 13:16
CONFIG設定に_LVP_OFFがないので低電圧書込みが有効になっています。
これをOFFにしない場合は動作中RB4/PGMをLowレベルに保たないと書き込みモードに移行してしまいます。

また、特に低電圧動作(4V以下)を行わない場合は_BOD_ONにしておいたほうがパワーオンリセットが確実に行われます。

内部VrefがONになるような設定(VREN=1)になっていますが、コンパレータ動作モードをCM<2:0>=011で使用する場合は、VROEのビットもONにしなければ内部Vrefが接続されません。
その場合は外部(RA2/AN2/Vref)に基準電圧を接続する必要があります。

9966. Re: 16f648のコンパレータ機能について [マツ2006/03/18 19:16
ありがとうございました。早速やってみて結果をご報告します。また教えてください。

9967. Re: 16f648のコンパレータ機能について [マツ2006/03/18 19:40
「ゆん」さん。アドバイスありがとうございました。感激です。教えて戴いた通りに設定して動かしたところ完璧に動くようになりました。なんとお礼を申し上げれば良いでしょう。ほんとにありがとうございました。よくご存じですね。随分永い間悩んでいました。初めての書き込みでしたが助かりました。