このQ&Aは役に立ちましたか?
PICのポートからの読み込みが正しくできない
2023/10/15 11:19
- 16F648AのRA1,RA0にSW信号を抵抗でプルアップして入力、RA2はLEDを抵抗を通して直接駆動しています。
- SW信号を読み取れていないようですが、17,18ピンの電圧を見るとSWの動きと正しくON/OFFしています。
- 見落とししていることがあると思われますが、解決できません。お気づきの点があれば教えてください。
PICのポートからの読み込みが正しくできない
2007/09/03 23:50
先月は16F648AのRA4出力が正しく出来ないを質問した者です。 またしてもお願いします 16F648AのRA1,RA0 にSW信号を抵抗でプルアップして入力、RA2はLEDを抵抗を通して直接駆動しています
TRISA はこれに対応してXXXX X011 を設定していて プログラム中でRA1を押されたらLED ON, RA0が押されたらLED OFF となるようにテスト用プログラムを作りましたが SW信号を読み取れていないようです
17,18ピンの電圧を見るとSWの動きと正しくON/OFFしています
先月同様見落とししていることがあると思っていますが 正しい、多分正しいと思遺恨でいますこともあって解決できません お気づきの点がありましたら教えてください お願いするばかりですが宜しくお願いします
質問者が選んだベストアンサー
データシートにPORTAのイニシャライズのためのサンプルコードがあります。
;EXAMPLE 5-1: INITIALIZING PORTA
CLRF PORTA ;Initialize PORTA by setting output data latches
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O functions
:
:
もし、コンパレータをオフにしていないとすれば、ご質問の状態になったと思います。
このQ&Aは役に立ちましたか?
この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。
その他の回答 (4件中 1~4件目)
RA0,RA1の端子が内部で断線している可能性もあるため、
実験的に、RA0,RA1を出力に設定して、High,Lowを出力してはどうでしょうか。
RA0,RA1の内部断線はなさそうですね。
RA0,RA1コンパレータがあるようですが、CMCONの設定はいかがですか。
お礼
2007/09/05 12:06
アドバイスありがとうございます RA0,RA1を出力ピン設定しまして ON/OFF を繰り返すようプログラムしました 結果は ON/OFF を2ピンとも繰り返しています
> 17,18ピンの電圧を見るとSWの動きと正しくON/OFFしています
H/Lがしっかり取れていないと言った簡単なミスではないですか?
例えば、L側で電圧が下がり切れていないとか、ハイインピーダンスに
なっているとか。
(ちょっと失礼な回答ですが、違ったらお許しください。)
補足
2007/09/05 07:31
おはようございます お返事が遅れていまして申し訳ありません
テスターでピンの出力を見ましたところ SWのON/OFFで RA0は4.93Vと89.3mV、RA1は4.93Vと91.4mVとなっています 決して失礼なことはありません
前回もそうですが本当に基本的なことで誤っているのだと思っています そうしたことが判っていないことからこうして助けていただいているのですから
毎度JOです。
16F648AにはADコンバータがありませんから、ADコンバータに起因するトラブルでも無さそうです、
そこで問題を切り分けてみられては、いかがでしょうか!
まずは、プログラム通りRA2が出力されているかを確認後、入力の確認と進んでみられては?
TRISA はこれに対応してXXXX X011 この後
BCF STATUS,RP0 ページ切り替え
MOVLW B'00000100' RA2に出力してみる
RA2がLOでLED点灯の場合はB'00000000'
MOVWF PORTA ポートに出力!
この状態でLEDが点灯しない(PICの出力がLED点灯させる状態に無い)場合、まだプログラムに問題があります。
16F648Aのデタシート
http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf
毎度JOです。
プルアップされたRA0,RA1の端子電圧が、スイッチの動作により0V - 5Vと変化するのが確認できたなら、やはり問題はプログラムにあります、
スイッチが動作する時には「チャタリング」が必ず発生します、
http://elm-chan.org/docs/tec/te01.html
これを回避するには、ポートを1回のみの確認で済まさず、ポートを確認し続ければ、チャタリングの問題を回避できます、
list p=16F648A
INCLUDE<16F648A.INC>
BSF STATUS,RP0 ページ切り替え
MOVLW B'00000011'
MOVWF TRISA ポートセット
BCF STATUS,RP0 ページ切り替え
HOGE
BTFSS PORTA,0 RA0を監視
GOTO HOGE1
BSF PORTA,2 出力H
GOTO HOGE
HOGE1
BCF PORTA,2 出力L
GOTO HOGE
入力ポートを監視してて、変化があったら処理をするのではなく、ポートの状態をそのまま出力ポートへ出してみる、
上記の検証により、入力ポートが読めているか確認できます。
追記
コンフィグ(CONFIGURATION WORD REGISTER)でWDTはOFFとなっていますか?
コンフィグ設定がされていると、デェフォルトでWDTが18ms周期で掛かってしまい、リセットが掛かり続けます、
お礼
2007/09/05 07:41
ありがとうございます
1. コンフィグでWDはOFFにしていまして書き込み器でもそのように設定し
てありました
2.先にSWをON/OFFしたときの電圧を確認しました
3.示していただいているプログラムをそのままコピーして機械語に直して実
装しましたが SWのON/OFFでLEDは点滅していません
念のためSWを長時間 短時間押すなどしましたが結果は変わりませんでし た
補足
2007/09/04 07:22
またお世話になります まさかああした時間帯にお返事をいただけるとは思いませんでしたありがとうございます 状況説明が足りませんでした RA2 LEDへの出力は上手くいっていまして(点滅させることは出来ています)これとRA0,RA1に接続されたSW(+5Vに対して10kΩでプルアップしています)の状態が読み込めていないと判断しています
お礼
2007/09/05 14:55
同じ過ちの繰り返しをしていまして皆さんのご迷惑をおかけします CMCON
操作によって 読み込みができるようになりました。 正直なところ全く知識がありませんでした 不勉強からお騒がせいたしました 回答・アドバイスをいただいた皆さんにお礼申し上げます ありがとうございました