★GYROSTICKの制御装置製作プロジェクト

 パソコンとのインターフェースとして位置入力は、雑誌にマウスのUSBインターフェース実験記事がありますので、それを参考にして製作してみたいと思います。使用する基板は、IPIという会社からすでに買っておいたUSBF877という基板で、16F877というPICマイコンとUSBN9604というUSBインターフェースを搭載したものです。16F877は40ピンの大きいPICマイコンで使っていない入出力ポートがだいぶありますので、ここにGYROSTICKからのセンサー入力を入れてやります。
 文字入力の方は、USBでパソコンとつなぐには、いろいろ調べないといけないことが多く、時間の関係で他の方式でやりたいと思います。当初USBキーボードを買ってきてこれのキー接点から線を引っ張り出してPICマイコンで接点制御してやろうと考えていました。しかし、その後考えた結果、次のようにしてできないか試行してみたいと思います。

 USB以前にキーボード入力インターフェースとして使われていたPS/2ポートを作成して実験してみる予定です。USBF877基板の入出力ポートからPS/2ポートを構成してパソコンにキー入力できないか実験してみます。それにしてもキーコードやパソコンとキーボードのやりとりなど調べることが出てきますので、果たしてうまくいくかどうかはわかりません。・・・途中で計画変更になる可能性大。
 GYROSTICKの機械工作と平行してこちらの電子工作もやっていきたいと思います。まずはロータリーエンコーダセンサからの出力などを用いてVC-6045デジタルオシロの使い勝手を確かめてみたいと思います。
 ※文字入力インターフェースもとりあえずPS/2でやってみることにしました。

 以降、プロジェクト記録や覚え書きなど−−−−−−−−−−−−−−−−−−−−−−−−−−−−
◆2004.5.29(土)
 メイン制御PIC16F877のレジスタ初期化部分コーディングほぼ終了。ポートをすべて使用し、タイマも2つ使うため各種の設定がありたいへんです。具体的なタイマ値は計測しながら試行錯誤でやることになるか。

◆2004.5.27(木)
 メイン制御PIC16F877のレジスタ初期化部分コーディング中

◆2004.5.26(水)
 PIC16F876(X、Y、Z軸のA/D変換用)プログラムの作成一応終了

◆2004.5.25(火)
 PIC16F876(X、Y、Z軸のA/D変換用)プログラムのメインルーチンをコーディング中

◆2004.5.22(土)
 PIC16F876(X、Y、Z軸のA/D変換用)プログラムの初期化とA/D変換部分を作成

