電音の工場ブログ

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

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

さん ハイッ 状態遷移図

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

状態遷移図を描いてみた。掲示板に挙げていたものをこちらにも掲載する。→ 大きな図面

用語の説明

IDLE
初期状態
TRANS3
状態THREEへの遷移途中状態
THREE
3拍目が確定している状態
TRANS4
状態FOUR1への遷移途中状態
FOUR1
4拍目の前半部分の状態
FOUR2
4拍目の後半部分の状態。F8を出力している。
STABLE
F8を1拍あたり24回出力している定常状態。

動作の説明

  1. 電源投入で初期状態に
  2. ペダルが踏まれる(3拍目想定) timer0 と timer1 を0からスタート*1
  3. timer0 で割り込まれたときに
    1. まだ踏まれている→3拍目を受信して状態THREEへ
    2. 踏まれていない→ノイズとみなし初期状態へ
  4. timer1がフルカウントして割り込まれる=4拍目が来ないでタイムアウト→初期状態へ
  5. ペダルが踏まれる(時間内に4拍目がきたのかも)。timer0 を0からスタート。timer1 の値を beat_timeに記憶
  6. timer0 で割り込まれたときに
    1. まだ踏まれている→確かに4拍目として、timer1を (65536-beat_time/2) にセットしてスタート*2して、状態FOUR1へ
    2. timer0 で割り込まれたときに踏まれていない→ノイズとみなし初期状態へ
  7. beat_time/2 で割り込みがかかった時点で 6 の遷移が起こる。それまでに beat_time/24 の演算がメインルーチンで完了しているはずなので、この値で割り込まれるようにtimer1をセット*3し、割り込みの回数を12個数えている。
  8. 最後でFAを出力し → 状態 STABLEへ遷移
  9. STABLE状態にあっても、ペダルが踏まれると TRANS3 へ遷移して、全体の状態遷移を繰り返す。

*1:0からスタートすると、timer0はカウントアップして255を超えて再び0になったときに、timer1 は 65535 を超えて再び0になったときに割り込みがかかる。

*2:beat_time/2 だけカウントするとtimer1割り込みがかかる。

*3:65536 - beat_time/24