since 2006 ~ 2013 |
自作midiデバイス2修正中
自作midiデバイス1の応用をやっていきましょう。 -------スイッチに反応してmidi信号を送る------- 前のアセンブラでは、こちらの意図にかかわらず、1秒ごとにmidi信号を送るだけのものでした。 これでは、何にも面白くないので、スイッチに反応してmidi信号を送るようにしてみましょう。 ----------テスト動画---------- スイッチを押すごとにmidi信号送信 注意 音が出ます!! 音が悪いですが・・・ このようにかなり面白いことができそうです。 注意してほしいのがチャタリングという現象です。 チャタリングとは、機械接点がOFF→ONまたはON→OFFへ移行する際、瞬時に変化するのではなく、ON/OFFを何回か繰り返しながら状態が移行する現象のことです。 チャタリングの継続時間は、数100μs~数msと人間から見ればほんの一瞬のことで感知することはできませんが、高速な電子回路にとってはだいぶ長い間オンオフが繰り返されているように感じるはずです。 スイッチを組み込む場合、これを防ぐ必要があります。 さらに ------複数のスイッチを入力させてmidi信号を送る------- ことをやってみます。 これは、実際にmidiデバイスを作るうえでとても有効です。 これができたらMPCみたいにできます。 さてそれをするにはどうすればいいでしょうか? もし使っているPICの入出力端子が8個あるとしたら、スイッチは8個つなげばよいですね。 たしかに8個つないでそれぞれのスイッチが押されたときにそれぞれ違うmidi信号をおくってやればいいわけです。 しかし、8個じゃあなーあ。。と思いませんか? 実は工夫次第で、入出力端子が8個でなんと16スイッチに拡張できるのですよ!! その便利な方法はキーマトリクスと呼ばれる方法です。 これは別に凄い方法ってわけではなく、普通に電卓とかパソコンのキーボードに使われています。 どういう仕組みかというと、 こんな感じです。 これで8入出力で16スイッチです。 どんな感じで読みこむかというと、 0,1,2,3端子を出力、4,5,6,7端子を入力に設定します。 そして、 一番上の行の四つのスイッチの状態を読みます。 0端子をLoにして、あとの1,2,3をHiにします。 そして、4,5,6,7端子で電圧を読みます。 もし、一行目の一番左のスイッチがonならば、端子4はLoになり、ほかの5,6,7はHiのままです。 つまりonのスイッチにより、入力にLoがおくられます。 Offならば、Hiです。 次に1端子をLoにして、0,2,3をHiにします。 そして、同様に4,5,6,7を読みます。 以上のことを繰り返して、計16のスイッチの状態を作り出します。 別に4×4にしなくても、2×6とか3×5とかもできます。 けれど、8入力では、4×4が最大になりますね。 アセンブラはこちらです。(注意書き方が自己流のため更新される場合があります) ; CPU configuration processor 16f84A include __config _HS_OSC & _WDT_OFF & _PWRTE_ON ; variables tempequ H'1F' xmitequ H'1D' check0 equ H'0E' j equ H'1B' check1 equ H'0F' cnt04 equ H'0C' ;0.4mS待つサブルーチン用カウンタ cnt20 equ H'0D' ;20mS待つサブルーチン用カウンタ ; Program org0 start: bsf STATUS,RP0 ; ファイルレジスタSTATUSのRP0をセット(1)する → バンク1 movlw H'00' movwf TRISA movlw H'01' movwf TRISB ; ファイルレジスタTRISAの1と2ビット目のみON → RA0とRA1は入力 bcf STATUS,RP0 ; STATUSのRP0をクリア(0) → バンク0 clrf check0 main loopa1 movlw H'EF' movwf PORTB btfss PORTB,0 ; スイッチの状態チェック goto t1 ; スイッチがONの時 bcf check0,1 loopa2 btfss PORTB,1 ; スイッチの状態チェック goto t2 ; スイッチがONの時 bcf check0,2 loopa3 btfss PORTB,2 ; スイッチの状態チェック goto t3 ; スイッチがONの時 bcf check0,3 loopa4 movlw H'DF' movwf PORTB btfss PORTB,0 ; スイッチの状態チェック goto t4 ; スイッチがONの時 bcf check0,4 loopa5 btfss PORTB,1 ; スイッチの状態チェック goto t5 ; スイッチがONの時 bcf check0,5 loopa6 btfss PORTB,2 ; スイッチの状態チェック goto t6 ; スイッチがONの時 bcf check0,6 btfsc check0,1 goto loopa1 btfsc check0,2 goto loopa1 btfsc check0,3 goto loopa1 btfsc check0,4 goto loopa1 btfsc check0,5 goto loopa1 btfsc check0,6 goto loopa1 btfsc check0,0 goto loopa1 goto noteoff t1 call T20mS btfsc PORTB,0 goto loopa1 btfsc check0,1 goto loopa2 goto noteon1 t2 call T20mS btfsc PORTB,1 goto loopa1 btfsc check0,2 goto loopa3 goto noteon2 t3 call T20mS btfsc PORTB,2 goto loopa1 btfsc check0,3 goto loopa4 goto noteon3 t4 call T20mS btfsc PORTB,0 goto loopa1 btfsc check0,4 goto loopa5 goto noteon4 t5 call T20mS btfsc PORTB,1 goto loopa1 btfsc check0,5 goto loopa6 goto noteon5 t6 call T20mS btfsc PORTB,3 goto loopa1 btfsc check0,6 goto loopa1 goto noteon6 noteon1: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x7F movwfxmit callsendmidi bcf check0,0 bsf check0,1 goto loopa1 noteon2: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x3F movwfxmit callsendmidi bcf check0,0 bsf check0,2 goto loopa1 noteon3: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x19 movwfxmit callsendmidi bcf check0,0 bsf check0,3 goto loopa1 noteon4: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x18 movwfxmit callsendmidi bcf check0,0 bsf check0,4 goto loopa1 noteon5: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x17 movwfxmit callsendmidi bcf check0,0 bsf check0,5 goto loopa1 noteon6: movlw0x90 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x16 movwfxmit callsendmidi bcf check0,0 bsf check0,6 goto loopa1 noteoff; movlw0x80 movwfxmit callsendmidi movlw0x3C movwfxmit callsendmidi movlw0x7F movwfxmit callsendmidi bsf check0,0 gotoloopa1 sendmidi: startb:bcfPORTA, 0x02 movlwD'23' movwftemp loop1:decfsztemp,f gotoloop1 movlwD'8' movwfj sendloop: rrfxmit,f btfscSTATUS, C gotosend1 send0:nop nop nop nop bcfPORTA, 0x02 gotoendloop send1:nop nop bsfPORTA, 0x02 nop nop endloop: movlwD'22' movwftemp loop2:decfsztemp,f gotoloop2 decfszj,f gotosendloop stopb: nop nop nop nop nop bsfPORTA, 0x02 movlwD'26' movwftemp loop3:decfsztemp,f gotoloop3 return T20mS MOVLW D'50' ; 50(20mS) ; MOVLW D'100' ; 100(40mS) MOVWF cnt20 ; (ループ回数として50をセット) T20LP CALL T04mS ; 0.4mS待つ DECFSZ cnt20,F ; ループ回数-1して0になったら次の命令をスキップ GOTO T20LP ; RETURN ; このサブルーチン呼出し元に戻る ; << 0.4mS待つサブルーチン >> T04mS MOVLW D'249' ; 249 MOVWF cnt04 ; (ループ回数として249をセット) T04LP NOP ; 何もせず1サイクル消費 DECFSZ cnt04,F ; ループ回数-1して0になったら次の命令をスキップ GOTO T04LP RETURN ; このサブルーチン呼出し元に戻る end
by toucyy
| 2006-07-06 14:09
| 自作midiデバイス
|
PRODUCTS レコードでの演奏(シンセサイザー)を可能にする "Anvs"(アンブス) - Analog Vinyl Synthesizer - Midi信号を他出力する "Midiv" -Midi Distributor Divider- ターンテーブルアニメーションを可能にする "Taf1" -Turntable Animation Flasher- LEDを使用したトリッキーな映像制作装置 (Taf1の機能拡張版) "Taf2" -Turntable Animation Flasher 2- PROFILE Toucyy 某外資系半導体メーカー勤務、その傍らDJの経験とハードウェア、ソフトウェアエンジニアリングのバックグランドを生かし活動中。自作電子楽器でLive & DJ patlo (yamamo2 + toucyy) picnome、picratchbox開発者yamamo2さんとユニット組み、本格的に自作電子楽器でLiveやってます。 電子楽器と音楽と人とのつながりをいろいろ考えるのが最近のはまり。 ------CONTACT------ "toucyyアットgmail.com" (メールを送信する際はアットを@に変えてください。スパム対策用です) イベント&ライブ等 2010年5月22~23日 MTM05 出展とプレゼンテーション "anvs" http://www.oreilly.co.jp/mtm/05/ 2010年11月20~21日 MTM06 出展 "anvs modular" http://www.oreilly.co.jp/mtm/06/ 2010年11月21日 Analog Synthesizer Builders' Summit 出展 "anvs modular" http://analog-synth.jp/summit10/e_index.html 2011年12月3~4日 MTM07 出展 "Taf" http://www.oreilly.co.jp/mtm/07/ 2012年1月14日 TMUG20 (Tokyo Max Users Group) プレゼンテーションとライブデモ http://tokyomax.jp/?p=1670 2010年7月10日 TMUG16 (Tokyo Max Users Group) ライブ http://tokyomax.jp/?p=696 http://toucylab.exblog.jp/14084312/ 紹介記事 もうライブで使えるレベル――DIY楽器がますます進化 10th Analog Synthesizer Builders' Summit Party Engadget Japan ASCII.jp 「理屈にあわない楽しさを求めて 電子楽器をつくる人の哲学」 Sampling Loveのblog VESTAX JAPAN メディア&SNS YouTube DJイベント "Elements" 茨城を拠点にさまざまな"要素"にこだわり行っているイベント "Ruckus [toucylab custom ver 1.2]" PSP用のDJソフトウェアです。 Captain Dan氏のRuckusをベースにコントロールの微調整を行いました。 Download here ! ------------------------- by toucyy カテゴリ
このブログは?
日々思ったこと&できごとなど Anvs(アンブス) Anvs製作日記 写真 自作ミキサー&アンプ 自作midiデバイス Ableton Live tips Dj&Live&Events midi_crossfader crossfader メンテナンス mixer カスタマイズ MPC2000 カスタマイズ lighting(電飾プロジェクト) kp2モバイル化 max/msp 自作サンプラー&エフェクター案 PSP関係 picマイコン Blackfin ケース加工&シルク印刷 Favorite URL(要Login) books Apple Taf midiv Oto Devices sketchup (eagleup) eagle mbed その他のジャンル
ブログジャンル
|
|||||||||||||||
ファン申請 |
||