SVX日記
2006-05-05(Fri) ギターのチューナ完成
赤い光が点にならないので、チューニングが難しい。そういえば、オリジナルでは赤い光がふたつだったのを思い出し、青いLEDを追加して、位相をズラして点灯させてみる……が、やっぱりうまくいかない。ちゃんとチューニングできている気がしない。
で、最後の仕上げ。今までは、セラロックが8MHzキッカリであると想定してプログラムを組んでいたが、実際にはセラロックには初期誤差があるので、その誤差を修正する。修正方法は簡単。セラロックが8MHzキッカリであると想定して、20秒(8MHz時に2,000,000インストラクション)周期で正確にLEDが点滅を繰り返すようにプログラムして、手元のナビホークのストップウォッチで周期を計測する。LEDが点灯した瞬間にストップウォッチをスタート、10秒後に一旦LEDが消灯し、再度LEDが点灯した瞬間の時間を計測するのである。
なお、人間の反射神経では、点灯してからボタンを押しても大した精度は期待できない。だから、長期間計測することによって誤差を収束させる。最後に1発でもいいのだが、暇なのでラップタイムを次々に計測してみた。結果は以下のとおり。
理想 現実 誤差
9:40.00 9:36.64 99.421%
10:20.00 10:16.39 99.418%
11:20.00 11:16.05 99.419%
12:20.00 12:15.70 99.419%
13:00.00 12:55.49 99.422%
13:40:00 13:35:24 99.420%
というワケで、99.420%を採用。このセラロックは8MHzより0.58%速いようである。0.9942の逆数は1.00583だ。つまり、実行インストラクション数を1.00583倍してやればキッカリの時刻を刻むハズである。実際にやってみる。点滅周期をナビホークの動きと比較してみると……30分経っても、目視では誤差が確認できないほどの同期レベル……完璧ッ!!
E: 329.6275569 Hz 3051.41 us / 4 = 762.85 us
A: 440.0000000 Hz 2285.98 us / 4 = 571.49 us
D: 587.3295358 Hz 1712.55 us / 4 = 428.14 us
G: 783.9908720 Hz 1282.96 us / 4 = 320.74 us
B: 987.7666025 Hz 1018.29 us / 4 = 254.57 us
E: 1318.5102277 Hz 762.85 us / 4 = 190.71 us
待ち時間をこっちの値に修正すれば、完璧なチューナの出来上がりである。ココにファイル一式を置いてく。
なお、後で気づいたが、ギターの5弦の振幅数は440Hzでなく、110Hzだった。そりゃ、点灯周期を4倍に延ばしたらうまくいったハズである。オマケに言及しておくと、6弦と1弦は振幅周期にちょうど4倍の差があるから、1弦の点灯間隔にして、6弦に照射すると、最初の時のように4点が光る。あぁ、なんとインタレスティングなッ!!
はじめまして。<br>この記事を拝見し、私もチューナーを作ってみました。<br>特に、弦の周波数とLED点滅周波数の計算はとても<br>参考になりました。ありがとうございました。<br>URL:http://kazu900.blog47.fc2.com/