• 締切済み

PIC マイコンの原因不明の破壊

PIC16F873A を使用してます RB ポートの入力に変化があったとき、RB の内容によってあるパターンを1秒間だけ RC に出力する内容で動作させています ところが、おそらく電源の ON/OFF のタイミングで RB ポートが壊れてしまいます 具体的な症状として、入力ポートにもかかわらず勝手に Low 状態(著しく電圧が下がる状態)になり、そのまま Low 状態と誤認識してしまいます 一度 Low に落ちてしまったピンは、プログラムを書き直してもずっと Low の状態です RB ポートのうち、どのポートが壊れるのかはランダムです 複数壊れる場合もあります RB へのプルアップ抵抗は 100K Ωです 電源はバッテリーから DCDC コンバーター(OBR05SC0512)で5Vにしたものを供給しています ノイズ対策の為、DCDC コンバーターは別の基盤に取り付け、該当の基盤から離しています 4.98V で安定出力しているようです PIC の電源付近にノイズ対策のため、積層セラミックコンデンサの 104 を置いてます 該当箇所のプログラムは以下のとおりです if (InputMemory != input_b()) { InputMemory = nput_b(); if ((!input(PIN_B0)) && (CountStart != TRUE)) { output_c(Speed0); } else if ((!input(PIN_B1)) && (CountStart != TRUE)) { output_c(Speed1); } else if ((!input(PIN_B2)) && (CountStart != TRUE)) { output_c(Speed2); } else if ((!input(PIN_B3)) && (CountStart != TRUE)) { output_c(Speed3); } else if ((!input(PIN_B4)) && (CountStart != TRUE)) { output_c(Speed4); } else if ((!input(PIN_B5)) && (CountStart != TRUE)) { output_c(Speed5); } CountStart = TRUE; TimerCount = 0; for (; CountStart == TRUE; ) { if (InputMemory == input_b()) { TimerCount++; delay_ms(100); if (TimerCount == 10) { output_c(0b11111111); CountStart = FALSE; } } else { CountStart = FALSE; } } } else { output_c(0b11111111); } お手数ですが、ご解答よろしくお願いいたします

みんなの回答

回答No.1

>RB へのプルアップ抵抗は 100K Ωです プルアップが軽すぎるのではないでしょうか? データシートを読むと、PBの内部のWeak PullUpですらTypical=20kΩ程度ありますが・・・。 10kオームくらいにすると、どのような動きになりますか?

zero-spica
質問者

補足

ご解答ありがとうございます ご指摘のプルアップ抵抗を 10k、1k と落として試してみましたが、同様の破壊が起きました ロットの問題も疑い、PIC16F873(A なしの別ロット)でも試してみましたが、やはり同様の破壊がおきました ピンが Low に勝手に落ちて Low と認識される以外は正常に動作しているみたいです 完全にお手上げ状態です...

関連するQ&A