---手パ(手動パルスジェネレーター)切り替え器制作(2)---

 ロータリースイッチの機能をPICに分担させるのに、ちょっと
 工夫します。
 ロータリスイッチの場合隣り合った数字の移動しかできません。
 4接点だと4までの隣同士の数字にしか移動できません。
    1←→2←→3←→4
 1→→4はできません。
 スイッチ一つをPICに分担させると、ダブルクリック等の技を
           (「長押し」も可のアドバイス受けました。)
 検出しないと逆戻りをさせることはできませんので、次のよう
 にします。
 スイッチが1回押されるとカウンターを1加算するようにします。
 一方参照テーブルは、
   1←→2←→3←→4←→3←→2
 のように、6個作っておきます。
 このテーブルにカウンターを次のように割り当てます。
   1←→2←→3←→4←→3←→2
   ↓  ↓  ↓  ↓  ↓  ↓
   1  2  3  4  5  6
 こうすることで、カウンターを加算することで、常に隣の数字
 に移動ができます。カウンターが6になったら、にもどし
 ます。
 (1ではだめでした。割込処理を抜けるとき0にします。
  if(counter==6){counter=0;}は、swtch文の後です。
  割込処理のキーチェックで必ず、1加算されます。)

 これをCのプログラムにすると、

 

 みたいな感じになります。実際には、「待ち時間を作る」、
 「スイッチが押されたフラグのSWをクリアーする」等の
 細かい指示が必要です。
 また、もう一つスイッチを使うなら、2→→1、等の逆戻り
 もできますが、一つだけの予定なので、このままいきま
 す。

