• 締切済み

PICマイコンで、ピンが足りません。

PICでちょっとした電子工作をしています。 18pinのPICを使い、スイッチの組み合わせを適宜変更し出力する回路としてを組んでいます。 PortA(8pinを全て入力/全ピンpullup) PortB(8pinを全て出力) スイッチが1~8まであり、例えば1のスイッチが押された場合、3のスイッチが押されたことにして出力するというような、 スイッチの組み合わせを変更する機能を持たせます。 このスイッチの入出力組み合わせを複数持たせることが今回の目的です。 ロータリースイッチを使い8種類の設定ができる用にするとして、割り当て設定用として新たに3ピンが必要です。 ですが、上記のようにPortAB共に全ピン利用しており、単純に割り当てることが出来ません。 これをどうにかして、利用済みのピンと共存させ18pinで済ませることができないでしょうか。 スイッチの組み合わせは、PIC起動したら変更されることがありません。 ですので、PIC起動時に一度だけロータリースイッチの状態を読めばいいことになります。 なお出力の先につながる回路は、プルアップされたアクティブローの入力端子です。

みんなの回答

回答No.3

7種類の設定でいいのなら、 ロータリースイッチを切り離す(ハイインピーにする)スイッチをつければ良いのでは? PortAの3ピンに切り離すスイッチ経由でロータリースイッチ 切り離された状態はpullupでall highになるのでわかりますよね。 all high以外の7つの設定は使えます。

bel-ray
質問者

補足

うーんちょっとわかりません。 ロータリースイッチの先に、さらにスイッチを入れて起動後に切り離す ということでしょうか。 それでは、毎回起動時に一手間かかりますよね。 コストや実装手間を考えても、28pinの16F57を利用したほうがいいよう な気がしてしました。 というか、そもそも入力にボタンがついているのだから、 起動時に特定のボタンを同時に3秒以上押した場合に、その組み合わせに設定を変更し、EEPROMに変更したナンバーを記録しておけばいいですね。 自己解決ですが、ソフトウェアでやってしまおうとおもいます。 ありがとうございました。

  • pyonmae
  • ベストアンサー率64% (40/62)
回答No.2

こんにちは。 あんまりスマートではありませんが。。。 PortAのピンを一つ出力にふり、2×7のマトリクスを組んでダイナミックスキャンしてはどうでしょう。 また、#1さんが指摘されるように、同時押しはちょっと工夫がいりますね。

bel-ray
質問者

補足

少ない本数でLEDのダイナミック点等を実現するあの手段でしょうか。 ちょっと難しいです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

まず入力スイッチを「同時に押す」ことに対応する必要があるかどうか, ですね. 不要ならエンコーダをかませば原理的には問題が解決するはずです. 「同時押し」に対応しなきゃならないとすると, 「ロータリースイッチを起動時のみ有効にする」ような回路を作る, のかな? 単純に思いついた方法だと ポートA: ロータリースイッチおよび変更前のスイッチ入力. MUX でも噛ます? ポートB: 変更した後のスイッチの出力および「ロータリースイッチを殺す」機能用の出力. FF 1個でできるかもしれない. ってところでしょうか. あまりにも単純に考えているので, もっといいやり方を見たいものですが....

bel-ray
質問者

補足

ボタンですが、同時押しには対応する必要があります。 なおあまり、デバイスは増やしたくないと考えております。 PIC一個とロータリースイッチ、適当な周辺回路で行きたいです。

関連するQ&A