goo blog サービス終了のお知らせ 
「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



TINY2313で作ったPSGで鳴らしてみた。
http://picavr.uunyan.com/avr_m2_ppsg.html
(ページトップ部分にあるmp3ファイル)
なつかしのあのゲーム。

そういえば、砲台が爆発するときのあのノイズって、
やっぱり乱数で「ボーーーッ」とかって音出してた
のかなぁ?


http://www.youtube.com/watch?v=ujwu93aq3UQ
こんなのが1万円以下で売ってるのか。うーーん。
自分でやるのは結構手間なんだけど、ちょくちょく
タイヤ替えてれば、あっという間に元が取れちゃう
んだけどな。
あとはホイールのバランス取りを簡単に済ますことが
出来たら申し分なしなんだけどな。


http://www.anfoworld.com/Lens.html
このページの情報量は凄いものがある。圧倒。



コメント ( 0 )




TINY2313のPSG音源。Arduinoボードに繋いで
鳴らしてみる。シリアル経由で繋いで使うの図。



http://d.hatena.ne.jp/ooharak/20100530/1275184524
参考ページのスケッチを色々弄って、とりあえず
曲として鳴るようになった。tone関数で出力する
部分をこんな風に変えると音程が出ることに。

  Serial.write((uint8_t)0);
  Serial.write((uint8_t)((40000 / freq) & 0xff));
  Serial.write((uint8_t)1);
  Serial.write((uint8_t)((40000 / freq) >> 8));


ちなみに40000は内部のベースクロック。最大で40000Hz
ってことになるんだけど、YMZ294を1.79Mhzで動かすと
最大111860.78125Hzなので、1/3程度の周波数。
1オクターブ半くらい音域が下になっちゃう。まぁ
これ以上速くするのは難しかったので仕方ない。

とりあえず動くようになったんだけど、ソースの中身を
全然理解せず弄ってたので、まともに曲が出るまで
紆余曲折。とりあえず出てよかった。


で、ちょっと気になってたエンベロープの出力レベル
のこと。16段階でエンベロープテーブルを構成して
いたので、波長の長いエンベロープを掛けると
どうしても音量の変わり目で段差が付いて耳障り。

で、YMZ294のように32段階表現に急遽変更。だいぶ
滑らかになった。ヨシヨシ。


イイカンジになってきたので、独立した音源チップ
としてブレッドボードに挿して扱えるようにした。

って言ってもシール貼っただけ。似非PSG(pseud-PSG)
でPPSG。

電源、クロック、リセット、シリアル入力端子だけ
繋げば、PWM(PB3)から音が出る仕組み。プチ満足。

音源が出来たので、こいつをMIDI化したいところ。
MIDIから入力して、このPSG音源2つか3つを束ねて
出力するようにして、簡易音源として使いたい
んだよなぁ。



コメント ( 0 )




TINY2313の似非PSGがだいたい出来たので、単音
じゃなくて曲を鳴らしてみたいと思って、MMLを
Arduinoで鳴らしているようなサンプルが無いか
探してみたら、ヨサゲなのが見つかった。

http://d.hatena.ne.jp/ooharak/20100530/1275184524

定数配列でMMLを定義しておいてtone関数で1音1音
鳴らすみたい。
コレを借りてきて、出力部分だけ変えれば曲が
出そうな気がするんだけど、定数部分のアンパサンド
マークの意味が良くわかんない。HTMLタグからの
文字化け?

コンパイルしてみたら通ることは通ったんだけど、
配線はまだ。とりあえず配線してみて音が鳴るなら
出力部分だけ直せば良さそう。


http://www.forest.impress.co.jp/docs/review/20120518_533773.html
こんなプログラムが有るのか。面白そう。ちょっと
試してみたい。


PICのCWGって、こんな時に便利なのか。
http://www.youtube.com/watch?v=vM0WrFSK14Y

CLCって、やっぱ結構小規模なんだな。
http://ww1.microchip.com/downloads/en/DeviceDoc/41597A.pdf
あれば便利だけど、XC9536程度の置き換えにも
規模的には全然足らないな。まぁそんな規模を
期待してないけど。
でも、ソフトで処理するのに厳しすぎることは
ハードでやりたいんだよな。もうちょっと複雑な
ことが出来たらいいなぁ。カウンタとかも組めたら
便利なのに。

CLCって、入出力の範囲はどこからどこまでなんだ
ろう?SRAMを変更したらそれがそのまま入力に
配線されたり、出力がダイレクトにSRAMのあるビット
に割り当てられたりしてたら超便利じゃないかと
思うんだけどな。

オイラのライターはPICKIT2(の互換機)なんだけど、
CLC対応してるのはどうやらPICKIT3みたい。うーん。

そういえば、今月のトラ技は付録が欲しくて買って
あるんだけど、特集はPICだった。でもCLCとかCWG
とかについては触れられてなかったみたい。


水族館みたいなガラス越し撮影用に、ハクバの
ワイドレンズ用67mmラバーフード
を手に入れてみた。

28mmまでしか対応してないって書いてあるけど、
オイラの24mmからのレンズに付けてみたら、
とりあえず画面の隅がけられることは無いみたい。

ただ、広角用だけあってさすがにフードの長さが短い
から、この長さだけだと実用上ちょっと厳しそう。
例のスポンジシートを使って延長できるように
しちゃおうかと画策中。取り付け、取り外し方法
のところだな。






コメント ( 0 )




ある程度ソース修正が出来てきたので、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
猫があくびをすれば…飼い主もつられる、か。
>人は長年、猫と暮らし、エサやりやブラッシング
>などの作業をこなしてきた。
>研究チームは「猫に対する一定の共感能力を
>発達させた可能性がある」とみている。




コメント ( 0 )




simさんのツイッターで取り上げられていた
変形ロボット。かなり自然な動きで変形するなぁ。
スゴイ。

ふと、ニコニコでArduinoの工作例の新しいやつ、
どんなのがアップされてるかなぁと思ってみてみる。

http://www.nicovideo.jp/watch/sm17553455
カロリーメイトロボット。いい意味で期待を裏切られた。
かわいい。

http://www.nicovideo.jp/watch/sm17729145
Arduino-Megaでプロッター。Megaならここまでの機能
を詰め込めるのかーーー。
NCコードとGコードの関係がオイラ良くわかんないんだ
よな。参考図書を手に入れよう。


相変わらず似非PSG。多分バグ自体は取れたろうと
思うんだけど、AVRのクロックの都合上、ベースとなる
カウンタの周波数が目下40000Hzと低く、オリジナルの
YMZ294の1/5程度になっちゃうので分解能が低く、
高音側が弱い状態。440Hzを出そうとすると誤差が1%
近い状態。この1~2オクターブ上っていうのが限界
になっちゃうだろうなぁという予感。

クロックを16Mhz→20Mhzにすることも考えつつ、
とにかく割り込み内の処理時間を詰める必要があるなぁ。

ソースを眺めてみると、割り込み処理内でいちいち
デコードしている処理がいっぱいあるんだけど、
こいつらを割込み外に追い出せばもうちょっと速く
出来そう。

いずれにしても、今の状態から処理フローだけでなく
データ構造なんかも見直ししないとだめだなぁ。
結構手を入れないと駄目みたい。ちょっとずつ
やるか…。

そうそう。来週に向けて、ダンボールチョキチョキ
したりしてフィルター作っておかないと。それより
天気予報が心配だな。





コメント ( 0 )



« 前ページ 次ページ »