チーム1832

課題名

君の名は。

研究者名

Oda Sotaro
Ikeda Shota
Kurose Ryo

概要

RADWIMPSの「前前前世」を演奏した。

使用した機材

PSoC 1
スピーカー 1

仕様

#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, MR=273, D=229, DC=217, L=204, LC=193, M=182, F=172, FC=162, S=153, SC=145, R=136, RC=129, C=121, DD=115, DDC=108, LL=102, LLC=96, MM=91, FF=86, FFC=81, SS=77, SSC=72, RR=68, RRC=64;

int TC=0; //Time Count

void myISR(void)

{

TC += 1; //TC = TC +1

PWM16_1_WritePulseWidth(PW);



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

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

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

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

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

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





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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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





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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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




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

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

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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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






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

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

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

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

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

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





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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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






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

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

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

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

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

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









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

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

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

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

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

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

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

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

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

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

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

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

else if(TC == 205)
PWM16_1_WritePeriod(MR);

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

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

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

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

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

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

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

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

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

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

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

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

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






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

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

else if(TC == 226)
PWM16_1_WritePeriod(MR);

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

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

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

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

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




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

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

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

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

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

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

else if(TC == 242)
PWM16_1_WritePeriod(MR);

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




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

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

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

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

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

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

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

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

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

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

else if(TC == 258)
PWM16_1_WritePeriod(MR);

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





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

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

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

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

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

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

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

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

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

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

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

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




else if(TC == 280)
TC=0;
}

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




;;*****************************************************************************
;;*****************************************************************************
;; FILENAME: PWM16_1INT.asm
;; Version: 2.5, Updated on 2012/3/2 at 9:15:9
;; Generated by PSoC Designer 5.2.2551
;;
;; DESCRIPTION: PWM16 Interrupt Service Routine
;;-----------------------------------------------------------------------------
;; Copyright (c) Cypress Semiconductor 2012. All Rights Reserved.
;;*****************************************************************************
;;*****************************************************************************

include "m8c.inc"
include "PWM16_1.inc"
include "memory.inc"


;-----------------------------------------------
; Global Symbols
;-----------------------------------------------
export _PWM16_1_ISR


AREA InterruptRAM (RAM,REL,CON)

;@PSoC_UserCode_INIT@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom declarations below this banner
;---------------------------------------------------

;------------------------
; Includes
;------------------------

  
;------------------------
; Constant Definitions
;------------------------


;------------------------
; Variable Allocation
;------------------------


;---------------------------------------------------
; Insert your custom declarations above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)


AREA UserModules (ROM, REL)

;-----------------------------------------------------------------------------
; FUNCTION NAME: _PWM16_1_ISR
;
; DESCRIPTION: Unless modified, this implements only a null handler stub.
;
;-----------------------------------------------------------------------------
;

_PWM16_1_ISR:

 ;@PSoC_UserCode_BODY@ (Do not change this line.)
  ;---------------------------------------------------
  ; Insert your custom assembly code below this banner
  ;---------------------------------------------------
  ;   NOTE: interrupt service routines must preserve
  ;   the values of the A and X CPU registers.
  
  ;---------------------------------------------------
  ; Insert your custom assembly code above this banner
  ;---------------------------------------------------
  
  ljmp _myISR
  
  ;---------------------------------------------------
  ; Insert a lcall to a C function below this banner
  ; and un-comment the lines between these banners
  ;---------------------------------------------------
  
  ;PRESERVE_CPU_CONTEXT
  ;lcall _My_C_Function
  ;RESTORE_CPU_CONTEXT
  
  ;---------------------------------------------------
  ; Insert a lcall to a C function above this banner
  ; and un-comment the lines between these banners
  ;---------------------------------------------------
  ;@PSoC_UserCode_END@ (Do not change this line.)

 reti


; end of file PWM16_1INT.asm

;;*****************************************************************************
;;*****************************************************************************
;; FILENAME: Timer16_1INT.asm
;; Version: 2.6, Updated on 2012/3/2 at 9:15:25
;; Generated by PSoC Designer 5.2.2551
;;
;; DESCRIPTION: Timer16 Interrupt Service Routine
;;-----------------------------------------------------------------------------
;; Copyright (c) Cypress Semiconductor 2012. All Rights Reserved.
;;*****************************************************************************
;;*****************************************************************************

include "m8c.inc"
include "memory.inc"
include "Timer16_1.inc"


;-----------------------------------------------
; Global Symbols
;-----------------------------------------------
export _Timer16_1_ISR


AREA InterruptRAM (RAM,REL,CON)

;@PSoC_UserCode_INIT@ (Do not change this line.)
;---------------------------------------------------
; Insert your custom declarations below this banner
;---------------------------------------------------

;------------------------
; Includes
;------------------------

  
;------------------------
; Constant Definitions
;------------------------


;------------------------
; Variable Allocation
;------------------------


;---------------------------------------------------
; Insert your custom declarations above this banner
;---------------------------------------------------
;@PSoC_UserCode_END@ (Do not change this line.)


AREA UserModules (ROM, REL)

;-----------------------------------------------------------------------------
; FUNCTION NAME: _Timer16_1_ISR
;
; DESCRIPTION: Unless modified, this implements only a null handler stub.
;
;-----------------------------------------------------------------------------
;

_Timer16_1_ISR:

 ;@PSoC_UserCode_BODY@ (Do not change this line.)
  ;---------------------------------------------------
  ; Insert your custom assembly code below this banner
  ;---------------------------------------------------
  ;   NOTE: interrupt service routines must preserve
  ;   the values of the A and X CPU registers.
  
  ;---------------------------------------------------
  ; Insert your custom assembly code above this banner
  ;---------------------------------------------------
  
  ljmp _myISR
  
  ;---------------------------------------------------
  ; Insert a lcall to a C function below this banner
  ; and un-comment the lines between these banners
  ;---------------------------------------------------
  
  ;PRESERVE_CPU_CONTEXT
  ;lcall _My_C_Function
  ;RESTORE_CPU_CONTEXT
  
  ;---------------------------------------------------
  ; Insert a lcall to a C function above this banner
  ; and un-comment the lines between these banners
  ;---------------------------------------------------
  ;@PSoC_UserCode_END@ (Do not change this line.)

 reti


; end of file Timer16_1INT.asm


考察

チーム1533の内容を参考にした。
オルゴールは繰り返し鳴り続けるため、一曲が終わって少ししてから、TCに0を代入し、繰り返すようにしている。
原曲に近づけるためにperiodの値を変更し、割り込みの間隔を短くした。

  • 最終更新:2018-07-17 10:22:48

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

認証パスワード