ChaN氏の電子オルゴール、音出しまであと一歩?
ニコニコ動画をバイブルとして、「ChaN氏の電子オルゴール」を製作しようという試みですが、前回は AVR Studio上にChaN氏のオリジナルプログラムを表示するところまで漕ぎ付けました。
今回は、ATtiny45用のこれを、ATtiny85用へと一部変更していきます。
(1)の変更は、tn45def を tn85def に書き換えているのに、(2)の方は org 3072/2 の行の下に org (8192-1024)/2 を書き加えていて、これはどうしてなんだろ? って、ずっと疑問でした。
実は、org 3072/2 の前に付け加えられた「;」を見落としていたんです。アセンブラでは「;」を入れた行はコメントになるって知ったのは、ずっと後のこと。
すべてが上手くいくと、マイコンにプログラムを書き込み終わった瞬間、スピーカーから「エリーゼのために」が流れ出します。
曲を「エリーゼのために」から、後ほど紹介するうp主殿が制作された「MIDI変換ソフト」の中に含まれる他のサンプル曲や、自分で作った曲データに入れ替えるには、(3)の変更を行います。
曲データ自体(asmファイル)は、「mg」フォルダの中にあります。
前回、ChaN氏のサイトからダウンロードしたプログラムの中身を、AVR Studio のプロジェクトフォルダの中にコピーしましたが、その中に「melody.asm」というファイルがあります。
このファイルと入れ替えるか、あるいは別の名前の曲データファイルを追加してもOKでした。
(4)の方は上に書いた通りで、完成したATtiny85から流れ出す「エリーゼのために」が、動画から聞こえる同曲と音程やテンポが明らかに違うようであれば、29行目の頭にある「;」を削除します。
アセンブルの方は、メニューからアセンブルのアイコンをクリックすると、特に問題なく動画と同じ結果になりました。
問題は、11'30" 辺りからの「ライターの選択」。動画では、当然の如く「AVRISP markⅡ」を選択しますが、私には出来ません(持ってないので)。
ただ、これは想定していたことです。書き込み装置としては Tools の中の HIDaspx を使う予定でしたから。
想定外だったのは、AVRISP markⅡを選択した後に続く一連の設定が HIDaspx 向けに出来ないこと。特に、ヒューズビットの設定は、どうやればいいのか私には分かりません。
いまだにヒューズビットって何なのか全然理解してないけど、それをキチンと設定しないとマイコンが上手く機能しないってのだけは分かる(ATtiny45を2個もそれでダメにしてるから)。
調べていくと何となくやり方は分かるんだけど、(繰り返しになるけど)ヒューズビットの中身を理解していないってのと、既に2個ダメにしているので、あやふやな知識でいじるのが怖い。
ってことで、動画のこの部分をサラッと飛ばして、出来あがったプログラムをマイコンへと書き込み。書き込み操作自体は、上の画像の通り Tools から HIDaspx を選ぶだけ。
ATtiny85への書き込みは何の問題もなく完了・・・・・したのに、音が出てきません。
ま、そうだよなー。そんなに簡単にいくわけないよなーって、半分諦め、半分納得。
さて、どうしよう?って途方に暮れながらスピーカーを見つめていたら、なんか雑音のような発信音のような音が微かに聞こえる。
もしかしたらもう一歩のところまで来てるのかもしれない。やっぱりヒューズビットの設定のせいなのかな?
ということで、続きます。
今回は、ATtiny45用のこれを、ATtiny85用へと一部変更していきます。
ATtiny45用からATtiny85用にするために変更すべき(取り敢えず)2ヶ所
プログラムの全体像と変更点が分かり易いように "流れ" だけ書き出してみました(実際にはこの何倍もの長さがあります)。(1) 4行目:tn45def > tn85def(デバイス定義ファイルを変更)
(2)67行目:org 3072/2 > org (8192-1024)/2(テーブルデータを移動)
(2)67行目:org 3072/2 > org (8192-1024)/2(テーブルデータを移動)
- ;----------------------------------------------------------;
- ; Melody Generator (C)ChaN, 2005
- .include "tn45def.inc" ;This is included in "Atmel AVR Studio"
- .include "avr.inc"
- .include "mg.inc"
- .def _0 = r15
- (省略)
- ;----------------------------------------------------------;
- ; Work Area
- (省略)
- ;----------------------------------------------------------;
- ; Program Code
- (省略)
- ;--------------------------------------------------------------------;
- ; Program Code
- reset:
- clr _0
- ldiw X, RAMTOP ;Clear RAM
- ldi AL, 0 ;
- st X+, _0 ;
- dec AL ;
- brne PC-2 ;/
- ; outi OSCCAL, 172 ;Adjust OSCCAL if needed.
- (省略)
- ;--------------------------------------------------------------------;
- ; Note ON
- (省略)
- ;--------------------------------------------------------------------;
- ; Decay envelope generation
- (省略)
- ;--------------------------------------------------------------------;
- ; 32 kHz wave form synthesising interrupt
- (省略)
- ;--------------------------------------------------------------------;
- ; Score table
- ;--------------------------------------------------------------------;
- score:
- .include "melody.asm"
- ;--------------------------------------------------------------------;
- ; Pitch number to angular speed conversion table
- ;--------------------------------------------------------------------;
- ;Since sustain area of wave table, a cycle of fundamental frequency, is sampledin 128 points, the base frequency becomes 32000/128 = 250 Hz. The wave tablelookup pointer, 16.8 fraction, is increased every sample by these 8.8 fractionalangular speed values.
- (省略)
- ;--------------------------------------------------------------------;
- ; Envelope Table
- ;--------------------------------------------------------------------;
- (省略)
- ;--------------------------------------------------------------------;
- ; Wave Table
- ;--------------------------------------------------------------------;
- ; 8bit, 32 ksps, 250 Hz fundamental frequency
- .org 3072/2 ; Bottom stored
- (省略)
- wt_end:
(1)の変更は、tn45def を tn85def に書き換えているのに、(2)の方は org 3072/2 の行の下に org (8192-1024)/2 を書き加えていて、これはどうしてなんだろ? って、ずっと疑問でした。
実は、org 3072/2 の前に付け加えられた「;」を見落としていたんです。アセンブラでは「;」を入れた行はコメントになるって知ったのは、ずっと後のこと。
ついでに後々、変更する可能性のあるプラス2ヶ所
ついでなので、プログラムの中でもう2カ所変更する可能性のある場所を付け加えておきます。(3)49行目:melody.asm > abc.asm(入れ替える曲データの名前)
(4)29行目:完成した曲が、動画の音程やテンポと違う場合、頭についている「;」を削除
(4)29行目:完成した曲が、動画の音程やテンポと違う場合、頭についている「;」を削除
すべてが上手くいくと、マイコンにプログラムを書き込み終わった瞬間、スピーカーから「エリーゼのために」が流れ出します。
曲を「エリーゼのために」から、後ほど紹介するうp主殿が制作された「MIDI変換ソフト」の中に含まれる他のサンプル曲や、自分で作った曲データに入れ替えるには、(3)の変更を行います。
曲データ自体(asmファイル)は、「mg」フォルダの中にあります。
前回、ChaN氏のサイトからダウンロードしたプログラムの中身を、AVR Studio のプロジェクトフォルダの中にコピーしましたが、その中に「melody.asm」というファイルがあります。
このファイルと入れ替えるか、あるいは別の名前の曲データファイルを追加してもOKでした。
(4)の方は上に書いた通りで、完成したATtiny85から流れ出す「エリーゼのために」が、動画から聞こえる同曲と音程やテンポが明らかに違うようであれば、29行目の頭にある「;」を削除します。
ヒューズビットの設定のやり方が分からない
さて、「エリーゼのために」が流れ出すずっと前に戻りますが、動画の10'30" 過ぎ辺りから「アセンブルと書き込み」となるのですが、ここに罠が待ち構えていました。アセンブルの方は、メニューからアセンブルのアイコンをクリックすると、特に問題なく動画と同じ結果になりました。
問題は、11'30" 辺りからの「ライターの選択」。動画では、当然の如く「AVRISP markⅡ」を選択しますが、私には出来ません(持ってないので)。
ただ、これは想定していたことです。書き込み装置としては Tools の中の HIDaspx を使う予定でしたから。
想定外だったのは、AVRISP markⅡを選択した後に続く一連の設定が HIDaspx 向けに出来ないこと。特に、ヒューズビットの設定は、どうやればいいのか私には分かりません。
いまだにヒューズビットって何なのか全然理解してないけど、それをキチンと設定しないとマイコンが上手く機能しないってのだけは分かる(ATtiny45を2個もそれでダメにしてるから)。
調べていくと何となくやり方は分かるんだけど、(繰り返しになるけど)ヒューズビットの中身を理解していないってのと、既に2個ダメにしているので、あやふやな知識でいじるのが怖い。
ってことで、動画のこの部分をサラッと飛ばして、出来あがったプログラムをマイコンへと書き込み。書き込み操作自体は、上の画像の通り Tools から HIDaspx を選ぶだけ。
ATtiny85への書き込みは何の問題もなく完了・・・・・したのに、音が出てきません。
ま、そうだよなー。そんなに簡単にいくわけないよなーって、半分諦め、半分納得。
さて、どうしよう?って途方に暮れながらスピーカーを見つめていたら、なんか雑音のような発信音のような音が微かに聞こえる。
もしかしたらもう一歩のところまで来てるのかもしれない。やっぱりヒューズビットの設定のせいなのかな?
ということで、続きます。
- 関連記事