チーム1226

課題名

自動音楽再生装置
Auto Music Play Machine Ver1.0

研究者名

2年15組6番岡田 正杜
2年15組15番櫻井 魁人

概要

スピーカーから音を出して、曲を再生する装置。
二つのスピーカーを用いて和音を鳴らした。

解説 

PSoCとPC間でシリアルポート通信を行い、キーボードからの入力によって再生速度を調整している。参考にしたのはtimer_pwm2とuart_1で、タイマーの割り込みにより、ピリオドを調整することで再生速度を変更している。キーボードからの入力の種類によって再生速度の変更、選曲、一時停止、停止の操作を行えるようにした。pwmから特定の周波数を出力することで音程を決め、スピーカーで鳴らした。
今回はスピーカーを二つ用意し、和音を実現した。

ソースリスト


#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125; // Pulse Width4
int CE = 0;
int count = 0;
int SIL=0,D=229,Ds=216,L=204,Ls=192,M=182,F=172,Fs=162,S=153,Ss=145,R=136,Rs=129,C=121,
  hD=115,hDs=108,hL=102,hLs=96,hM=90,hF=85,hFs=81,hS=76,hSs=72,hR=68,hRs=64,hC=60,hhD=57,
   hhDs = 54,hhL=51,hhM=45,hhF=43,hhFs=41,hhS=38;
   
int TC; //Time Count

void play(int t, int p1, int p2) {
  if(TC == t) {
       PWM8_1_WritePeriod(p1);
       PWM8_2_WritePeriod(p2);
   }
}

void myISR(void) {
  if(CE == 1) {
       TC += 1;
   play(1,C,SIL);
   play(2,R,SIL);
   play(3,Ss,SIL);
   play(4,R,SIL);
   play(5,hD,SIL);
   play(6,SIL,SIL);

  以下省略
  }
}
void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   
   
int counter = 0;
 char * strPtr; 
  UART_CmdReset();
  UART_IntCntl(UART_ENABLE_RX_INT);
            
  Counter8_WritePeriod( 155 );
  Counter8_WriteCompareValue( 77 );
  Counter8_Start();
  UART_Start( UART_PARITY_NONE );
M8C_EnableGInt;
 UART_CPutString("\r\n Auto Music Play Machine Ver 1.0 \r\n");



PWM8_1_Start();
PWM8_2_Start();
Timer16_1_EnableInt();
Timer16_1_Start();
 while(1) {
      if(UART_bCmdCheck()) {
          if(strPtr = UART_szGetParam()) { 
              switch( *strPtr ){
                  case 'l':
                      UART_CPutString("\r\nlow-speed.\r\n");
                      Timer16_1_WritePeriod(9999);
                      break;
                  case 'm':
                      UART_CPutString("\r\nmiddle-speed.\r\n");
                      Timer16_1_WritePeriod(7500);
                      break;
                  case 'h':
                      UART_CPutString("\r\nhigh-speed.\r\n");
                      Timer16_1_WritePeriod(5000);
                      break;
                  case '1':
                          UART_CPutString("\r\nMusic start.\r\n");
                          TC = 0;
                          CE = 1;
                          break;
                  case '2':
                        UART_CPutString("\r\nMusic start.\r\n");
                         TC = 260;
                         CE = 1;
                         break;
                     case 'p':
                      if(count == 0) {
                           UART_CPutString("\r\nPause.\r\n");
                           PWM8_1_WritePeriod(SIL);
                           PWM8_2_WritePeriod(SIL);
                                  count = 1;
                                  CE = 0;
                          }
                          else if(count == 1) {
                           UART_CPutString("\r\nPlay.\r\n");
                           count = 0;
                           CE = 1;
                          }
                       break;
                     case 's':
                       UART_CPutString("\r\nStop.\r\n");
                       PWM8_1_WritePeriod(SIL);
                       PWM8_2_WritePeriod(SIL);
                       CE = 0;
                       TC = 0;
                       break;
           
                  default:
                      UART_CPutString("\r\ninvalid command.\r\n");
                      Timer16_1_WritePeriod(7500);
                      break;
              }
              
          }
          
          UART_CmdReset();
      }
  }
}

使用部品

PSoc
MiniProg
スピーカー 2個
ジャンパ線 7本
シリアルポート通信ケーブル

考察

コマンドを入力した時点で音を変化させたかったが、コマンドを入力した後にEnterを押さないと内容が反映されなかった。
スピーカーをもう少し増やして3和音以上にしたかったが、時間が足りず実現できなかった。

  • 最終更新:2012-06-12 16:07:35

このWIKIを編集するにはパスワード入力が必要です

認証パスワード