チーム123A

課題名

オルゴール

研究者名

2年15組40番 畠山椋丞
2年15組32番 長岡大貴

概要

授業の課題で行った、pwm_uart_2とtimer_pwm2を合わせて作成した。
シリアルポート通信を使いキーボードからの入力を
PSoCに接続したスピーカーからメロディーが流れるようにした。
【曲名】
a:キラキラ星
b:ありがとう
c:栄光の架け橋

ソースコード

#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 Width
int SILENT=0, D=229, L=204, M=182, F=172, S=153, R=136, C=121, DD=115,MM=91,RR=68;
int DDs=108,LLs=96,FFs=81,SSs=72;
int TC=0; //Time Count
int key=0;

void myISR(void)
{
if(key==1){ //キラキラ星
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
PWM16_1_WritePeriod(D);
else if(TC == 3)
PWM16_1_WritePeriod(SILENT);
else if(TC == 4)
PWM16_1_WritePeriod(D);
else if (TC == 6)
PWM16_1_WritePeriod(S);
else if(TC == 8)
PWM16_1_WritePeriod(SILENT);
else if(TC == 9)
PWM16_1_WritePeriod(S);
else if(TC == 11)
PWM16_1_WritePeriod(R);
else if(TC == 13)
PWM16_1_WritePeriod(SILENT);
else if (TC == 14)
PWM16_1_WritePeriod(R);
else if(TC == 16)
PWM16_1_WritePeriod(S);
else if(TC == 20)
PWM16_1_WritePeriod(F);
else if(TC == 22)
PWM16_1_WritePeriod(SILENT);
else if (TC == 23)
PWM16_1_WritePeriod(F);
else if (TC == 25)
PWM16_1_WritePeriod(M);
else if(TC == 27)
PWM16_1_WritePeriod(SILENT);
else if(TC == 28)
PWM16_1_WritePeriod(M);
else if(TC == 30)
PWM16_1_WritePeriod(L);
else if(TC == 32)
PWM16_1_WritePeriod(SILENT);
else if (TC == 33)
PWM16_1_WritePeriod(L);
else if(TC == 35)
PWM16_1_WritePeriod(D);
else if(TC == 39)
PWM16_1_WritePeriod(S);
else if(TC == 41)
PWM16_1_WritePeriod(SILENT);
else if(TC == 42)
PWM16_1_WritePeriod(S);
else if (TC == 44)
PWM16_1_WritePeriod(F);
else if(TC == 46)
PWM16_1_WritePeriod(SILENT);
else if(TC == 47)
PWM16_1_WritePeriod(F);
else if(TC == 49)
PWM16_1_WritePeriod(M);
else if(TC == 51)
PWM16_1_WritePeriod(SILENT);
else if (TC == 52)
PWM16_1_WritePeriod(M);
else if(TC == 54)
PWM16_1_WritePeriod(L);
else if(TC == 58)
PWM16_1_WritePeriod(S);
else if(TC == 60)
PWM16_1_WritePeriod(SILENT);
else if (TC == 61)
PWM16_1_WritePeriod(S);
else if (TC == 63)
PWM16_1_WritePeriod(F);
else if(TC == 65)
PWM16_1_WritePeriod(SILENT);
else if(TC == 66)
PWM16_1_WritePeriod(F);
else if(TC == 68)
PWM16_1_WritePeriod(M);
else if(TC == 70)
PWM16_1_WritePeriod(SILENT);
else if (TC == 71)
PWM16_1_WritePeriod(M);
else if(TC == 73)
PWM16_1_WritePeriod(L);
else if (TC == 77)
PWM16_1_WritePeriod(D);
else if(TC == 79)
PWM16_1_WritePeriod(SILENT);
else if(TC == 80)
PWM16_1_WritePeriod(D);
else if(TC == 82)
PWM16_1_WritePeriod(S);
else if(TC == 84)
PWM16_1_WritePeriod(SILENT);
else if(TC == 85)
PWM16_1_WritePeriod(S);
else if (TC == 87)
PWM16_1_WritePeriod(R);
else if(TC == 89)
PWM16_1_WritePeriod(SILENT);
else if(TC == 90)
PWM16_1_WritePeriod(R);
else if(TC == 92)
PWM16_1_WritePeriod(S);
else if (TC == 96)
PWM16_1_WritePeriod(F);
else if(TC == 98)
PWM16_1_WritePeriod(SILENT);
else if(TC == 99)
PWM16_1_WritePeriod(F);
else if(TC == 101)
PWM16_1_WritePeriod(M);
else if(TC == 103)
PWM16_1_WritePeriod(SILENT);
else if (TC == 104)
PWM16_1_WritePeriod(M);
else if (TC == 106)
PWM16_1_WritePeriod(L);
else if(TC == 108)
PWM16_1_WritePeriod(SILENT);
else if(TC == 109)
PWM16_1_WritePeriod(L);
else if(TC == 111)
PWM16_1_WritePeriod(D);
else if(TC == 113)
PWM16_1_WritePeriod(SILENT);
}




else if(key==2){ //ありがとう
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
PWM16_1_WritePeriod(D);
else if(TC == 2)
PWM16_1_WritePeriod(L);
else if (TC == 3)
PWM16_1_WritePeriod(M);
else if(TC == 4)
PWM16_1_WritePeriod(F);
else if(TC == 6)
PWM16_1_WritePeriod(S);
else if (TC == 12)
PWM16_1_WritePeriod(R);
else if(TC == 14)
PWM16_1_WritePeriod(S);
else if(TC == 17)
PWM16_1_WritePeriod(F);
else if (TC == 19)
PWM16_1_WritePeriod(M);
else if (TC == 22)
PWM16_1_WritePeriod(F);
else if(TC == 24)
PWM16_1_WritePeriod(M);
else if(TC == 32)
PWM16_1_WritePeriod(SILENT);

else if(TC == 33)
PWM16_1_WritePeriod(M);
else if (TC == 35)
PWM16_1_WritePeriod(DD);
else if(TC == 38)
PWM16_1_WritePeriod(C);
else if(TC == 40)
PWM16_1_WritePeriod(DD);
else if(TC == 48)
PWM16_1_WritePeriod(M);
else if (TC == 50)
PWM16_1_WritePeriod(M);
else if(TC == 53)
PWM16_1_WritePeriod(L);
else if(TC == 55)
PWM16_1_WritePeriod(D);
else if (TC == 58)
PWM16_1_WritePeriod(R);
else if(TC == 60)
PWM16_1_WritePeriod(S);
else if(TC == 68)
PWM16_1_WritePeriod(SILENT);
}






else if(key==3){ //栄光の架け橋
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
PWM16_1_WritePeriod(S);
else if(TC == 3)
PWM16_1_WritePeriod(SSs);
else if (TC == 5)
PWM16_1_WritePeriod(SSs);
else if(TC == 7)
PWM16_1_WritePeriod(FFs);
else if(TC == 9)
PWM16_1_WritePeriod(MM);
else if (TC == 12)
PWM16_1_WritePeriod(MM);
else if(TC == 15)
PWM16_1_WritePeriod(SILENT);
else if(TC == 16)
PWM16_1_WritePeriod(R);
else if(TC == 18)
PWM16_1_WritePeriod(FFs);
else if (TC == 20)
PWM16_1_WritePeriod(FFs);
else if (TC == 22)
PWM16_1_WritePeriod(MM);
else if(TC == 24)
PWM16_1_WritePeriod(FFs);
else if(TC == 25)
PWM16_1_WritePeriod(FFs);
else if(TC == 26)
PWM16_1_WritePeriod(SSs);

else if(TC == 32)
PWM16_1_WritePeriod(SILENT);
else if(TC == 33)
PWM16_1_WritePeriod(C);
else if(TC == 35)
PWM16_1_WritePeriod(SSs);
else if (TC == 37)
PWM16_1_WritePeriod(SSs);
else if(TC == 39)
PWM16_1_WritePeriod(FFs);
else if(TC == 42)
PWM16_1_WritePeriod(MM);
else if (TC == 45)
PWM16_1_WritePeriod(MM);

else if(TC == 48)
PWM16_1_WritePeriod(SILENT);
else if (TC == 49)
PWM16_1_WritePeriod(MM);
else if(TC == 51)
PWM16_1_WritePeriod(LLs);
else if(TC == 53)
PWM16_1_WritePeriod(DDs);
else if(TC == 55)
PWM16_1_WritePeriod(DDs);
else if (TC == 57)
PWM16_1_WritePeriod(C);

}
}



