チーム1415

課題名

ジブリ音楽再生機

研究者名

2年15組50番 山口千尋
2年15組52番 湯山正悟

使用した機材

・PSoC
・ジャンパー線×2
・通信用ケーブル
・スピーカー
・MiniProg

内容

スタジオジブリのメロディーを流す装置を作成した。

曲リストは
「さんぽ」「ポニョ」「君をのせて」「いつも何度でも」「もののけ姫」「人生のメリーゴーランド」

聞きたい曲の頭文字(順に s, p, k, i, m, j) をPC上で入力することにより
再生することができる。

ディスプレイには再生中の曲のタイトルが表示される。

隠しトラックとして「風になる」を作成した。
PC上で"hayao"と入力する事により再生される。

PSoCの配線&タイトル表示
DSC_0338.JPG

ブロック図
DSC_0340-1.jpg

ソースコード


#include <m8c.h>
#include "PSoCAPI.h"
#pragma interrupt_handler myISR
int PW = 125;
int SILENT = 0, MR = 273, D = 229, L = 204, M = 182, F = 172, FC = 162, S = 153, R = 136, C = 121, CF = 129, DD = 115, LL =102, MM = 91, FF = 85, SS = 75, RR = 68; // 音階の周波数を決める
int TC = 0;
int n = 0;

void myISR(void)
{
if(n == 1){

TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("sanpo"); // LCDに曲名を表示させる
}

if(TC == 1)
PWM16_1_WritePeriod(M); // TCに入っているカウントのときに音を鳴らす

else if(TC == 4)
PWM16_1_WritePeriod(S);

else if(TC == 6)
PWM16_1_WritePeriod(DD);

else if(TC == 10)
PWM16_1_WritePeriod(S);

else if(TC == 12)
PWM16_1_WritePeriod(R);

else if(TC == 14)
PWM16_1_WritePeriod(S);

else if(TC == 19)
PWM16_1_WritePeriod(D);

else if(TC == 20)
PWM16_1_WritePeriod(M);

else if(TC == 21)
PWM16_1_WritePeriod(S);

else if(TC == 22)
PWM16_1_WritePeriod(DD);

else if(TC ==24)
PWM16_1_WritePeriod(C);

else if(TC ==25)
PWM16_1_WritePeriod(R);

else if(TC == 26)
PWM16_1_WritePeriod(S);

else if(TC == 31)
PWM16_1_WritePeriod(SILENT);
}

else if(n == 2){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("gake no ue no ponyo");
}

if(TC == 1)
PWM16_1_WritePeriod(DD);

else if(TC == 5)
PWM16_1_WritePeriod(R);

else if(TC == 7)
PWM16_1_WritePeriod(F);

else if(TC == 11)
PWM16_1_WritePeriod(D);

else if(TC == 13)
PWM16_1_WritePeriod(D);

else if(TC == 15)
PWM16_1_WritePeriod(D);

else if(TC == 17)
PWM16_1_WritePeriod(L);

else if(TC == 19)
PWM16_1_WritePeriod(F);

else if(TC == 21)
PWM16_1_WritePeriod(CF);

else if(TC == 23)
PWM16_1_WritePeriod(LL);

else if(TC == 25)
PWM16_1_WritePeriod(DD);

else if(TC == 28)
PWM16_1_WritePeriod(SILENT);
}

else if(n == 3){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("kimi wo nosete");
}

if(TC == 1)
PWM16_1_WritePeriod(L);

else if(TC == 3)
PWM16_1_WritePeriod(M);

else if(TC == 5)
PWM16_1_WritePeriod(F);

else if(TC == 11)
PWM16_1_WritePeriod(M);

else if(TC == 13)
PWM16_1_WritePeriod(F);

else if(TC == 17)
PWM16_1_WritePeriod(R);

else if(TC == 21)
PWM16_1_WritePeriod(M);

else if(TC == 30)
PWM16_1_WritePeriod(SILENT);
}

if(n == 4){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("itumo nando demo");
}

if(TC == 1)
PWM16_1_WritePeriod(F);

