蟲寄市

Drummaniaコントローラ自作

最終更新:

pentagon

- view
メンバー限定 登録/ログイン

ドラムマニアのコントローラーの自作


注意:この記事は古い記事です。参考程度にはなるかもしれませんが、これからドラムマニアコントローラを自作しようという方は、新しい記事であるドラムマニア専コン自作(完)を参照してください。

KONAMIから専用のコントローラが発売されていますが、あまりにも小さすぎます。あれではゲームセンターのドラムマニアは再現できないため、実寸大のコントローラーを自作することにしました。
と言っても、YAMAHAからDTXという素晴らしい電子ドラムが発売されています。
DTXは、PSのコントローラー端子が備えられているため、パソコンやPSにそのまま接続できます。。
ただし、DTXは7万円もするため、ゲームのために買うのはどうかと思います。
ということで、電子ドラムではなくトレーニングドラムを購入して、トレーニングドラムを専用コントローラーに改造することにしました。

まずは、音検出装置の製作から。

こちらは、いろいろなホームページを参考にして試行錯誤してできた回路です。
私は、電子回路に関してはプロではないため、かなり適当な部分があります。
「こうした方が良いのでは」、などという意見があったらコメントしてもらえると助かります。

↓ドラムパット一個あたりの回路図。
ドラムパートを5コつけるのであれば、下記の回路が5コ必要になります。
to PICは、12F509の4番ピンへ。

※今度全体の回路図を載せます

↓完成した全体像。

↓あまり見せたくないけど裏側

↓パソコンとの接続は、PSのコントローラーを使います。
PSのコントローラを小さくするため、いらない部分は切り落としてしまいます。

↓反対側も切り落とします

↓コネクタ部を取り外す場合は、配線の色の順番を覚えておいた方が良いです。

↓PSのコントローラーのピンアサイン。pintel君、いつもありがと!
12F509の5番ピンから各ピンに配線します。

↓実際に搭載したところ

↓PICのソースコードです。
hexファイルはコチラ

;**********************************************************************
;                                                                     *
;    Filename:Drummania_Controller_ECU.asm                            *
;    Date:2008-11-15                                                  *
;    Device:PIC12F509                                                 *
;                                                                     *
;    Author:penta                                                     *
;    HomePage:http://www33.atwiki.jp/pentagon/                        *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Program_Notes:                                                   *
; - GP3がHighになると、所定時間GP0がLowになる                         *
; - 所定時間中はGP3への入力は受け付けない(チャタリング対策のため)   *
; - おまけで所定時間中はGP1がHighになる(確認用LEDを取り付けるため)  *
;                                                                     *
;**********************************************************************
;                                                                     *
;***** PIC12F509 のピン配置                                           *
;                          _____                                      *
;               +5V--(Vdd)1| U  |8(Vss)--GND                          *
;                    (GP5)2|    |7(GP0)-->PS_Controller               *
;                    (GP4)3|    |6(GP1)--10KΩ--LED--GND              *
;        +5V--SW--+--(GP3)4|____|5(GP2)                               *
;                 |                                                   *
;               10KΩ                                                 *
;                 |                                                   *
;                GND                                                  *
;                                                                     *
;**********************************************************************

	LIST      P=12F509	;プロセッサの機種を指定する
	#INCLUDE  P12F509.INC	;プロセッサの変数定義の指定

	__CONFIG  0x0A		;コンフィグ・ワードの設定
				;コードプロテクトしない。
				;ウォッチドッグタイマを使用しない
				;外部リセットを使用しない
				;内蔵クロックを使用する

;****************************** Note **********************************
;        __CONFIG  _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC       *
;                                                                     *
;     --    --   --   --   --   --   -- MCLRE  CP  WDTE FOSC1 FOSC0   *
;bit  11    10    9    8    7    6    5    4    3    2    1    0      *
;      0     0    0    0    0    0    0    0    1    0    1    0(0x0A)*
;**********************************************************************

;***** 変数の定義
;	ORG	0x07
TIM1	EQU	0x07		;タイマーカウンタ
TIM2	EQU	0x08		;タイマーカウンタ
TIM3	EQU	0x09		;タイマーカウンタ

;***** 
;	ORG	0x3FF		;リセット・ベクター
;				;12F508 は 0x1FF番地
	ORG	0x000		;プログラム実行開始番地
	MOVWF	OSCCAL		;OSCCAL レジスタファイルを更新

;****************************** Note **********************************
; 内蔵クロックを使用する場合は工場出荷時にリセットベクター 0x3FF 番地 *
; にインストラクション 'MOVLW k' であらかじめ書き込まれている補正値を *
; 読込んで 'OSCCAL' レジスタの値(上位7ビット)を更新する必要がある   *
; 内蔵クロックを使用しない場合は、'MOVWF OSCCAL'は不要                *
;**********************************************************************

;***** ポートの初期設定
;
	MOVLW   0x08		;GP3を入力ポートに(001000)
	TRIS    0x06		;(f=6)
	MOVLW   0xDF		;T0CSは'0'、GP2は出力ピン
	OPTION			;OPTIONレジスタに書き込む

;***** START

START:


GP0_OFF	MOVLW	B'000001'	;GP0をHighに。
	MOVWF	GPIO		;この時、PSコントローラは反応しない
SW1	BTFSS	GPIO,3		;GP3がHighになったら次のステップをスキップ
GOTO	GP0_OFF			;GP3がLowならGP0_OFFに戻る

GP0_ON  MOVLW   B'000010'	;GP0をLowに。GP1(確認用LED)をHighに。
        MOVWF   GPIO		;GPIOレジスタファイルに書き込む

        CALL    DELAY		;タイマールーチンのよびだし
	GOTO	GP0_OFF


;***** タイマールーチン

;****************************** Note **********************************
;公式                                                                 *
;T={4(TIM2)((TIM3)+1)+3}*0.4*(10/4)<μS>                              *
;TIM2=10,TIM3=249でT=0.010003s                                        *
;TIM1=100(0x64)で約1秒                                                *
;通常は、TIM1をいじって時間を調節する。                               *
;**********************************************************************

DELAY
		MOVLW	0xC8		;TIM1の設定。通常はここをいじる。
		MOVWF	TIM1		;TIM1=200(0xC8)
WA1		MOVLW	0x0A		;TIM2の設定。TIM2=10(0x0A)
		MOVWF	TIM2
WA2		MOVLW	0xF9		;TIM3の設定。TIM3=249(0xF9)
		MOVWF	TIM3
WA3		NOP
		DECFSZ	TIM3,F
		GOTO	WA3
		DECFSZ	TIM2,F
		GOTO	WA2
		DECFSZ	TIM1,F
		GOTO	WA1
		RETLW	0		;RETURNの代用

		END

PICを5個使います。1コのPICで5コのパッドを制御しようと思ってやってみましたが、PICは同時に2つの命令を実行できないので、同時押しで不具合が出ました。
なので、PICは5コ使った方がよいです。

とりあえず今日はココマデ。
記事メニュー
目安箱バナー