◆2004.5.21(金)
  ★基本設計を変更
   ・X、Y、Z軸の位置センサをロータリーセンサから可変抵抗器に変更する(10ビットデータ)
   ・X、Y、Z軸の制御は16F876×1個とする
 〔基本設計No.3<文字入力・位置入力IFとしてPS/2を使用>〕・・・5/22修正。
 ・PIC16F876(X、Y、Z軸のA/D変換用) 注) 入・出力はPIC16F876からの方向
  RB0〜RB7,RC0,RC1・・・[出力] 位置入力データを出力(文字データは877側で生成する) →16F877
  RA0・・・・[入力] X軸可変抵抗器からのアナログ電圧入力 ←X軸可変抵抗器
  RA1・・・・[入力] Y軸可変抵抗器からのアナログ電圧入力 ←Y軸可変抵抗器
  RA2・・・・[入力] Z軸可変抵抗器からのアナログ電圧入力 ←Z軸可変抵抗器
  RA3・・・・[入力] VREF+入力 ←基準電圧
  RC2,RC3・・・・[入力] 位置入力データの指定データ ←16F877
  RC4・・・・[入力] 16F877からの出力要求信号(この信号により、16F876は位置データを出力する) ←16F877
  RC5・・・・[出力] データ出力準備完了後、16F877へ信号出力(16F877はこの信号ONで位置データを取得する) →16F877
  (RA4,RA5)・・(未使用)
  (RC6,RC7)・・(未使用)
 ・PIC16F876(or873)(ボタン入力用) 注) 入・出力は16F873(or876)からの方向。チャタリング対応だけに使うのはもったいないが試作品なので
  RB0〜RB5・・・[入力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として入力 ←スティック各ボタン
     〃  ・・・[ 〃] 位置入力時=左・右クリックボタンデータ等として入力 ←スティック各ボタン
  (RB6,RB7)・・・・(未使用)
  RC0〜RC5・・・[出力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として出力(チャタリング修正出力) →16F877
     〃  ・・・[出力] 位置入力時=左・右クリックボタンデータ等として出力(チャタリング修正出力) →16F877
  (RC6,RC7)・・・・(未使用)
  RA0,RA1・・・・[入力] 入力文字モード表示データ(ひらがな・カタカナ・英数字) ←16F877
  RA2〜RA4・・・[出力] 入力文字モード表示用 →表示LED(3個)
  (RA5)・・・・・・・(未使用)
 ・PIC16F877(メイン制御、PCとのインターフェース制御用) 注) 入・出力は16F877からの方向
  RB0〜RB7,RD6,RD7・・・[入力] X、Y、Z軸位置データを入力 ←XYZ軸16F876(10ビットの位置データ)
  RA0〜RA5・・・[入力] スティックからの各ボタンON,OFFデータ ←ボタン・LED16F876
  RC0,RC1・・・・[入力] 文字入力用PS/2インターフェース(DATA,CLK) ←PC
  RD0,RD1・・・・[出力] 文字入力用PS/2インターフェース(DATA,CLK) →PC
  RC2,RC3・・・・[入力] 位置入力用PS/2インターフェース(DATA,CLK) ←PC
  RD2,RD3・・・・[出力] 位置入力用PS/2インターフェース(DATA,CLK) →PC
  RC4,RC5・・・・[出力] 位置データの選択信号(X、Y、Z軸位置データのうち一つを選択) →XYZ軸16F876
  RD4・・・・・・・・[出力] XYZ軸16F876へのデータ出力要求信号 →XYZ軸16F876
  RD5・・・・・・・・[入力] XYZ軸16F876からのデータ準備完了信号 ←XYZ軸16F876
  RC6,RC7・・・・[出力] 入力文字モード表示データ →ボタン・LED16F876
   ※ 16F877のすべてのポートを使っているため詳細設計で制限事項に引っ掛かる可能性あり

◆2004.5.20(木)
 センサを安価な可変抵抗器を使ってやってみようかと考えています。ロータリーエンコーダは正確な位置測定ができるが高価で測定のための制御回路もだいぶ複雑になる。PICの組込A/D変換機能を使えばこの装置の回転位置測定は十分できそうだ。また装置へのセンサの取付も楽になりそうだ。基本設計を変更する予定。

◆2004.5.17(月)
 英数字モードのときの文字配列について少し検討した。やはり素直にアルファベット順に配列した方がよさそうだ。

◆2004.5.15(土)
 少し、ボタン入力用16F876プログラムのタイマカウンタ部を修正。まだ細かい調整個所があるが試験できるだろう。16F877メインプログラム作成開始。

◆2004.5.14(金)
 ボタン入力用16F876プログラムのα版作成。細かい調整個所が残っているが骨組みができた。あと、いよいよメインの16F877にかかりたい。PS/2制御もあるので一応出来上がったら基板を作って試験しながら詰めていくことになると思う。

◆2004.5.13(木)
 X、Y軸16F876プログラムのα版作成。次はボタン入力用16F876プログラムに取りかかる予定。

◆2004.5.12(水)
 Z軸16F84プログラムのα版作成。つづいてX軸、Y軸16F876プログラムに取りかかる。

◆2004.5.11(火)
  ★基本設計をバージョンアップ
   ・X方向、Y方向の位置データを8ビットから10ビットに変更
   ・Z方向の位置データを4ビットから8ビットに変更
   ・X、Y軸ロータリーセンサ用のマイコンをポート不足により16F84から16F876に変更
   ・16F877からのリセット信号関連を削除
 〔基本設計No.2<文字入力・位置入力IFとしてPS/2を使用>〕・・・5/12,5/21修正
 ・PIC16F876(X、Y軸ロータリーセンサ用) 注) 入・出力はPIC16F876からの方向
  RB0〜RB7,RA0,RA1・・・[出力] 位置入力データを出力(文字データは877側で生成する) →16F877
  RA2,RA3・・・・[入力] ロータリーセンサからのA,B相信号入力 ←ロータリーセンサ
  RA4・・・・・・・・[入力] 16F877からの出力要求信号(この信号により、16F876は位置データを出力する) ←16F877
  RA5・・・・・・・・[出力] データ出力準備完了後、16F877へ信号出力(16F877はこの信号ONで位置データを取得する) →16F877
  (RC0〜RC7)・・(未使用)
 ・PIC16F84(Z軸ロータリーセンサ用) 注) 入・出力は16F84からの方向
  RB0〜RB7・・・[出力] 位置入力データ →16F877
  RA0,RA1・・・・[入力] ロータリーセンサからのA,B相信号入力 ←ロータリーセンサ
  RA2・・・・・・・・[入力] 16F877からの出力要求信号(この信号により、16F84は行コードを出力する) ←16F877
  RA3・・・・・・・・[出力] データ出力準備完了後、16F877へ信号出力(16F877はこの信号ONで行コードデータを取得する) →16F877
  (RA4)・・・・・・・(未使用)
 ・PIC16F876(or873)(ボタン入力用) 注) 入・出力は16F873(or876)からの方向。チャタリング対応だけに使うのはもったいないが試作品なので
  RB0〜RB5・・・[入力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として入力 ←スティック各ボタン
     〃  ・・・[ 〃] 位置入力時=左・右クリックボタンデータ等として入力 ←スティック各ボタン
  (RB6,RB7)・・・・(未使用)
  RC0〜RC5・・・[出力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として出力(チャタリング修正出力) →16F877
     〃  ・・・[出力] 位置入力時=左・右クリックボタンデータ等として出力(チャタリング修正出力) →16F877
  (RC6,RC7)・・・・(未使用)
  RA0,RA1・・・・[入力] 入力文字モード表示データ(ひらがな・カタカナ・英数字) ←16F877
  RA2〜RA4・・・[出力] 入力文字モード表示用 →表示LED(3個)
  (RA5)・・・・・・・(未使用)
 ・PIC16F877(メイン制御、PCとのインターフェース制御用) 注) 入・出力は16F877からの方向
  RB0〜RB7,RD6,RD7・・・[入力] X方向、Y方向位置データを入力(Z軸はRD6,RD7は未使用) ←X軸16F876、Y軸16F876、Z軸16F84 注)X方向、Y方向位置データは10ビットの位置データとする。Z方向は8ビット。
  RA0〜RA5・・・[入力] スティックからの各ボタンON,OFFデータ ←ボタン・LED16F876
  RC0,RC1・・・・[入力] 文字入力用PS/2インターフェース(DATA,CLK) ←PC
  RD0,RD1・・・・[出力] 文字入力用PS/2インターフェース(DATA,CLK) →PC
  RC2,RC3・・・・[入力] 位置入力用PS/2インターフェース(DATA,CLK) ←PC
  RD2,RD3・・・・[出力] 位置入力用PS/2インターフェース(DATA,CLK) →PC
  RC4,RC5・・・・[出力] RB0〜RB7へ入力するデータの選択信号(X方向、Y方向位置データおよび行コードデータのうち一つを選択) →RB0〜RB7にデータ入力するセレクタICへ
  RD4・・・・・・・・[出力] X、Y、Z軸16F876へのデータ出力要求信号 →X、Y、Z軸16F876
  RD5・・・・・・・・[入力] X、Y、Z軸16F876からのデータ準備完了信号 ←X、Y、Z軸16F876
  RC6,RC7・・・・[出力] 入力文字モード表示データ →ボタン・LED16F876
   ※ 16F877のすべてのポートを使っているため詳細設計で制限事項に引っ掛かる可能性あり