“---手パ(手動パルスジェネレーター)切り替え器制作(2)---” への9件の返信

  1. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
    小林電機さんですか…前言(ショーティングタイプを売っているの?)撤回しますm(_._)m
    たしかに測定器やアンプなどに使おうとするとショーティングタイプですよね。
    良く調べたらマルツにも両タイプ有りました。ノンショーティング\”タイプとしては、秋月の \”ロータリースイッチ(2回路6接点)[RS-2688-0206-38N] 通販コード P-00101\” が\\150と激安ですね。

  2. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0
    oldmanさん、こんばんは。書き込みありがとうございます。
    問い合わせに、明快なお答えありがとうございます。弱電関係もまだまだで、分からないことだらけです。
    ロータリースイッチを購入しようと思い、スマホで検索していたら、真っ先に、
    http://cobaden.net/?mode=srh&cid=&keyword=%A5%ED%A1%BC%A5%BF%A5%EA%A1%BC%A5%B9%A5%A4%A5%C3%A5%C1&x=45&y=9
    が飛び込んできて、考えてしまった訳です。
    どうもワイヤードロジックは苦手です。ご紹介いただいたICもちょっと、勉強してみようと思います。これらのIC使えれば、いろいろ幅が広がるでしょうね。
    私には、ちょっと、未知なる分野です。
    スパム対策で、記事が保留になっていて、気がつくのが遅くなりました。URLが複数記載されると、保留になるようです。

  3. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0
    猛牛ロックさん、追伸です。
    >ローテーションはしないで何度かの適当な連打でホームポジション(1)に送って、
    >そこから数えながら2,3と変えていくのが好みですね。
    この方が、使い勝手はいいかもですね。今回は、ロータリースイッチの肩代わりということで、考えてみました。
    後戻り、できない、ロータリースイッチです。(笑)
    長押し、ダブルリック?等判定するとなると、プログラムが面倒なので、シンプルにいきました。

  4. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0
    猛牛ロックさん、こんばんは、書き込みありがとうございます。
    さすが、猛牛ロックさんです。このままでは、カウンターの6がひっかからないよな、
    なんて思いつつでした。
    それに、割り算のあまり、っていう手もありでしたね。これだと、if文もいりませんね。
    一回の電源ONで、何千回も切り替えをすることは、まず、ないでしょうから、
    上限の制限をしなくても、オーバーフローすることはないかもですね。
    アドバイスありがとうございます。一通りうごいたものを、もう少し後で、アップします

  5. AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
    こちらにコメントさせて頂きます。
    ・ロータリースイッチは\”通常?\”はノンショーティングです。
     ショーティングが使われるのは(私の知る限り)抵抗を並べて作る高級アッテネーターとテスターの内部位じゃないでしょうか。ロジック(IC)の世界では、\”トーテムポール出力(ググッてみてください)\”が大多数で、一部のインターフェースICのみが出力同士をつないでも大丈夫なオープンコレクタタイプです。と、言うことで通常は\”ノンショーティング\”タイプを買っておけば汎用性が高いと思います。
     そもそも、ショーティングタイプが一般的に販売されているの? ( 参考リンク:http://0r.com/rs/ )
    ・切り換え器の方式について
     忘れないための勉強も大事ですが、ワイヤードロジックの方が物量が少ないかも…。
     共立エレショップに以下のIC類が売っています(残念ながら東京のお店にはありませんでした)。
     (1)のカウンターICの下2桁を、(2)または(3)のICの入力にすると1~4の何れかがLowになり、この信号を使って(4)の各ラインを on/off制御すれば パルスジェネレータからの信号を振り分けられます(upボタンとdownボタン、表示用のLEDなどは別途)。
     (3)だと clock, directionの両信号をひとつのICで扱えますが、(2)の方が8ポジションまでの拡張性がありますね。どちらを使うかは好みでお決めください。
    (1) 74HC193 DIP:SYNCHRONOUS UP/DOWN BINARY COUNTER ( http://eleshop.jp/shop/g/gT11522/ )
    (2) 74HC138:3-LINE TO 8-LINE DECODERS/DEMULTIPLEXERS ( http://eleshop.jp/shop/g/gT11496/ )
    (3) 74HC139 DIP:DUAL 2-LINE TO 4-LINE DECODERS/DEMULTIPLEXERS ( http://eleshop.jp/shop/g/gT11498/ )
    (4) 74HC125 DIP:QUADRUPLE BUS BUFFER GATES WITH 3-STATE OUTPUTS ( http://eleshop.jp/shop/g/gT11490/ )

  6. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    もう一点。
    > もう一つスイッチを使うなら、2→→1、等の逆戻り
    「長押し」を区別すると付けなくてもいけますよ。
    実際の使い勝手がどうなるかは未知数ですが。
    私としては、何も見ないで操作したいので=現在の状態が判らなくなったりするので、
    ローテーションはしないで何度かの適当な連打でホームポジション(1)に送って、
    そこから数えながら2,3と変えていくのが好みですね。

  7. AGENT: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:DOWNLOADED)
    なるほど。5以上に割り当てて1から6のローテーションさせるのですね。
    勉強になりました。今度この手を使ってみます。
    > カウンターが6になったら、1にもどし
    となっていますけど7なら1にするですよね。
    掲載の文では12345123となりますよ。
    counter++;
    if(counter==7) counter=1;
    とシンプルな表現が良いんじゃないですか。
    1行なら↓の書き方で。
    if(){
    counter=counter%6+1;
    switch(){
    case 1:
    ();
    break;
    case 2:
    case 6:
    ();
    break;
    case3:
    case5:
    ();
    break;
    case4:
    ();
    break;
    }
    }

  8. AGENT: Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0
    TRさんおはようございます。書き込みありがとうございます。
    単に、切り替えをするだけのプログラムです。ロータリースイッチの方が、お手軽だと思います。
    今回ロータリースイッチにしなかったのは、手パに使われているロータリースイッチの種類(ショーティングかノンショーテグ)が不明だったことと、PICのプログラム、時々しないと忘れてしまうからです。
    ロータリースイッチは、oldmanさんが書き込みしてくださったので、お聞きしてみました。

  9. AGENT: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
    maboさん、おはようございます。
    物凄い仕掛けですね!!
    各軸の切り替えと減速率を変えるには、こういった仕掛けが必要なんですか?
    むずそう!!
    手パ~ロータリースイッチ~SS基板というわにはいかないのですか?幼稚で済みません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA