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



ある程度ソース修正が出来てきたので、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 )




アナウンスから半年近くたたっと思うんだけど、
未だに出てこないArduino-Leonardo。USBデバイス
が作れそうなので、とても気になってるところ
なんだけど、公式サイトを眺めていても情報が
出てこないんだよな。

そういえば、9日前にtwitterでつぶやかれたらしい
>@Shields_Arduino The Arduino Due
>runs Arduino code natively at 84MHz
っていうのが気になるところ。DueもLeonardoも
早く出てこないかな。そろそろ?


確か互換ボードをストリナで売ってたよなぁと
思ってふと見に行ってみると、
http://strawberry-linux.com/catalog/items?code=25005
これ、ダ・ビンチ32Uって名前だったのか…。
ネーミングセンスがオイラ好みだな。
値段安いから1個買ってHIDデバイスとかつくりたい
んだけどなぁ。コレに手を出すのがいいのか、正式
リリースを待った方がいいのか…


秋月の新商品。プラズマボール。
http://akizukidenshi.com/catalog/g/gM-05645/
700円かぁ。惹かれるんだけど、ナニに使ったら
よいのやら…。
それと、いつもコレ触るときって、ビリっと来ないか
おっかなびっくりになっちゃうんだよな。なんで
コレってビリビリ来ないんだろう?

http://akizukidenshi.com/catalog/g/gP-05723/
知らぬ間に、表面実装の圧電サウンダが出てた。
オイラはヘタレだから表面実装自分で半田付けするの
さけちゃうんだよな。でも、この大きさといい、
共鳴ポート(?)のスリットがナカナカ惹かれる。


週末に八潮に行ってきたんだけど、店内にまだ花粉が
いっぱい舞ってたみたいで、鼻の具合が一気に悪化。
帰ってきてからまた薬飲む羽目に。とりあえず
http://akizukidenshi.com/catalog/g/gC-05779/
この1列タイプはゲットしておいたんだけど、よく
考えたらC-LCD用とかの2列タイプの方が用途多い
のかもしれないなぁ。


相変わらずガリガリとTINY2313のアセンブラでコード
を弄る。割り込み内部の処理クロック数を詰めに
詰めて、最長でも205クロックまでもってきた。あと
30クロック削れればベース周波数を上げられるんだけど、
このあたりが限界かなぁ。

今時点でもクロックを20Mhzに変えたらベース周波数
を80000Hz程度まで上げられそうなんだけど、できれば
100000Hzあたりまで持って行きたいなぁ。ウルトラC
は見つからないかなぁ…



http://digimaga.net/2012/02/20-spcats-k-miyuko-cosplay-pictures
韓国のコスプレ。なんか、いろんな意味でスゴイ
作りこみだなぁ。目を惹くクオリティー。

衣装や化粧、アクセサリもすごいんだけど、
それ以外の作りこみも手が掛かってそう。
被写界深度が微妙におかしい写真があったり、
皮膚呼吸できなさそうだったり、三重マブタ
だったり。でもまぁ、写真としてはかなりスゴイ。


http://headlines.yahoo.co.jp/hl?a=20120515-00000340-oric-ind
特保のコーラ。最近買おうと思っても置いてないん
だよな。売れすぎみたい。


http://headlines.yahoo.co.jp/hl?a=20120515-00000457-yom-sci
インドの津波ねぇ。
日本の地震の直後に想定してない方がおかしいって
指摘があったと思うんだけど、それをいまさら
ニュースにしたのは何故なんだ?
まぁ、今後絶対に「想定外でした」とは言わせない
仕組みづくりに活かされればいいんだけどな。


http://www.nicovideo.jp/watch/sm4933431
スペースパニック。かなり上手いなぁ。

http://www.nicovideo.jp/watch/sm2429398
ちゃっくんぽっぷ。かなり上手いなぁ。
ちなみに、ゆとり教育だとスーパーちゃっくんに
なれないだろうなぁ。




コメント ( 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 )




TINY2313に流し込んで疎通確認をしてみたところ
そこそこ動くことがわかったので、そもそも
記憶を頼りに思いつきでコーディングした仕様が
オリジナルとどのくらい合ってるのか確かめる
ことに。

以前買ったYMZ294がいくつか残っているので、
コレのレジスタに色んなパターンを入れて鳴らして
比較するのがスジなんだけど、色々めんどいので、
PSG内蔵PCのエミュレータでお茶を濁そうっていう
作戦。

とりあえずMSX MAGAZINE永久保存版のCDに収録
されていたMSXPLAYerを久々に動かしてみる。

動くことは動くんだけど… ボリウムを上げても
音が出ない。なんでだろう?と思って調べてみると、
どうやらVISTA以降では音が出ないみたいと判る。

XPモードにインストールするか?とか考えたんだけど、
めんどいのでM88をチョイスしてみる。V2モードの
disk basicから起動。

cmd playでPSGを鳴らしてみる。鳴る。ok。
cmd soundでPSGのレジスタに値を書いてみる。
鳴らない。鳴らないなぁ。88SRのリファレンス
マニュアルを引っ張り出してくる。

cmd soundは拡張音源基盤用命令?内蔵PSGや
FM音源のレジスタもBASICコマンドから扱えた
はずなんだけどなぁ…と思って調べなおす。

cmd voice regなんて命令あったっけ?
やってみたら、思い通りに音が出る。



で、試したかったのはエンベロープ形状の変更
を行った場合と、エンベロープ周波数の変更を
行った場合とで、それぞれエンベロープパターン
が巻き戻しされるのかどうか。

やってみたところ、形状の変更(レジスタ13番)
では巻き戻しされてエンベロープの頭から再生
されて、周波数の変更(レジスタ11と12番)では
巻き戻されないってことが判った。思ったとおり。


それ以外の機能はあまり迷うような仕様はなかった
と思うんだけど、周波数変更を行った場合に、
内部のカウンタ値をクリアするのが正しいのか否か。

高いところからピューーーって落ちるような音
(つまり音程が滑らかに下がったり上がったり
変化する音)の場合に、カウンタをいちいち
クリアすると、頻繁にレジスタ書き換えすると
音質が濁るだろうなぁと。

理想は、DDSみたいに足しこむ位相を変化させる
だけにすれば滑らかに周波数だけ変わっていく
んだけど、現状のプログラムは一律カウンタを
クリア。なので、コマンドを打ち込む度にノイズ
が載るはず。処理の都合上とりあえずそうしたん
だけど、ちょっとだけ考えないといかんかなぁ?

とりあえず、「ピューーー」って音程が変化する
ような音を鳴らしてみようかな。どの程度の
ノイズが出るかはそれで判るでしょう。


細かいところの仕様をもうちょっと確認してみたい
ので、M88をもうちょっと弄ってみるかな。


http://headlines.yahoo.co.jp/hl?a=20120512-00000013-jij-soci
「描ける」漫画喫茶。ほぉ。将来の漫画家の
タマゴがこういうところから出てくるのかな?
半田付けができる喫茶店を(略)

http://headlines.yahoo.co.jp/hl?a=20120511-00000000-fsi-bus_all
韓流ブーム、ふたを開けるとまぁこんなもん
なのかな。



コメント ( 0 )




シミュレータでそれなりに動くことがわかったので、
TINY2313に流し込んで、サクッと回路組んで動かして
みることに。

久々にAVRISPmkIIを取り出してきて、hexファイルを
書き込んでみる。エラー。お?


この間このTINY2313ボードを使ってたときはちゃんと
読み書きできてたはずなんだけどなぁ。なんでだ?

色々ともがく。まずはチップ不良を疑って、新品の
TINY2313に差し替えて書いてみる。書けた。やっぱ
チップの不良か?

fuseビットも書いてみる。んで、ベリファイ。
…エラー。お?なんで?


ここからしばしドハマリする。

AVRISPmkIIのファームが逝ったか?と思ってファーム
のアップデートを行ってみる。エラー。

AVRISPmkII自体が壊れたのか?と思って色々探ってみる。
マニュアルでファーム書き換えする方法がpdfに載って
たので試してみる。ちゃんとアップデートできた。よし。

改めてhexを書いてみる。エラー。おかしい…。

新しいTINY2313を挿して再度書いてみる。書けた。
fuseビット書き換え。出来た。ベリファイ。エラー。

ん?デジャブー?

もしや…fuseビット書いたら通信出来ないってことは、
クロックを外部にした途端にってこと?TINY2313ボード
に挿してあった16Mhzのセラロック???

セラロックを別のに差し替えてみる。脚がもう少し
カチッと刺さるタイプに。

おぉ。サクサク読み書きできるようになった。なったよ。
ふぅ。


ようやくもとの作業に戻る。

ブレッドボードに配線して、イヤホンとUSBシリアル
コンバータを接続。PC側ソフトには「シリアルデバッグ
ツール」を使用して、シリアルコマンドでレジスタの
設定値を送信してみる。


お!ちゃんと鳴った!!!

シミュレータで試したようなことを一通りやってみる。

・toneの周波数を変えてみる。変わる。
・ボリウムを変えてみる。変わる。
・3ch同時に鳴らしてみる。鳴る。
・エンベロープ掛けてみる。掛かる。
・ノイズを鳴らしてみる。鳴る。
・ノイズの周波数を変えてみる。変わる。

おぉ。バッチリだな。


とりあえず疎通としてはかなりイイカンジまで動いた
んだけど、さらに色々弄っていたら、1点だけ変。

エンベロープパターンのうち、永遠に繰り返し
するやつはちゃんと出るんだけど、1波形だけ
出て2波形目から最小か最大音量に張り付くタイプ
(繰り返ししないエンベロープ)のヤツがうまく
巻き戻らない。2波形目以降の値(lowかhighに
張り付きっぱなし)になっちゃう。何でだろう?

サックリとソースを眺めてみるも、ちゃんと
巻き戻しするように作ってあると思うんだけどなぁ。
まぁ、あとでちゃんと眺めなおしてみよう。

とりあえずここまで進んだので、プチ満足。
通信速度はもうちょっと速くしたいのと、この
バグっぽいのの原因調査だな。

それにしても、AVRISPmkIIが壊れてなくてよかった。


http://headlines.yahoo.co.jp/hl?a=20120510-00001606-yom-int
これは、去年の震災後の冷静な日本人の対応を見ての
結果なのかな。それにしても、中国がずいぶん上位に
居るなぁと思ったんだけど、「悪い」の数値も大きい
から、差し引きしたらまたちょっと違う結果になる
んじゃないかな。日本も「悪い」の数値はドイツや
カナダより大きいもんなぁ。



コメント ( 0 )



« 前ページ 次ページ »