◆2004.5.10(月)
 どうも基本設計No.1は変更する必要があるようだ。X軸、Y軸制御16F84と16F877間の位置入力データのデータ数を8ビットから10ビットに変更したい。8ビットとした場合、何回にも分けて送らなければならないがどうも問題があるようだ。

◆2004.5.8(土)
 初期化部分をコーディング終了。ロータリーエンコーダのA相、B相出力の監視部分にかかる。一応、感じとしてロータリーエンコーダ出力用プログラムは設計どおりにいきそうだ。

◆2004.5.7(金)
 ロータリーエンコーダ出力用16F84のプログラムの初期化部分をコーディング開始。以前のプリンタインターフェースのコードを活用する。このプログラム確認用に仮に16F877の役をさせる16F84プログラムも作らなければならないようだ。

◆2004.4.29(木)
 ロータリーエンコーダの出力確認。見にくいが、下が時計回りのA相(下)、B相(上)で上が反時計回りのA相(下)、B相(上)。かなり速く回して約190μs周期。
ロータリーエンコーダは、日本サーボ(株)のMX402P-1000U01で1000p/rのもの。高速でスキャンしないといけない。

◆2004.4.28(水)
 基本設計No.1で16F877と16F84間の文字入力・位置入力指示、設定通知信号が無いことに気付く。16F84ではロータリーセンサのデータ出力のみとし16F877側のみで文字・位置モード制御を行うか。
 16F877のRB0〜RB7ポートに三つのデータ(X方向、Y方向位置データおよび行コードデータ)をセレクタで入力することとする。16F877のポートを全て使用。設計変更の可能性あり。

