引き続き、PIC16F18326のNOCのテストをします。
今回は、任意の周波数を発生させ、NOC出力(RC3に設定しました)にスピーカーを接続して音として聞くことにより、様々な効果音やメロディーを奏でてみることにします。
回路図です。ICSPでプログラムを書き込みます。PICは、けっこう力持ちでこのままだとかなり大きな音が出ます。音が大きすぎるときには直列に100Ω程度の抵抗を入れると聞きやすくなります。
まず、救急車のピーポー音を出してみます。
MCCの設定は、前の記事と同じです。
systemモジュールです。
NCO1モジュールです。
ピーポー音は、ピーの音(960Hz)0.65秒、ポーの音(770Hz)0.62秒の繰り返しです。予めNCOモジュールで、周波数に対するレジスタの設定値を調べておきます。
NCOの出力周波数を決定するのは、NCO1INCU,NCO1INCH,NCO1INCLレジスタ(各8bit)の値で、NCO1INCU = 0x0で、周波数ごとの各レジスタの値は
周波数 NCO1INCH NCO1INCL
960Hz 0x1 0xF7
770Hz 0x1 0x94
です。
プログラムです。NCO1INCUは設定していませんが、デフォルトで0x0です。
-----------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
NCO1CONbits.N1EN = 1;//NCO1スタート
NCO1INCH = 0x1;
while (1)
{
NCO1INCL = 0xF7;//ピーの音 960Hz
__delay_ms(650);
NCO1INCL = 0x94;//ポーの音 770Hz
__delay_ms(650);
}
}
-----------------------------------------
レジスタへの設定は、NCO1INCH,NCO1INCLの順に行います。
はい、ピーポーピーポーと聞こえました。
では、次にドレミソラシドの音階を出してみましょう。各音階(周波数)とレジスタの設定値は次のとおりです。(NCOINCUは0x0です)
音階(周波数) NCO1INCH NCO1INCL
ド(262Hz) 0x00 0x89
レ(294Hz) 0x00 0x9A
ミ(330Hz) 0x00 0xAC
ファ(349Hz) 0x00 0xB7
ソ(392Hz) 0x00 0xCE
ラ(440Hz) 0x00 0xE7
シ(494Hz) 0x01 0x03
ド(523Hz) 0x01 0x12
ドレミファソラシドを繰り返すプログラムです。
--------------------------------------------------------------------
/*
* PIC16F18326 MCC NCO test
* 2024.1.28
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
NCO1CONbits.N1EN = 0;//NCO1ストップ
NCO1INCH = 0x1;
while (1)
{
NCO1CONbits.N1EN = 1;//NCO1スタート
NCO1INCH = 0x0;
NCO1INCL = 0x89;//ドの音 262Hz
__delay_ms(1000);
NCO1INCL = 0x9A;//レの音 294Hz
__delay_ms(1000);
NCO1INCL = 0xAC;//ミの音 330Hz
__delay_ms(1000);
NCO1INCL = 0xB7;//ファの音 349Hz
__delay_ms(1000);
NCO1INCL = 0xCE;//ソの音 392Hz
__delay_ms(1000);
NCO1INCL = 0xE7;//ラの音 440Hz
__delay_ms(1000);
NCO1INCH = 0x1;//シの音 494Hz
NCO1INCL = 0x03;
__delay_ms(1000);
NCO1INCL = 0x12;//ドの音 523Hz
__delay_ms(1000);
NCO1CONbits.N1EN = 0;//NCO1ストップ
__delay_ms(1000);
}
}
--------------------------------------------------------------------
この音階を利用すれば、メロディーを奏でることができますね。
※コメント投稿者のブログIDはブログ作成者のみに通知されます