ある程度ソース修正が出来てきたので、TINY2313に
hexを流し込んで、鳴らしてみる。以前作ったオイラ
謹製TINY2313ボード。

クロックは、割り込み周期を少しでも速くしようと
思って20Mhzに換えてみた。さらに速くしようと思って
乱数発生を割り込み処理から追い出そうと思ったり
したんだけど、UART入力が発生するたびにノイズが載る
ことになりそうだから断念。
UARTの速度を115200bpsで通信してみたら、なんだか
動作がおかしい…。バグかなぁ?と思って色々試して
いると、どうやら同じ数値をレジスタに流し込んでも
違う音程になったりとアヤシイので、通信エラーだろう
と判断。38400bpsに変更。サクサク動くようになった。
セラロックのせいかな?
音色は計算どおりに出るし、音量もエンベロープも
ちゃんと出る。で、ノイズ。ノイズも出ることは出るし
平均周波数も変えられるんだけど、音量を指定すると
エンベロープ掛かっちゃうし、エンベロープを指定
すると一定の音量で出力されちゃう。
おかしい…と思ってソース見直したら、判定文のとこ
がなぜか間違えて修正してあった。クロック削る時に
何か間違えたらしい。ほかはコレといって見当たらな
かったので、大丈夫っぽい。
あとは、カウンタ値設定のデータを受信したときに
音程やエンベロープを決定する内部カウンタをクリア
してたんだけど、各カウンタはzフラグじゃなくcフラグ
見て0に戻す処理をしてるから、受信時にはゼロに戻す
必要は無いと判断してコメントアウトしてみた。
とりあえず動いてるみたい。まぁ、動くのはアタリマエ
だとしても、よく考えたら最大値(もっとも長い周期)
を指定した場合に、カウンタ値と設定値の比較がちゃんと
出来るのかは、きちんとソース見て、シミュレーション
掛けなおして、確認をしておかないとイカンだろうな。
(いわゆる極限値テスト)
とりあえず計算どおりの周波数で、計算どおりのi/fで、
計算どおりの鳴り方してくれるのは見て取れたんだけど、
いかんせん、ベースとなるカウンタが80000回/秒なので
さらに半分にして40000Hzが最大周波数。
オリジナルに比べて遅いので低音側の再生はともかく、
高音側は音程指定がズレまくる計算。
MSXなどではNTSC用クロックを共用しているらしくベースと
なる周波数は1789772.5MHz÷16=111,860.78125Hz。
40000Hzと比べておよそ2.8倍の開き。1.5オクターブと
ちょっと。
MSXでは254を指定すると440Hz程度になるんだけど、この
似非PSGでは90を指定すると約440Hzになる。(共に10進数)
440Hzでの誤差を調べてみると、大体1%くらいっぽい。
半音を100centとして15cent程度の誤差がある計算。
オイラの耳では単音で聞いても全然わかんないけど、
和音にした時のハモリ方はどうなんだろう?あとで
試してみようか…
ノイズの平均周波数にしても、やはり低周波側に寄って
いるはずなので、オリジナルの雰囲気とはちょっと違う
かもしれない。
まぁ、ここまで出来たらあとはArduinoに繋いで
「曲を鳴らす」ところまではもって行きたいな。
http://headlines.yahoo.co.jp/hl?a=20120516-00000582-yom-sci
猫があくびをすれば…飼い主もつられる、か。
>人は長年、猫と暮らし、エサやりやブラッシング
>などの作業をこなしてきた。
>研究チームは「猫に対する一定の共感能力を
>発達させた可能性がある」とみている。



|