◆2004.4.27(火)
 〔基本設計No.1<文字入力・位置入力IFとしてPS/2を使用>〕(4/27,28修正)
 ・PIC16F84(X・Y軸ロータリーセンサ用) 注) 入・出力は16F84からの方向
  RB0〜RB7・・・[出力] 位置入力データ(前回からの差分データ)を出力(文字データは877側で生成する) →16F877
  RA0,RA1・・・・[入力] ロータリーセンサからのA,B相信号入力 ←ロータリーセンサ
  RA2・・・・・・・・[入力] 16F877からの出力要求信号(この信号により、16F84は位置データを出力する) ←16F877
  RA3・・・・・・・・[出力] データ出力準備完了後、16F877へ信号出力(16F877はこの信号ONで位置データを取得する) →16F877
  RA4・・・・・・・・[入力] 16F877からの再リセット入力 ←16F877
 ・PIC16F84(Z軸ロータリーセンサ用) 注) 入・出力は16F84からの方向
  RB0〜RB3・・・[出力] 文字入力用行コードを出力(MAX16行) →16F877
  (RB4〜RB7)・・・(未使用)
  RA0,RA1・・・・[入力] ロータリーセンサからのA,B相信号入力 ←ロータリーセンサ
  RA2・・・・・・・・[入力] 16F877からの出力要求信号(この信号により、16F84は行コードを出力する) ←16F877
  RA3・・・・・・・・[出力] データ出力準備完了後、16F877へ信号出力(16F877はこの信号ONで行コードデータを取得する) →16F877
  RA4・・・・・・・・[入力] 16F877からの再リセット入力 ←16F877
 ・PIC16F876(or873)(ボタン入力用) 注) 入・出力は16F873(or876)からの方向。チャタリング対応だけに使うのはもったいないが試作品なので
  RB0〜RB5・・・[入力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として入力 ←スティック各ボタン
     〃  ・・・[ 〃] 位置入力時=左・右クリックボタンデータ等として入力 ←スティック各ボタン
  (RB6,RB7)・・・・(未使用)
  RC0〜RC5・・・[出力] 文字入力時=CRデータ、入力文字確定SW、入力文字モードSW等として出力(チャタリング修正出力) →16F877
     〃  ・・・[出力] 位置入力時=左・右クリックボタンデータ等として出力(チャタリング修正出力) →16F877
  (RC6,RC7)・・・・(未使用)
  RA0,RA1・・・・[入力] 入力文字モード表示データ(ひらがな・カタカナ・英数字) ←16F877
  RA2〜RA4・・・[出力] 入力文字モード表示用 →表示LED(3個)
  RA5・・・・・・・・[入力] 16F877からの再リセット入力 ←16F877
 ・PIC16F877(メイン制御、PCとのインターフェース制御用) 注) 入・出力は16F877からの方向
  RB0〜RB7・・・[入力] X方向、Y方向位置データおよび行コードデータを入力(Z軸行コードデータ入力の時はRB4〜RB7は未使用) ←X軸16F84、Y軸16F84、Z軸16F84
  RA0〜RA5・・・[入力] スティックからの各ボタンON,OFFデータ ←ボタン・LED16F876
  RC0,RC1・・・・[入力] 文字入力用PS/2インターフェース(DATA,CLK) ←PC
  RD0,RD1・・・・[出力] 文字入力用PS/2インターフェース(DATA,CLK) →PC
  RC2,RC3・・・・[入力] 位置入力用PS/2インターフェース(DATA,CLK) ←PC
  RD2,RD3・・・・[出力] 位置入力用PS/2インターフェース(DATA,CLK) →PC
  RC4,RC5・・・・[出力] RB0〜RB7へ入力するデータの選択信号(X方向、Y方向位置データおよび行コードデータのうち一つを選択) →RB0〜RB7にデータ入力するセレクタICへ
  RD4・・・・・・・・[出力] X、Y、Z軸16F84へのデータ出力要求信号 →X、Y、Z軸16F84
  RD5・・・・・・・・[入力] X軸16F84からのデータ準備完了信号 ←X軸16F84
  RD6・・・・・・・・[入力] Y軸16F84からのデータ準備完了信号 ←Y軸16F84
  RD7・・・・・・・・[入力] Z軸16F84からのデータ準備完了信号 ←Z軸16F84
  RC6,RC7・・・・[出力] 入力文字モード表示データおよび各16F84、16F876へのリセット出力(ON,ONでリセット出力とする) →ボタン・LED16F876およびX、Y、Z軸16F84
   ※ 暫定設定(16F877のすべてのポートを使っているため詳細設計で制限事項に引っ掛かる可能性あり)

◆2004.4.26(月)
 センサ入力部分にはPIC16F84を各ロータリーエンコーダ毎に1個ずつ計3個およびボタン入力用1個の合計4個を使い、データを整えてから16F877に入力する。877側から84側へ文字入力か位置入力モードかの設定値を受け渡す必要ありか。

私のホームページへ戻る

メイン / コミュニティ / アベニュー / E-List / 街角広場
インフォメーションセンター / 検索 / ヘルプ / ガイドライン