PIC16F18313の基本動作から応用プログラムまでを学びます。

ホーム
12F1822
16F1455
16F1459
18F14K50
18F26J50
dsPIC
その他
    
16F18313
16F18325
16F18346
16F1619
Curiosity
---
---
オルゴール
2021-12-16

PWM を使用してオルゴール調の音色で曲を演奏します。  PIC12F1822のオルゴールプログラムをPIC12F18313に書きなおしたものです。このオルゴールは、基本的な動作を確認するために1つの音しか発生させていませんが、この発音方法を応用し、4音同時に演奏するプログラムも次のページに掲載しました。また、このプログラムでは、PICの特徴を生かし、演奏をしていないときはスリープ状態にし消費電力を抑えたため乾電池2本で、電池寿命を忘れるほど長く持ちます。小さな箱に組み込んで使用するのに最適です。

*Note*
このプログラムで使用する楽譜データは、 [オルゴールデーター作成 Windows アプリ] を利用して、作ることができます。

プログラム 1

PICのペリフェラルは以下の用途に使用しています。

Timer0
1ms毎に、タイミングパルスを発生させて、SWのチャタリング防止のためや、音符の演奏タイミングを作るのに使用
Fosc/4(2MHz)をPS:1/8 PR(TMR0H)で 1/250するので、1mS毎にFlagをセット。
CCP1 Timer2
音量(平均電圧レベル)を変化させるためPWM波形を作るのに使用
Fosc/4(2MHz)をPS:1/1 PR2;1/128 するので、PWM周期は、15.625KHz。

リストの表示
ソースリスト main は、[こちら
曲のデータリストは、 [こちら

プログラム 2 NCO使用

NCO, CLC, DSMを利用しています。PICのペリフェラルは以下の用途に使用します。

Timer0
1ms毎に、タイミングパルスを発生させて、音符の演奏タイミングを作るのに使用
Fosc/4(8MHz)をPS:1/32 PR(TMR0H)で 1/250するので、1mS毎にFlagをセット。
CCP1 Timer2
音量(平均電圧レベル)を変化させるためPWM波形を作るのに使用
Fosc/4(8MHz)をPS:1/1 PR2;1/32 するので、PWM周期は、250KHz。この 250KHzは、NCOクロックにも使用する。
NCO
音の周波数を決める発信器です。NCOクロックは、250KHz。
CLC1
NCOは、クロックをTimer2から直接入力っすることができないので、CLC1を介して接続します。
DSM
音量(平均電圧レベル)を変化させるCCP1出力を、NCO出力で On/Offすることで、電子オルゴールの音を発生させます。

リストの表示
ソースリスト main は、[こちら
曲のデータリストは、 [こちら

プログラム 3 複数曲の演奏

プログラム構成は、プログラム 2と同様です。曲の演奏開始時に楽譜データファイルの終端か確認し、もし終端なら先頭に戻る処理が追加せれています。

リストの表示
ソースリスト main は、[こちら
曲のデータリストは、 [こちら] 3局入っています。