else if(TC == 3)
PWM16_1_WritePeriod(S);

else if(TC == 5)
PWM16_1_WritePeriod(R);

else if(TC == 7)
PWM16_1_WritePeriod(F);

else if(TC == 9)
PWM16_1_WritePeriod(DD);

else if(TC == 15)
PWM16_1_WritePeriod(R);

else if(TC == 17)
PWM16_1_WritePeriod(S);

else if(TC == 21)
PWM16_1_WritePeriod(DD);

else if(TC == 25)
PWM16_1_WritePeriod(S);

else if(TC == 29)
PWM16_1_WritePeriod(F);

else if(TC == 31)
PWM16_1_WritePeriod(L);

else if(TC == 33)
PWM16_1_WritePeriod(R);

else if(TC == 39)
PWM16_1_WritePeriod(F);

else if(TC == 41)
PWM16_1_WritePeriod(M);

else if(TC == 49)
PWM16_1_WritePeriod(SILENT);
}
if(n == 5){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("mononoke hime");
}

if(TC == 1)
PWM16_1_WritePeriod(R);

else if(TC == 3)
PWM16_1_WritePeriod(DD);

else if(TC == 5)
PWM16_1_WritePeriod(LL);

else if(TC == 9)
PWM16_1_WritePeriod(FF);

else if(TC == 13)
PWM16_1_WritePeriod(MM);

else if(TC == 15)
PWM16_1_WritePeriod(R);

else if(TC == 19)
PWM16_1_WritePeriod(DD);

else if(TC == 21)
PWM16_1_WritePeriod(LL);

else if(TC == 29)
PWM16_1_WritePeriod(SILENT);
}

else if(n == 6){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("jinsei no merry-go-round");
}

if(TC == 1)
PWM16_1_WritePeriod(MR);

else if(TC == 3)
PWM16_1_WritePeriod(L);

else if(TC == 5)
PWM16_1_WritePeriod(F);

else if(TC == 7)
PWM16_1_WritePeriod(R);

else if(TC == 11)
PWM16_1_WritePeriod(R);

else if(TC == 13)
PWM16_1_WritePeriod(S);

else if(TC == 15)
PWM16_1_WritePeriod(F);

else if(TC == 17)
PWM16_1_WritePeriod(M);

else if(TC == 19)
PWM16_1_WritePeriod(F);

else if(TC == 25)
PWM16_1_WritePeriod(L);

else if(TC == 27)
PWM16_1_WritePeriod(F);

else if(TC == 29)
PWM16_1_WritePeriod(R);

else if(TC == 31)
PWM16_1_WritePeriod(LL);

else if(TC == 35)
PWM16_1_WritePeriod(LL);

else if(TC == 37)
PWM16_1_WritePeriod(LL);

else if(TC == 39)
PWM16_1_WritePeriod(MM);

else if(TC == 41)
PWM16_1_WritePeriod(DD);

else if(TC == 42)
PWM16_1_WritePeriod(CF);

else if(TC == 43)
PWM16_1_WritePeriod(DD);

