チーム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