100円ショップ ミニミニスピーカのオルゴール化 (その4:ちょっと解説)
オシロの発送連絡がありましたので、多分明日には到着すると思います。楽しみです。
今回は昨日に引き続いて、簡単ですがPICによるオルゴールの1作目と2作目の違いについての説明図を用意しました。
一作目との違いは、楽器の波形を一つ一つPWMで作りだすようにしていることです。波形は0〜15の数値で強さを表したデータを1波形16バイトのテーブルで用意しておき、それを周期に合わせて取り出すようにしました。それ以外の制御は一作目と同じです。
お試し用にHEXファイルも開示いたします。
和音もパートごとに波形を生成しておいて、最後に両方のPWMのパルス幅を加算すればできるはずなのですが、今回は処理が間に合わなかったので断念してしまいました。
PWM用のハードのあるチップ(12F683等)だったらソフトの負荷が減るので和音もできたな、と思っています。実際にWEBをみると683で和音を出されている方もおられます。
なお、ついでに今回使ったPIC12F675と12F509、それと使っていませんがさらに機能強化された12F683の比較表を用意しましたのでご覧ください。
FLASHやRAMサイズの違いはまあいいとして、最初の509では表の中で赤字で書いたメモリアクセスの制限で苦労しました。
特に困ったのが「サブルーチンが下位256バイトにしかおけない」点です。PIC12系はテーブルデータを扱う命令がなく、テーブルデータはプログラムカウンタの操作とRETLW命令によるサブルーチンからのリターン値の組み合わせで取得するようになっています。
つまりサブルーチン機能にかかわるのでテーブルデータも下位256バイト空間にしか置けない、ということになります。いったい何を考えてこうしているのか。。。。
今回使った675ではそういう制限による苦労が一切なく、最初からこっちにすれば良かったと思いました。
普通こういう制限は概要仕様にはでてきませんので、メモリサイズや単価を見て509を買ってあったのですが、安いだけのことはあったようです。LED制御とかのちょっとしたことなら十分なのでしょうが、ある程度のデータを扱う用途には向いていないと思います。
もし趣味で12F系をお使い予定の方がおられましたら、509はやめて675か683を選択されることをお勧めします。趣味用なら単価の違いもそれほど問題とならないでしょうし。特にオルゴールみたいな用途でしたらPWMのある683の方が良いと思います。
今回は以上です。
にほんブログ村 ←記事が面白かったらクリックしてやってください。
コメント