else if(TC == 48)
PWM16_1_WritePeriod(SILENT);
}
else if(n == 7){
TC += 1;
PWM16_1_WritePulseWidth(PW);

if(TC == 1){
LCD_1_Start();
LCD_1_PrCString("kaze ni naru");
}

if(TC == 1)
PWM16_1_WritePeriod(D);

else if(TC == 2)
PWM16_1_WritePeriod(L);

else if(TC == 3)
PWM16_1_WritePeriod(F);

else if(TC == 4)
PWM16_1_WritePeriod(F);

else if(TC == 5)
PWM16_1_WritePeriod(S);

else if(TC == 6)
PWM16_1_WritePeriod(R);

else if(TC ==7)
PWM16_1_WritePeriod(SILENT);

else if(TC == 8)
PWM16_1_WritePeriod(LL);

else if(TC == 9)
PWM16_1_WritePeriod(DD);

else if(TC == 10)
PWM16_1_WritePeriod(SILENT);

else if(TC == 11)
PWM16_1_WritePeriod(R);

else if(TC == 12)
PWM16_1_WritePeriod(S);

else if(TC == 13)
PWM16_1_WritePeriod(S);

else if(TC == 14)
PWM16_1_WritePeriod(F);

else if(TC == 16)
PWM16_1_WritePeriod(SILENT);

else if(TC == 17)
PWM16_1_WritePeriod(F);

else if(TC == 18)
PWM16_1_WritePeriod(S);

else if(TC == 19)
PWM16_1_WritePeriod(F);

else if(TC == 20)
PWM16_1_WritePeriod(M);

else if(TC == 21)
PWM16_1_WritePeriod(F);

else if(TC == 22)
PWM16_1_WritePeriod(CF);

else if(TC == 23)
PWM16_1_WritePeriod(SILENT);

else if(TC == 24)
PWM16_1_WritePeriod(L);

else if(TC == 25)
PWM16_1_WritePeriod(F);

else if(TC == 26)
PWM16_1_WritePeriod(SILENT);

else if(TC == 27)
PWM16_1_WritePeriod(F);

else if(TC == 28)
PWM16_1_WritePeriod(R);

else if(TC == 29)
PWM16_1_WritePeriod(R);

else if(TC == 30)
PWM16_1_WritePeriod(S);

else if(TC == 32)
PWM16_1_WritePeriod(SILENT);

else if(TC == 33)
PWM16_1_WritePeriod(S);

else if(TC == 34)
PWM16_1_WritePeriod(R);

else if(TC == 35)
PWM16_1_WritePeriod(S);

else if(TC == 36)
PWM16_1_WritePeriod(FC);

else if(TC == 37)
PWM16_1_WritePeriod(S);

else if(TC == 38)
PWM16_1_WritePeriod(DD);

else if(TC == 39)
PWM16_1_WritePeriod(SILENT);

else if(TC == 40)
PWM16_1_WritePeriod(M);

else if(TC == 41)
PWM16_1_WritePeriod(S);

else if(TC == 43)
PWM16_1_WritePeriod(R);

else if(TC == 44)
PWM16_1_WritePeriod(S);

else if(TC == 45)
PWM16_1_WritePeriod(S);

else if(TC == 46)
PWM16_1_WritePeriod(F);

else if(TC == 48)
PWM16_1_WritePeriod(SILENT);

else if(TC == 49)
PWM16_1_WritePeriod(F);

else if(TC == 50)
PWM16_1_WritePeriod(S);

else if(TC == 51)
PWM16_1_WritePeriod(F);

else if(TC == 52)
PWM16_1_WritePeriod(M);

else if(TC == 53)
PWM16_1_WritePeriod(F);

else if(TC == 54)
PWM16_1_WritePeriod(CF);

else if(TC == 55)
PWM16_1_WritePeriod(SILENT);

else if(TC == 56)
PWM16_1_WritePeriod(L);

else if(TC == 57)
PWM16_1_WritePeriod(F);

else if(TC == 59)
PWM16_1_WritePeriod(L);

else if(TC == 61)
PWM16_1_WritePeriod(L);

else if(TC == 62)
PWM16_1_WritePeriod(D);

else if(TC == 64)
PWM16_1_WritePeriod(SILENT);

else if(TC == 65)
PWM16_1_WritePeriod(D);

else if(TC == 66)
PWM16_1_WritePeriod(L);

else if(TC == 67)
PWM16_1_WritePeriod(F);

else if(TC == 68)
PWM16_1_WritePeriod(F);

else if(TC == 69)
PWM16_1_WritePeriod(S);

else if(TC == 70)
PWM16_1_WritePeriod(R);

else if(TC == 71)
PWM16_1_WritePeriod(SILENT);

else if(TC == 72)
PWM16_1_WritePeriod(LL);

else if(TC == 73)
PWM16_1_WritePeriod(DD);

else if(TC == 74)
PWM16_1_WritePeriod(SILENT);

else if(TC == 75)
PWM16_1_WritePeriod(R);

else if(TC == 76)
PWM16_1_WritePeriod(S);

else if(TC == 77)
PWM16_1_WritePeriod(S);

else if(TC == 78)
PWM16_1_WritePeriod(F);

else if(TC == 80)
PWM16_1_WritePeriod(SILENT);

else if(TC == 81)
PWM16_1_WritePeriod(F);

else if(TC == 82)
PWM16_1_WritePeriod(S);

else if(TC == 83)
PWM16_1_WritePeriod(F);

else if(TC == 84)
PWM16_1_WritePeriod(M);

else if(TC == 85)
PWM16_1_WritePeriod(F);

else if(TC == 86)
PWM16_1_WritePeriod(CF);

else if(TC == 87)
PWM16_1_WritePeriod(SILENT);

else if(TC == 88)
PWM16_1_WritePeriod(L);

else if(TC == 89)
PWM16_1_WritePeriod(F);

else if(TC == 90)
PWM16_1_WritePeriod(SILENT);

else if(TC == 91)
PWM16_1_WritePeriod(F);

else if(TC == 92)
PWM16_1_WritePeriod(R);

else if(TC == 93)
PWM16_1_WritePeriod(R);

else if(TC == 94)
PWM16_1_WritePeriod(S);

else if(TC == 96)
PWM16_1_WritePeriod(SILENT);

else if(TC == 97)
PWM16_1_WritePeriod(S);

else if(TC == 98)
PWM16_1_WritePeriod(R);

else if(TC == 99)
PWM16_1_WritePeriod(S);

else if(TC == 100)
PWM16_1_WritePeriod(FC);

else if(TC == 101)
PWM16_1_WritePeriod(S);

else if(TC == 102)
PWM16_1_WritePeriod(DD);

else if(TC == 103)
PWM16_1_WritePeriod(SILENT);

else if(TC == 104)
PWM16_1_WritePeriod(M);

else if(TC == 105)
PWM16_1_WritePeriod(S);

else if(TC == 107)
PWM16_1_WritePeriod(R);

else if(TC == 108)
PWM16_1_WritePeriod(S);

else if(TC == 109)
PWM16_1_WritePeriod(S);

else if(TC == 110)
PWM16_1_WritePeriod(F);

else if(TC == 112)
PWM16_1_WritePeriod(SILENT);

else if(TC == 113)
PWM16_1_WritePeriod(F);

else if(TC == 114)
PWM16_1_WritePeriod(S);

else if(TC == 115)
PWM16_1_WritePeriod(F);

else if(TC == 116)
PWM16_1_WritePeriod(M);

else if(TC == 117)
PWM16_1_WritePeriod(F);

else if(TC == 118)
PWM16_1_WritePeriod(CF);

else if(TC == 120)
PWM16_1_WritePeriod(L);

else if(TC == 121)
PWM16_1_WritePeriod(F);

else if(TC == 123)
PWM16_1_WritePeriod(S);

else if(TC == 125)
PWM16_1_WritePeriod(S);

else if(TC == 126)
PWM16_1_WritePeriod(F);

else if(TC == 128)
PWM16_1_WritePeriod(SILENT);

else if(TC == 129)
PWM16_1_WritePeriod(R);

else if(TC == 130)
PWM16_1_WritePeriod(C);

else if(TC == 131)
PWM16_1_WritePeriod(R);

else if(TC == 132)
PWM16_1_WritePeriod(S);

else if(TC == 133)
PWM16_1_WritePeriod(R);

else if(TC == 134)
PWM16_1_WritePeriod(S);

else if(TC == 136)
PWM16_1_WritePeriod(R);

else if(TC == 137)
PWM16_1_WritePeriod(S);

else if(TC == 139)
PWM16_1_WritePeriod(R);

else if(TC == 141)
PWM16_1_WritePeriod(R);

else if(TC == 142)
PWM16_1_WritePeriod(C);

else if(TC == 144)
PWM16_1_WritePeriod(SILENT);

else if(TC == 145)
PWM16_1_WritePeriod(C);

else if(TC == 146)
PWM16_1_WritePeriod(D);

else if(TC == 147)
PWM16_1_WritePeriod(C);

else if(TC == 148)
PWM16_1_WritePeriod(D);

else if(TC == 149)
PWM16_1_WritePeriod(C);

else if(TC == 150)
PWM16_1_WritePeriod(R);

else if(TC == 152)
PWM16_1_WritePeriod(S);

else if(TC == 153)
PWM16_1_WritePeriod(F);

else if(TC == 155)
PWM16_1_WritePeriod(S);

else if(TC == 157)
PWM16_1_WritePeriod(S);

else if(TC == 158)
PWM16_1_WritePeriod(R);

else if(TC == 160)
PWM16_1_WritePeriod(SILENT);

else if(TC == 161)
PWM16_1_WritePeriod(R);

else if(TC == 162)
PWM16_1_WritePeriod(R);

else if(TC == 163)
PWM16_1_WritePeriod(S);

else if(TC == 164)
PWM16_1_WritePeriod(F);

else if(TC == 165)
PWM16_1_WritePeriod(R);

else if(TC == 166)
PWM16_1_WritePeriod(R);

else if(TC == 168)
PWM16_1_WritePeriod(S);

else if(TC == 169)
PWM16_1_WritePeriod(S);

else if(TC == 171)
PWM16_1_WritePeriod(FC);

else if(TC == 173)
PWM16_1_WritePeriod(F);

else if(TC == 174)
PWM16_1_WritePeriod(S);

else if(TC == 176)
PWM16_1_WritePeriod(SILENT);

else if(TC == 177)
PWM16_1_WritePeriod(S);

else if(TC == 178)
PWM16_1_WritePeriod(S);

else if(TC == 179)
PWM16_1_WritePeriod(R);

else if(TC == 180)
PWM16_1_WritePeriod(C);

else if(TC == 181)
PWM16_1_WritePeriod(S);

else if(TC == 182)
PWM16_1_WritePeriod(LL);

else if(TC == 184)
PWM16_1_WritePeriod(D);

else if(TC == 185)
PWM16_1_WritePeriod(D);

else if(TC == 187)
PWM16_1_WritePeriod(C);

else if(TC == 189)
PWM16_1_WritePeriod(C);

else if(TC == 190)
PWM16_1_WritePeriod(DD);

else if(TC == 192)
PWM16_1_WritePeriod(SILENT);

}
}
void main1(void)
{
  M8C_EnableGInt;
   PWM16_1_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();
   while(1)
   {};
}

