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/