こっそりこんなモノを作ってました.
参考URLなどメモしておきます.気が向いたらスケッチを公開するかも.
YMZ294関連
YMZ294は秋月で手に入るPSG音源で,MSX等に載っていたモノ相当品らしい. 結構まえから安定的に手に入るモノのようで,PICとかArduinoとかで鳴らしておられる先達方々の記事を参考にさせていただきました.
- YMZ294で楽しむPSG音源
- YMZ294 – SSG音源ボード
- YMZ294 x4で音源ボードを作った方の記事.回路図の後段のオペアンプ周りを参考にさせていただきました.
- 2009-06-25 – kazuya_aの日記 OpenGLとかSchemeとか
- 超高速?YMZ294いろいろ(アセンブリ読書) 否定的なものは怠惰の中では繁殖する
- 最初fscの値を誤解していたのですが,添付の4MHzオシレータを使う場合は2000000でいいようです.
私はオペアンプの使い方をよく分かっていないのですが(汗),この部分がYMZ294の音を合成してさらにローパスフィルタとして作用している,んでしょうか…(この部分を介さないときれいに鳴らない)
MIDIシールド
最初はMIDIのデータを変換してArduinoのプログラムメモリに直接焼き込んでたのだけど,途中からMIDIシールドを使ってMIDIメッセージを PCから送って鳴らすようにしました.
- MIDI-OX
- MIDIメッセージをモニタリングしたりPC内でMIDI-IN,MIDI-OUTを結線したりするためのソフトウェア
- Ruby – Standard MIDI File module
- RubyでMIDIデータを読み出すためのライブラリ
- MIDI Breakout – SparkFun Electronics
- MIDI Message Table 1
- MIDIメッセージの仕様.Note ONとかNote OFFのときに複数のノートが来る場合,ノートナンバーとベロシティが連続してくる,というあたりを理解して無くてハマったのは内緒.
余談
ブレッドボードは案外デリケート
結構な配線量になってしまいました.中盤からはピンセットを使って慎重に配線しました.
さすがにこのレベルになるとちょっと触っただけでバスに接触不良が生じたりして大変でした.
あとGNDに使うジャンプワイヤを複数張っておかないと電流容量が足らなくなることがあるようです.
ユニバーサル基板+スズメッキ線でちゃんとしたボードにしたいけど大変そうです.
Arduinoのプログラムメモリに配列を配置する
最初は,MIDIデータを変換してArduinoのプログラムメモリに配列として焼き込んでたんだけど,それに関連する話題.
2.8” TFT TouchShieldのライブラリのなかで見かけたのだけど 以下のような書き方をすると配列をArduinoのプログラムメモリに配置できるみたい.
#include <avr/pgmspace.h> int hogeData[] = PROGMEM { /* ... */ }; void func() { /* 読み込むとき */ int someData = pgm_read_word(&hogeData[0]); }
この方法ならかなり大きい配列でも焼き込めるようです.
2.8” Touch Shieldのライブラリでは8×8のASCIIフォントをこの方法で
格納していました.ただ,プログラムメモリを食いつぶすようなデカイものは当然弾かれるみたいです
(Arduino UNO(ATMega328P)ならプログラムメモリは32KB.実際は28KBくらいしか焼き込めない).