電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

「さん、ハイッ」ペダル3

さんハイッ ペダル 回路図

「さん、ハイッ」ペダル3

「さん、ハイッ」ペダル の動作原理について説明する。

続きは明日書きます (_ _;)

明日が今日になりました。

仕様

  • テンポは 30bpm~300bpm ぐらいに対応
  • 3拍目と4拍目にあたるタイミングでペダルを踏むと、その間を時間計測し、
    • 4.5拍目からMIDI タイミング・クロック F8が出力され
    • 次の拍の直前にスタート FA が出力される
  • 既にタイミング・クロックが出力されている状態にあっても、3, 4拍と踏めば新しいテンポに変わる
  • 3拍目を踏んだ後、一定時間経っても4拍目が踏まれないときは初期状態に戻る
  • LEDは、初期状態は無灯火、時間計測中はオレンジ色、クロック出力中はテンポにあわせて緑点滅

動作の仕組み

準備
  • クロックは 8MHz を使う(暫定)
  • 8bit の timer0と 16bit の timer1を使用する
    • timer0 はボタン処理用で、使用時は 1/64 でプリスケールする
      • ペダルが踏まれると timer0 を1/64プリスケールでスタートする
      • 256カウントで割り込まれると、256*64/8M = 2.048msec
      • この時間が経ったらtimer0割り込みが掛かる。ペダルがまだ踏まれているかどうか再評価する。踏まれていない(2msecよりも短い)場合はノイズだったと見做す
    • timer1 はbeat間時間計測とF8出力用時間間隔生成に使う。使用時は 1/256 でプリスケールする
      • 16bit(65536)フルカウントすると、65536*256/8M ≒ 2.1sec → 28.6bpm
      • timer1 は 全体の動作ステージに応じて、
        • 3拍目が踏まれた後のタイムアウト(65536カウント)割り込み
        • 3拍目と4拍目の時間計測
        • F8出力を開始する 4.5拍目まで待つ割り込み
        • F8出力間隔での割り込み
      • と動作を変えながら動かしている
  • ボタンが押された(= ペダルが踏まれた)かどうかはサンプリングではなく、ポーリングで評価する
動作シナリオ
  • 電源投入で初期状態(LED無灯火、タイミング・クロック出力なし)から始まる
  • ペダルが踏まれると timer1 をスタートする
    • 同時に timer0 をスタートし、前述のノイズ処理。ノイズだったときは、timer0/1を止め、初期状態に戻る
  • timer1がフルカウントすると割り込みが掛かるようにしてある。
  • もう一度ペダルが踏まれたら、そのときの timer1の値を記録する(beat_period)。
    • 同時に timer0 をスタートし、前述のノイズ処理。ノイズだったときは、timer0/1を止め、初期状態に戻る
    • timer1はbeat_period値の1/2の時間で割り込みが掛かるように再設定して動かし続ける
  • その裏で (beat_period)÷24 の演算*1をして F8 間隔の時間を算出する
    • この24で割るという演算がどれぐらいの処理時間を要するのか不明である
      • (beat_period)/24 の演算終了を待ってからF8出力ではタイミングがずれる
      • そこで 4拍目の真ん中(beat_period/2)まで待って(そこまでには ÷24 が完了しているだろう)、そこからF8を出し始める
      • 半拍なので、12個のF8を出したら、FAを出力する
  • F8を24個出力するごとに1回 LEDを光らせる
    • F8の数をカウントするカウンタを設け、そのカウント値を見てLED発光
うーん

状態遷移図とタイミングチャート例がないとわかりづらい…

そのうち補足で描こうと思う。

箱入れ

BOSSのFS-5Uペダルを改造して収めようと考えている。

現状の回路図

メンテナンス中。

回路図更新大きな図面

*1MIDIでは1拍の間に24個のF8が出力される。