void main(void)
{
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;
PWM16_1_Start();
UART_CPutString("\r\nPSoC Synthesizer V1.1\r\n");


while(1) // PC上で打ち込んだ対応コマンドによって曲を再生する
{
if(UART_bCmdCheck())
{
  if(strPtr = UART_szGetParam())
   {
       UART_CPutString("Found1 valid command\r\nCommand =>");
       UART_PutString(strPtr);
       UART_CPutString("<\r\nParamaters:\r\n");
       if(*strPtr=='s'){
           n=1;
           main1();
       }
       else if(*strPtr=='p'){
       n=2;
       main1();
       }
       else if(*strPtr=='k'){
       n=3;
       main1();
       }
       else if(*strPtr=='i'){
       n=4;
       main1();
       }
       else if(*strPtr=='m'){
       n=5;
       main1();
       }
       else if(*strPtr=='j'){
       n=6;
       main1();
       }
       else if(*strPtr=='hayao'){
       n=7;
       main1();
       }
   }
UART_CmdReset();
}
}
}

考察

今回のジブリ音楽再生機は第1週、第2週の演習で取り組んだ、
pwm_uart_2、timer_pwm2、hello_worldを参考にして作成した。

工夫した点として
再生したい曲を自分で選択できるようにした。
そして、同時にLCDに再生中のタイトルを表示させた。


改善点として
タイトルが長いとLCDに表示しきれなくなってしまうので、2行に分けて
ユーザーモジュールのTimerを使用し数秒毎に1行目と2行目を
交互に表示させる事が可能であったと考えられる。

  • 最終更新:2014-05-20 17:12:21

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

認証パスワード