上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

先日偶然AMラジオから音が聞こえた現象を、意図的に動かしてみました。


Dscf2568_2  Dscf2559


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


原理はとても簡単で、PICマイコンが持っているPWM機能を以下のように使います。


 ・PWM周期をAMラジオの周波数帯に設定する。今回は630KHzにしました。


 ・20KHzインターバルタイマ割り込みでPWMのパルス幅を出したい音に合わせて制御する。


まずは動きをどうぞ。前回の現象はスプリアス的に周波数のあちこち聞こえてましたが、今回のものはラジオを周波数を630KHzに合わせるときっちり聞こえます。



電波法的には。。。3mどころか10cmも離せば聞こえなくなるので大丈夫でしょう。


実用性は。。。ないかな(^^;? 強いて言えばラジオのボリューム上げれば内蔵ブザーより大音量が得られる、くらいですかね。




回路図は以下の通りです。プログラム用コネクタに出ているPB0端子にアンテナ代わりの線を刺しただけです。ソフトでPB0をPWM出力にしています。


Oled2_cir_2




ソースは以下の通りです。


「WORG_MAIN.c」をダウンロード  メインです。


「musicdata.h」をダウンロード  2和音3曲分のデータです。


ほかのファイルは以前のTETRISのときと同じです。


音楽データは、音程1バイト+音長1バイトで一つの音符に相当します。


音程の数値は発音したい周波数を20KHzの周期(50us)で割ったものです。


20KHz割り込みごとにカウントし、この数値の1/2回ごとにPWMパルス幅の長短を切り替えることで630KHzのPWM出力に変調がかかります。


和音は、それぞれのパートのパルス幅長短の計算値を加算して対応しています。今回2和音ですが、割り込み処理が間に合うならもっと増やすこともできます。



実はこのデータとアルゴリズムは以前PIC12Fでオルゴールを作った物を流用しましたので、比較的簡単にできました。


しかし、PIC12Fの時はアセンブラでぎりぎり間に合っていた処理で、今回C言語で記述して間に合うかどうか、と不安でしたが、やってみたら特に問題なしでした。さすがPIC24Fです。


ADCを動かせばワイヤレスマイクもできますね。しかしあまり面白くなさそうなので今回はやめときますが。



それではまたです。








2013.10.27 Sun l PICマイコン l コメント (4) トラックバック (0) l top

コメント

No title
akio様。こんにちは。
お試しありがとうございました。
はい。あれはラジオがかなり近くにないとなにも聞こえません(^^)
あくまで面白実験ということで。
ご紹介の小型圧電サウンダ是非試してみたいと思います。
(しかし今のFRISKケースのブザーはホットボンドで固定してしまったので、ちょっと交換難しいです。。。)
2013.10.30 Wed l 見習職人. URL l 編集
No title
早速、ソースをダウンロードして、試して見ました。
最初、何にも聴こえないな〜 と、思ったのですが、ラジオからじゃ無いと、聴こえないんですね。当然ながら^_^;
圧電ブザーは、これがオススメです。
秋月電子
ムラタ表面実装圧電サウンダ(トランスデューサ/圧電スピーカ/)
結構、小さいんですが、それなりに聴こえますよ^_^
2013.10.29 Tue l akio. URL l 編集
No title
ezekiel様。こんにちは。いつもご訪問ありがとうございます。
  
C言語のコンパイラについてですが、
 ・組み込み系でよくあるのが、PIC,ARM,SH,AVRといったあたりと思います。
 ・コンパイラは上のようなCPUの種類ごとに専用となります。
 ・CPUのメーカまたはサードパーティが出しています。
 ・有料もありますが、緩い制限付きで無料で使えるのがほとんどと思います。
  
PICに関しましては、12F系、16F系、18F系、24F系、dsPIC系など有り、開発環境とコンパイラは共通の物(MPLABとC30)が使えます。
 
ソースは残念ながらそれぞれの系で異なります。例えば16F用のソースをそのまま18Fには使えません。修正が必要です。
  
また同じ系でもCPUによってCONFIG定義やレジスタなどが異なりますので、例えば16F84と16F877では少し修正が必要となります。
  
とはいっても、PIC全体として基本部分がなんとなく共通的で、修正すれば使える、あるいは違う系のソースでもかなり参考にはなる、という感じはしています。
   
私が慣れているのでPICの話ばかりですみません。AVRの方がよくできていて使いやすい、という知り合いもいます。これからお使いでしたらPICにこだわらない方がよいのかもしれません。
  
回答になりましたでしょうか?
2013.10.27 Sun l 見習職人. URL l 編集
No title
すっごーい
ただ、ただ感心するのみです。
見習い職人さんでは無く、もう匠の領域ですね
考えた事を物にし、実現する力は半端では有りませんね
いくらお隣さんが真似しようとも、見習い職人さんの様な人が
入る限り日本の将来は明るい。
すみませんちょっと別の件で質問宜しいでしょうか。
と言いながら勝手に質問させて頂きますが
ソースリストと言うのは、完全な(?)C言語出書かれたものを
コンパイルしてマシン語に直しますが
コンパイラーは例えばいろんなCPUがありますが
PIC用とかARM?・・・etcとか、それぞれの専用のコンパイラーと
言うのが有るのでしょうか。
また、PICには16Fとか、18,24Fとか有りますが
16Fで作ったソースをそのまま18Fとかにコンパイルして使えるのでしょうか。
余計なお手数をおかけしますが、何も分かりませんので
教えて下さい。
2013.10.27 Sun l ezekiel. URL l 編集

コメントの投稿












トラックバック

トラックバック URL
http://diyelec.blog.fc2.com/tb.php/183-7dbf370d
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。