34one ダウンロードさせていただきました RSSフィード
 

ツリー全部最新の50件前後を読む

7ChuckChuck   6  Re:状態遷移図を描いてみました

補足解説です。

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

0. 電源投入で初期状態に

1. ペダルが踏まれる(3拍目想定) timer0 と timer1 を0からスタート*1

2-1. timer0 で割り込まれたときにまだ踏まれている→3拍目を受信して状態THREEへ

2-2. timer0 で割り込まれたときに踏まれていない→ノイズとみなし初期状態へ

3. timer1がフルカウントして割り込まれる=4拍目が来ないでタイムアウト→初期状態へ

4. ペダルが踏まれる(時間内に4拍目がきたのかも)。timer0 を0からスタート。timer1 の値を beat_timeに記憶

5-1. timer0 で割り込まれたときにまだ踏まれている→確かに4拍目として、timer1を (65536-beat_time/2) にセットしてスタート*2して、状態FOUR1へ

5-2. timer0 で割り込まれたときに踏まれていない→ノイズとみなし初期状態へ

6 beat_time/2 で割り込みがかかった時点で 6 の遷移が起こる。それまでに beat_time/24 の演算がメインルーチンで完了しているはずなので、この値で割り込まれるようにtimer1をセット*3し、割り込みの回数を12個数えている。

7 最後でFAを出力し → 状態 STABLEへ遷移

8 STABLE状態にあっても、ペダルが踏まれると TRANS3 へ遷移して、全体の状態遷移を繰り返す。

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

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

*3:65536 - beat_time/24

返信2005/06/21 14:21:52