ランダムトーンジェネレーター(水の流れる様な音)

Topics PICC lite Sound stdlib.h rand() Interrupt TIMER0 PIC12F675 PIC12F629

PICマイコンで水の流れるような音をつくってみました。

回路図



ピエゾの場合は、トランジスタを使用せずに直接PICの出力に接続します。


プログラム

ソースはこちらからダウンロード出来ます。MPLABX形式で作成。バイナリーデータは
random_tone.X\dist\default\production
random_tone.X.production.hex
がありますので、書き込んで使用できます。

原理

タイマー0の割り込み間隔で音程の出力を決めています。タイマー0があまりにも小さい(10以下)と、割り込みから戻ってこれなくなるので、乱数値に幾らかを足しています。スリープ動作をさせるために、空きピンを全部入力にしてプルアップ処理をしています。
出力がアクティブローな理由はそのためです。
このスリープを行うことで100ピコアンペア以下の待機状態を作る事ができました。MCLR部分のプルアップ抵抗は、取り付けないと消費電流が増加することが実験で分かっていますので取り付けています。そのついでにスイッチを取り付けています。

動作説明

電池を接続した最初は動作がおかしかったりします。これは、スリープ時に100ピコアンペア以下にさせるため、ブラウンアウトリセットや、パワーアップタイマーなど、リセット時に安定にしてくれるファンクションを利用していないためです。
起動時はラの音程が一瞬でます。何度か電池を接続しなおしてみてください。

ボタンを押すと、約20秒間、水の流れるような音がスピーカーから出力されます。音が出ている途中でボタンを押すと終了します。
待機中は電池を殆ど消費しません。動作中の電流は約20mAです。

フォトギャラリー



ゼクシィ2013年1月号の付録に「音嫁」という付録があり、水を流す音+BGMで楽しいのですが、音楽を抜いたバージョンとして応用してみました。




機構部品は殆ど流用しています。




PIC12F629のSOPタイプと2SA1162(2SA1015のSC59パッケージ版)の構成にしています。


旧データ

概要

ランダムな音階を出します。ボリウムを操り、ランダム音階のスピードを変える事ができます。
サンプルのmp3

実用性は???ですが、楽器として面白いかもしれません。

回路図


回路は至ってシンプルです。J1の部分が音の出力となります。下の回路図が代表的な接続例です。

プログラムファイル

ランダムトーンのファイル一式(Hexも含む)はこちらからダウンロードできます。
また、以前に公開したボリウムを使用しない川の流れだけのプログラムはこちらに圧縮してあります。hexが既に出来上がっていますので、すぐにPICへ書き込むことができます。インストールフォルダーについては添付readme.txtを参照ください。

動作説明

このプログラムの要(かなめ)は、乱数を作るところです。
#include <stdlib.h>
をプログラム最初に入れてあげると乱数の関数を扱えます。

rand() ・・・・乱数を0〜32767の整数で発生させます。
srand( unsigned int) ・・・・ 乱数の初期値を与えます。乱数といっても擬似乱数ですので、電源投入時から順番にとる乱数値が一定にならないようにする関数です。タイマーなどでかき混ぜるといった事が一般的でしょうか。

音程として1〜249を入れたかったので、132で割り算し1を足しています


2013/12/11MPLABX用ファイル公開(スピーカー版)
2006/12/16修正
2006/10/6 初版

(C)2006-2013 air variable All Rights Reserved..

ホーム