JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F18326 MCC NCOテスト その2

2024-01-28 19:06:01 | MPLAB X MCC
 引き続き、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);
    }
}
--------------------------------------------------------------------
 この音階を利用すれば、メロディーを奏でることができますね。


最新の画像もっと見る

コメントを投稿