なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

PIC18F2550でUSB入力デバイスを作る(4)。

Posted by arms22 on 2008年09月08日 0  0

P1430010.jpg

6つのロータリエンコーダを使ったキーボードをブレッドボード(パンじゃないですよ!)に実装しました。とりあえずSafariに特化して次のようにキーを割り当てた。左のロータリエンコーダから右回り、左回りの順で記載。

  • TAB、シフトTAB
  • コマンド+]、コマンド+[ ※Safariでは「次に進む」「前へ戻る」
  • カーソル→、カーソル←
  • カーソル↓、カーソル↑
  • ページダウン、ページアップ
  • Volアップ、Volダウン
ロータリーエンコーダのデコード方法はELM-ChaNさんのページが参考になります。ロータリーエンコーダの出力(A相、B相)を2bitのバイナリコードとして扱い、前回値と今回値をテーブルのインデックスとし、変換テーブルを使って回転方向を判定します。

ロータリーエンコーダの使い方
http://elm-chan.org/docs/tec/te04.html

usbencoders.png

回路図です。ロータリーエンコーダの出力をPICのポート1つ1つに割り当てています。6ロータリーエンコーダ×2出力で12ポート使用しています。このままだとLEDやスイッチを追加していくにはポートが足りなくなりそうです。そこで、次のようにマトリクス上にロータリーエンコーダを配線する方法を思いつきました。こうすれば12ポートを7ポートまで減らせるかもしれない。

matrix.png

SEG1-SEG2は常時入力ポートにしておき、読み取りを行う直前にSEG1-SEG2いずれかを出力Lにする。SEG1-SEG2を順番に出力Lにして、REnc1-A/REnc1-B、REnc2-A/REnc2-Bを読み込めば、6ロータリーエンコーダすべての値が読みとれる。SEG1-SEG2は3-to-8-ラインデコーダが使える、、あ、ラインデコーダじゃ非アクティブポートをHi-Zにできないわ。

PICのファームウェアは前回作成したHIDKeybordをベースに作成しました。USB経由でファームウェアを更新できるようUBWに対応しました。UBWについてはこちらのWikiが参考になります。

memo/UBW - 千秋ゼミ
http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?memo%2FUBW

UBWに対応する為にやるべきことは次の四つ。
  • ブートモードに入るためのスイッチを追加する
    SW1をMCLR、SW2をRC2
  • ブートローダが使用するLEDを追加する
    LED1をRC0、LED2をRC1に接続。
  • PICライタでブートローダを書き込む
    ブートローダを1度書き込めば以降、ブートモードで立ち上げて、USB経由でファームウェアをダウンロードできる。
  • ファームウェアをブートローダに対応する
    リンカスクリプトをブートローダ対応版に差し替える。

Ads by Google

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。