void main(void)
{
char *strPtr; // Parameter pointer
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   //Insert your main routine code here.
M8C_EnableGInt;
PWM16_1_Start();
Timer16_1_EnableInt();
Timer16_1_Start();


UART_CmdReset(); // Initialize receiver/cmd buffer
UART_IntCntl(UART_ENABLE_RX_INT); // Enable RX interrupts
Counter8_WritePeriod(155); // Set up baud rate generator
Counter8_WriteCompareValue(77);
Counter8_Start(); // Turn on baud rate generator
UART_Start(UART_PARITY_NONE); // Enable UART
M8C_EnableGInt ; // Turn on interrupts
PWM16_1_Start();
UART_CPutString("\r\nPSoC Synthesizer V1.1 \r\n");

while(1)
{
if(UART_bCmdCheck()) { // Wait for command
if(strPtr = UART_szGetParam()) { // More than delimiter?
UART_CPutString("Found valid command\r\nCommand =>");
UART_PutString(strPtr); // Print out command
UART_CPutString("<\r\nParamaters:\r\n");

if (*strPtr=='a'){
TC = 0;
key = 1;
}
else if(*strPtr=='b'){
TC = 0;
key = 2;
}
else if(*strPtr=='c'){
TC = 0;
key = 3;
}


}
UART_CmdReset();
}
}
}



使用部品

・PSoC
・PSoC MiniProg
・ジャンパ線×4本
・スピーカー
・シリアルポート通信ケーブル

考察

同じ音を続けて入力すると、一つの音に聞こえてしまった。これを解消するために、
音と音の間にサイレントを入れることによって同じ音を連続して聞くことができた。
今回はできなかったが、キーボードから入力して、タイムカウントを増やし、
音楽のスピードを速めることができると考えられる。

  • 最終更新:2012-07-10 15:11:58

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

認証パスワード