人ã ã¯é³æ¥œã倧奜ãã§ããå€ãã®äººã楜åšã®æŒå¥æ¹æ³ãç¥ã£ãŠããŸãããããŠãå³èã§é³æ¥œãäœæ²ããããšãã人ãããŸããé»å楜åšãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããŠãããåµé çãªå¯èœæ§ãåŒãåºãããšãã§ããŸããããã¯ç°¡åãªããšã®ããã§ãããå®äŸ¡ãªäžåœã®USB-MIDIã¢ããã¿ãŒã®ã»ãšãã©ã¯å¹³å¡ã§ããç§ãMIDI2USBã¢ããã¿ãŒãã©ã®ããã«äœæããããæ°ã«ãã人ã¯ããã²èªãã§ãã ããã
åé¡ã®å®åŒå
æ°å¹Žåãé³æ¥œãå匷ããŠããç¥ãå³èã§äœæ²ãå§ããŸããã圌ã®äœåã倱ãããªãããã«ãããã£ãã®ã§ããã圌ã®é³æ¥œç 究ããã£ã¯ã¿ãã©ã³ã ãã§é²é³ããããšãã§ããŸããããã®é²é³ã®å質ã¯äžååã§ãããCubaseãŸãã¯MuseScoreã«çŽæ¥ã¡ã¢ãèšé²ããŠãããç·šéãããã£ãã®ã§ãããã®ããã«ãç§ã¯äžåœã®USB-MIDIã¢ããã¿ãŒïŒã³ã³ããŒã¿ãŒïŒãè³Œå ¥ããããšã«ããŸããã
äž»é¡ã®éžè©±
:
â , !
â , ?
â !
â , !
â , ?
â !
ãã®ã¢ããã¿ã±ãŒãã«ã¯å®äŸ¡ã§ãããŸãæ©èœããŸãããã·ã³ã»ãµã€ã¶ãŒïŒé»åãã¢ãïŒããã³ã³ãã¥ãŒã¿ãŒãžã®ããŒã¿è»¢éãã§ããŸããã1æ¬ã®æã§æŒå¥ãããšè€æ°ã®é³ç¬Šãé²é³ã§ããã³ãŒãããšã£ããé³éãæŒå¥ããããããšã¢ããã¿ãŒãã¶ãäžãã£ãŠã¬ã³ã¬ã«ãªããŸããå¥ã®æ¹åãããªãã¡ ã³ã³ãã¥ãŒã¿ãŒããã·ã³ã»ãµã€ã¶ãŒãžã®ããŒã¿ã®è»¢éã¯ããŸãæ©èœããŸããåæ§ã®è©±ã¯ãå€ãã®ãã€ã€ãŒã®ã¬ãã¥ãŒã§èŠã€ããããšãã§ããŸãã
äžåœã®ã¢ããã¿ãŒãå®æãããæ¹æ³
äžåœã®ã¢ããã¿ãŒãæ¹åãŸãã¯å€æŽããæ¹æ³ ã«ã€ããŠã¯ãã€ã³ã¿ãŒãããäžã§å€ãã®è°è«ããããŸãããã®ã¢ããã¿ãŒã®äžéšã®ããŒãžã§ã³ã§ã¯ããªããã«ãã©ãŒãæäŸãããŠããŸãããã¯ãã ä»ããããŠããªããããã³ã³ãã¥ãŒã¿ãŒãšã·ã³ã»ãµã€ã¶ãŒã®éã«é»æ°ç絶çžãæäŸãããŸããæ®å¿µãªãããç§ã®å Žåãæ¹èšã¯å°é£ã§ããããªããã«ãã©ãŒã®ä»£ããã«ã2ã€ã®NPNãã©ã³ãžã¹ã¿ãŒãåãä»ããããŠããŸããMIDIèŠæ Œã§ã¯ãPC900Vã6N138ãªã©ã®ãªããã¢ã€ãœã¬ãŒã¿ã®äœ¿çšãçŽæ¥æå®ãããŠããããšã«æ³šæããŠãã ããããªããã«ãã©ãŒH11L1MïŒDIP-8ïŒãŸãã¯H11L1SMïŒSO-6ïŒã¯åæ§ã®ç¹æ§ãæã£ãŠããŸããé©åãªãã©ã¡ãŒã¿ãæã€ä»ã®ã³ã³ããŒãã³ãã䜿çšã§ããŸãã
å³2ã解äœäžã®äžåœã®ã¢ããã¿ãŒãèè ã«ããåçã
åçã¯ããªããã¢ã€ãœã¬ãŒã¿ãŒãšé¢é£èŠçŽ ãå容ããã®ã«ååãªã¹ããŒã¹ãã±ãŒã¹ã«ããããšã瀺ããŠããŸããäžéšã®è·äººã¯ãæ¢åã®ã³ã³ããŒãã³ããã¯ãã ä»ããã代ããã«ãããã£ãããããåãããªããã¢ã€ãœã¬ãŒã¿ãŒãåãä»ããŸããæããã«ããã®æäœã«ã¯ç¥èã ãã§ãªããåªããæã®éåèœåãå¿ èŠã§ãã
ãããã楜åšãšã³ã³ãã¥ãŒã¿ãŒã®éã«å åŠç絶çžãæäŸããã ãã§ã¯ååã§ã¯ãããŸãããã·ãªã¢ã«UARTãMIDIèŠæ Œã«åŸã£ãŠã¯ããã¯ãããããã«ããã«ã¯ã粟å¯ãªæ°Žæ¶æ¯ååãŸãã¯å ±æ¯åšãå¿ èŠã§ããç§ãè³Œå ¥ããäžåœã®ã¢ããã¿ãŒã«ã¯ããªããã«ãã©ãŒã ãã§ãªããç³è±å ±æ¯åšããããŸããããã¡ãããå·¥å Žã§ã¯ãããã³ã°ãŠããããæ ¡æ£ãããã€ã¯ããµãŒãããããããŸããããã®ãããªãã®ã¯ãããŸãããäžè¬çã«ããã®äžåœè£œåã®æ§èœã¯äœãã§ãã CH345ãããäžã«æ§ç¯ãããã¢ããã¿ãŒããããŸã-SSOP-20ããã±ãŒãžã®USBããMIDIãžã®ã³ã³ããŒã¿ãŒã§ãããããã¯ç§ã®å Žåã§ã¯ãããŸããã CH345ãã€ã¯ããããã«ã¯ããŒããŠã§ã¢USBã¿ã°ããããŸããã³ããŒIDïŒ1a86ã補åIDïŒ752dããã ãããå·ŠåŽãã®ãã€ã¯ãåè·¯ã¯ãåãèå¥åãäžããããšãã§ãïŒå®éã«ïŒãäœãã«ãªãããŸãããšããã§ããŸãã
ç§ãäžåœã®ã¢ããã¿ãŒã§èŠã€ããæåŸã®å°ããªæ¬ é¥ã¯ãœãããŠã§ã¢ïŒãã¡ãŒã ãŠã§ã¢ïŒã§ããããæ£ç¢ºã«ã¯ãããã¯ãšã³ããã€ã³ãïŒEndPointsïŒã®å°ããªãããã¡ãŒãµã€ãºã§ãããããã8ãã€ãã§ãã USBã€ã³ã¿ãŒãã§ãŒã¹ãä»ããMIDIã¡ãã»ãŒãžã¯4ãã€ãïŒã±ãŒãã«çªå·ãã³ãã³ãçªå·ã2ããŒã¿ãã€ãïŒã§æ§æãããŠãããããããã§ãã¬ã¹ããŒããéä¿¡ã§ããŸãããã ããSysExãªã©ã®æ¡åŒµæ©èœã¯ãã£ãšå€§ããããããšãã§ããŸãã
ãã°ããããŠããProfessional USBMIDIInterfaceããšããå¥ã®ã¢ããã¿ãŒã±ãŒãã«ãè³Œå ¥ããŸããããã®ã¢ããã¿ãŒã¯éåžžã«é«äŸ¡ã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸããããããã§ããšã©ãŒãçºçããŸãããããã¯ãã·ã³ã»ãµã€ã¶ãŒãæ°åéæŒå¥ããåŸãçªç¶ããŒã¹ãããŒã¯ãèŠéãå§ããããŸãã¯ãã®éã§ãããŒã®ãªãªãŒã¹ãèªèããªãã£ããšããäºå®ã«çŸããŸãããç§ã¯äžåœã®ã¢ããã¿ãŒã®çµæã«å€±æãããäœããããŸãããããã®ãªããèªåã§ãããªããããšããã¢ããã€ã¹ã«åŸãããšã«ããŸããã
ããŒããŠã§ã¢éšå
ãŸããå°æ¥ã®ããã€ã¹ã®ã¹ããŒã ãèããä»ã®ãšã³ãžãã¢ã®çµéšãç 究ããå¿ èŠããããŸãããæ¢åã®ã¢ããã¿ãŒã¯å€èŠããšãŠãè¯ãã£ãã®ã§ãã±ãŒã¹ãLEDãã·ãŒã«ãã±ãŒãã«ã䜿çšããããšã«ããŸãããããã«ãã¢ã¹ã¯ã¯ã§ã¯ãMIDIã±ãŒãã«ã¯æ¢è£œã®äžåœè£œã¢ããã¿ãŒãããé«äŸ¡ã§ããç§ã¯äžåœã®ããŒããåŒãåºãããã®å¯žæ³ã枬å®ãããããªãã¯ãã¡ã€ã³ã§MIDIæšæºãšæåããMIDIãããžã§ã¯ãã®ç 究ãå§ããŸããã
å³3ã±ãŒã¹å ããã³ã±ãŒãã«ä»ãUSB-MIDIã¢ããã¿ãŒã
ãã®èšäºãæžããŠããæç¹ã§ãç§ã¯ããã€ãã®èå³æ·±ããããžã§ã¯ããç¥ã£ãŠããŸãã
- Nanjing QinhengMicroelectronicsã®CH345ãããã®ããã¥ã¡ã³ãããã®å³ã
- USBãããã³ã«ã®ãœãããŠã§ã¢å®è£ ãåããAtmegaãã€ã¯ãã·ã¹ãã ã«é¢ããå€ããããžã§ã¯ãããããã¯äœéã¢ãŒãã䜿çšããŸãããããã¯éæšå¥šã§ãããWindows7ã§ã¯ãµããŒããããŠããŸããã
- USBã€ã³ã¿ãŒãã§ã€ã¹ïŒAtmega32u4ãCortex-MïŒãããã³Mapleãªã©ã®ããŒããŠã§ã¢ãµããŒããåããArduinoããŒãçšã®MIDIUSBã©ã€ãã©ãªã
ãã¹ãŠã®ãããžã§ã¯ãã®é»æ°åè·¯å³ã«ã¯ãMIDIèŠæ Œã®æšå¥šäºé ã«åºã¥ããå€ãã®ãµã³ãã«ãã©ã°ã¡ã³ããå«ãŸããŠããŸãããããã£ãŠãUSBãã«ã¹ããŒãã¢ãŒãããµããŒããããã€ã¯ãã³ã³ãã¥ãŒã¿ãŒãéžæããPC900Vãªããã«ãã©ãŒãšDIN-5ïŒMIDIïŒãœã±ããã販売ããããšã«ããŸããã
ããŒãã¬ã€ã¢ãŠã
ç§ã®MIDI2USBã¢ããã¿ãŒã®å¿èéšã¯ãSiliconLaboratoriesã®8ãããEFM8UB20F64Gãã€ã¯ãã³ã³ãã¥ãŒã¿ãŒã§ããç§ã¯ãããæ¬åœã«å¥œãã§ãã§ããéãããã䜿ããŸãããã®ã³ã³ãããŒã©ãŒã¯ãäŒèª¬çãªC8051F320ã«åã£ãŠä»£ãã£ãC8051F380ã³ã³ãããŒã©ãŒã®åŸç¶ïŒãã©ã³ãå€æŽåŸïŒã§ããããã¯ã2003幎ã«SiLabsã«ãã£ãŠè³Œå ¥ãããCygnalã®éçºã«æåããŸããã
EFM8UB20F64ãã€ã¯ãã·ã¹ãã ãæ¯æããç§ã®è°è«ããªã¹ãããŸãïŒ
- é«éã§äœ¿ããããGPIOãSPIãUARTãUSBãPCAã®ååšäžã§è¡šçŸããããœãããŠã§ã¢éçºã®å®¹æãã
- æ¹åããã8051ã³ã¢ïŒåœä»€ããã1ã2ãµã€ã¯ã«ã48MIPSïŒãããªã³ã¶ãã©ã€ãã§ã®åšæ³¢æ°å€æŽã
- å èµã®é»å§ã¬ã®ã¥ã¬ãŒã¿ãŒã+ 5VãŸã§ã®åºå蚱容誀差ãæ倧100mAã®é»æµã
- USBãã¹ãããã®ãã£ãªãã¬ãŒã·ã§ã³ãåããå èµã®æ£ç¢ºãªã¯ããã¯ãžã§ãã¬ãŒã¿ãŒïŒÂ±0.25ïŒ ïŒ;
- USBXpressãVCPXpressãUSBããã€ã¹APIã©ã€ãã©ãªã®å¯çšæ§ãšã¯ã€ãã¯ã¹ã¿ãŒãã®äŸã
- çŽç²ãªãšã©ã¿ã
ãã®ã³ã³ãããŒã©ãŒã次ã®ããã«ããã°ã©ã ããããšã¯åã°ããããšã§ããã¬ãžã¹ã¿ãŒã¯å°ãªããé©çšãããåé¡ã®è§£æ±ºã«éäžã§ããŸããæ®å¿µãªãããç®è¡æŒç®ïŒç¹ã«32ãããæŒç®ïŒã¯äœéã§ããããã以å€ã®å Žåã¯EFM8ãé©ããŠããŸããUSBããã€ã¹çšã®ãœãããŠã§ã¢ã®éçºã¯ç°¡åãªäœæ¥ã§ã¯ãããŸããããããŠãããã§SiLabsã³ã³ãããŒã©ãŒã®äž»ãªå©ç¹ã¯ãUSBXpressãVCPXpressãUSBããã€ã¹APIã©ã€ãã©ãªã§ããTexas Instrumentsã§ãããSmartRFããŒãã§C8051F320ã³ã³ãããŒã©ãŒã䜿çšããŠããŸãã
ãªããã«ãã©ãŒã¯ãã¢ããã¿ãŒã§2çªç®ã«éèŠãªã³ã³ããŒãã³ãã§ãã Sharp PC900Vã¯ãæšå¥šãããMIDIä»æ§å³ã«ç€ºãããŠãããšããã§ãããããæ¡çšããããšã«ããŸããããã®ãªããã«ãã©ãŒã®ç¹æ§ã¯ãé«éã®ãªã³ãšãªãã®æéïŒ1ÎŒsãš2ÎŒsïŒãããã³ããžã¿ã«åºåã®ååšã§ããããããæ¬ ç¹ããããŸãããã€ã¯ãåè·¯ã®ãµã€ãºã倧ããïŒ7x10mmïŒã5幎éã®åäœåŸã«50ïŒ ããŒã³ã¢ãŠãããŸãããªããã«ãã©ãŒã®å¯žæ³ã§ã¯ãããŒãã®çåŽã«ãã¹ãŠã®ã³ã³ããŒãã³ããããŒã¯ããããšã¯ã§ããŸããã§ããããŸããå€ãã®ã¹ããŒã¹ãå ããŠããMIDIã³ãã¯ã¿ããããããããããŸããã§ããã
å³4PC900Vãªããã«ãã©ãŒãšLEDãåããããŒãã®èé¢ãèè ã«ããåçã
åºå段ã¯ã2ã€ã®ã€ã³ããŒã¿ãŒã§æ§æããã74LVC2G04ããžãã¯ãã€ã¯ãåè·¯ã§ãèŠæ Œãæšå¥šããã¹ããŒã ã«åŸã£ãŠçµã¿ç«ãŠãããŸãããã®ã³ã³ããŒãã³ãã®äž»ãªç®çã¯ãããžãã¯ä¿¡å·ã¬ãã«ã3V => 5Vããå€æããå°ãªããšã10mAã®åºåé»æµãæäŸããããšã§ãã
å¥ã®éžè©±
:
- , , , , , âŠ
. :
â - ?
â , !
- , , , , , âŠ
. :
â - ?
â , !
æ®ãã®ã³ã³ããŒãã³ãã¯è£å©æ©èœãå®è¡ããããã€ã¹ã®åäœã«å€§ããªåœ±é¿ãäžããŸãããæµæåšãã³ã³ãã³ãµãŒããã€ãªãŒããLEDã¯åççã«äº€æã§ããŸããäžåœäººã®ããã«ãããUSBã³ãã¯ã¿ã®ä»£ããã«ããã€ã¯ãUSBãé 眮ããããã±ãŒãã«ãã¯ãã ä»ãããããã®ãã³ã³ãã¯ã¿ãäœæã§ããŸããMIDIã³ãã¯ã¿ã¯å€ãã®ã¹ããŒã¹ãå æããã±ãŒã¹ã«åãŸããªããããã±ãŒã¹ã®ãªãã¢ããã¿ããŒãžã§ã³ã§ã®ã¿äœ¿çšãããŸããMIDI-INããã³MIDI-OUTä¿¡å·ã¯ãã±ãŒãã«é ç·çšã®ãã³ããããŒã«ã«ãŒãã£ã³ã°ãããŸããäžè¬ã«ãLEDãšã³ãã¯ã¿ã®äœçœ®ã¯ãã±ãŒã¹å ã§æé©ã«é 眮ãããããã«èª¿æŽããå¿ èŠããããŸãã
å³5MIDI2USBã¢ããã¿ãŒã®ãããã°ããŒãžã§ã³ãšããã¯ã¹ããŒãžã§ã³ãèè ã«ããåçã
ç·æ¶è²»é»æµã¯50mAãè¶ ããŸãããããã¯ã次ã®éšåã§æ§æãããŠããŸãã
- ãã€ã¯ãæ³¢ã15mA;
- 3ã€ã®LEDã15mAïŒ3x5mAïŒ;
- ãã€ã¯ããµãŒããã74LVC2G04ã10 mA;
- ãªããã«ãã©ãŒPC900Vã10mAã
2å±€PCBã¯ãOSH Parkã®ã¢ã¡ãªã«äººã«ãã£ãŠãåã1.6mmãé 0.035mmãFR-4çŽ æã§äœãããŸããã
ãœãããŠã§ã¢éšå
æ©åšçšã®ãœãããŠã§ã¢ã®äœæã¯ãéçºã®éèŠãã€éèŠãªæ®µéã§ãã幞ããæè¿ã®ãã¹ãŠã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ã¯ãUSBMIDIããã€ã¹çšã®ãã©ã€ããŒããããŸããã¿ã¹ã¯ã軜æžãããã¢ããã¿ãŒã®ãã¡ãŒã ãŠã§ã¢ãäœæããã ãã§æžã¿ãŸãã
ç§ã¯éåžžãKeil uVisionPK51ãConfigurationWizard 2ãå Žåã«ãã£ãŠã¯IAR Embedded Workbenchãšçµã¿åãããŠäœ¿çšââããŸãããSiLabs SimplicityStudioã䜿çšããããšã¯ãã£ãã«ãããŸãããããããã®ç°å¢ã«ã¯é·æãšçæããããŸãããã®ãããžã§ã¯ãã§ã¯ããã¯ã©ã¹ä»ãã®Cãã欲ããã£ãã®ã§ãIARã䜿çšããããšã«ããŸãããããã«ãIARã³ã³ãã€ã©ã¯ãã·ã¹ãã ã¬ãžã¹ã¿ã®ãã¹ãŠã®ããããžã®ã¢ã¯ã»ã¹ãæäŸããŸããããšãã°ãP2_bit.B0 = 1;ãŸãã¯PCA0MD_bit.WDTE = 0;
CMSISãŸãã¯ãSI_EFM8UB2_Register_Enums.hãã§ãã£ã±ãã®ãããžãã¯å®æ°ããŸãã¯ãã«ãã¬ãã«ãããåŒã䜿çšããå¿ èŠã¯ãããŸãããæ®å¿µãªããããã®ãã¹ãŠã®æ©èœã¯ioEFM8UB20F64G.hãã¡ã€ã«ã§å®£èšãããŠãããsi_toolchain.hã©ã€ãã©ãªïŒããšãã°ããã¯ãB0..B3ïŒãšäºææ§ããªãããšãå€æããŸããããããžã§ã¯ããKeiluVision PK51ã«å€æããããã¹ãŠã®éçºç°å¢ã§äºææ§ã®ããCã³ãŒããèšè¿°ããã ãã§ãã
ãããžã§ã¯ãã³ãŒãã¯ããã€ãã®æ©èœéšåã«åãããŠããŸã
- ãã¡ã€ã«ãmain.cãã«ã¯ããšã³ããªãã€ã³ããã°ããŒãã«å€æ°ã®å®£èšãããªãã§ã©ã«ãåæåããããã®åŒã³åºããããã³ã¡ã€ã³ããã°ã©ã ã«ãŒããå«ãŸããŠããŸãã
- ãã¡ã€ã«ãinit.cãã«ã¯ãã¯ãããã³ã°ãããŒããUARTãããã³ãã®å²ã蟌ã¿ã®èšå®ãå«ãŸããŠããŸãã
- Descriptors.cãã¡ã€ã«ã«ã¯ãAudioClassããã€ã¹ã®USBèšè¿°åãå«ãŸããŠããŸãã
- ãã¡ã€ã«ãmidi.cãã«ã¯ãMIDIã¡ãã»ãŒãžãUSBã€ãã³ãã«ããŸãã¯ãã®éã«å€æããããã®2ã€ã®é¢æ°ãå«ãŸããŠããŸããã¹ããŒããã·ã³ã䜿çšãããŸãã
- ãã¡ã€ã«ãusbconfig.hãã«ã¯ãUSBããã€ã¹APIã©ã€ãã©ãªã®åäœã¢ãŒããæ§æããããã®ãã¯ããšå®çŸ©ïŒ#defineïŒãå«ãŸããŠããŸãã
ããŒããããªãã§ã©ã«ãããã³ã¡ã€ã³ã«ãŒããåããmainïŒïŒé¢æ°ãèŠãŠã¿ãŸãããã
int main( void )
{
WDT_Init(); // Disable WDTimer (not used)
PORT_Init(); // Initialize ports (UART, LEDs)
SYSCLK_Init(); // Set system clock to 48MHz
UART0_Init(); // Initialize UART0 @31250, 8-N-1
USBD_Init( &usbInitStruct ); // Initialize USB, clock calibrate
LED_IN = 1; // Blink LED
LED_OUT = 1; // Blink LED
IE_EA = 1; // Global enable IRQ
while(1)
{
//--- MIDI => USB
if( nMidiCount > 0 )
{
IE_EA = 0; // Begin: Critical section
if( USB_STATUS_OK==USBD_Write(EP1IN,aMidiBuffer,nMidiCount,false) )
{
nMidiCount = 0; // Reset MIDI data byte counter
}
IE_EA = 1; // End of: Critical section
LED_IN = 0; // Turn off input LED
}
//--- USB => MIDI
if( nUsbCount )
{
uint8_t i;
LED_OUT = 1; // Turn on Led on New packet
for(i = 0; i < nUsbCount; i++) // Process every data byte
{
USB2MIDI( aUsbBuffer[i] ); // Convert USB packet into MIDI
}
nUsbCount = 0; // Reset counter
USBD_Read(EP2OUT, aUsbBuffer, sizeof(aUsbBuffer), true);
LED_OUT = 0; // Turn off Led, when done
}
}
}
USBããã€ã¹çšã®SiLabsã®ã©ã€ãã©ãªã¯ããusbconfig.hããã¡ã€ã«ã®èšå®ã«å¿ããŠã³ã³ãã€ã«ããããããžã§ã¯ãã«å«ãŸããäžé£ã®ãµãã«ãŒãã³ã§æ§æãããŠããŸããããã¯ãAtmelïŒçŸåšã®MicrochipïŒã®ãã€ã¯ãããã»ããµã®ã³ãŒãã«ãããlibusbãV-USBãã©ã€ãã©ãªãšéåžžã«ãã䌌ãŠããŸããSiLabsã¯ãããã°ã©ããŒã®èŠ³ç¹ããã¯ãåªãã䟿å©ãªã©ã€ãã©ãªã§ããããšãå€æããŠããããšã«æ³šæããŠãã ããã
ããã€ã¹ãæ§æãããã³ã€ã³ã¿ãŒãã§ã€ã¹ã®èšè¿°åïŒèšè¿°åïŒã¯ãUSBããã€ã¹ã®æäœã«ãããŠéèŠãªåœ¹å²ãæãããŸãããããã®èšè¿°åã䜿çšããŠãããã€ã¹ã¯ãã¹ãïŒã³ã³ãã¥ãŒã¿ãŒïŒã«ãã®èŠä»¶ãæ©èœããã©ã¡ãŒã¿ãŒãªã©ãéç¥ããŸããèšè¿°åèŠæ±ãåŠçããããã®é¢æ°ã¯éåžžããã¹ãŠã®USBã©ã€ãã©ãªã«ãããããã°ã©ãã¯ãããã®èšè¿°åãå«ãããŒã¿æ§é ãæ£ããå ¥åããã ãã§æžã¿ãŸãã
èšè¿°åãå«ãã³ãŒã
SI_SEGMENT_VARIABLE
(usbDeviceDesc[], const USB_DeviceDescriptor_TypeDef, SI_SEG_CODE) =
{
USB_DEVICE_DESCSIZE, // bLength, 18 bytes
USB_DEVICE_DESCRIPTOR, // bDescriptorType, 1
htole16(0x0110), // bcdUSB Ver, 1.10
0x00, // bDeviceClass, 0 for Audio
0x00, // bDeviceSubClass, 0 for Audio
0x00, // bDeviceProtocol, 0 for Audio
SLAB_USB_EP1IN_MAX_PACKET_SIZE, // bMaxPacketSize0, 64 bytes
htole16(0x1209), // idVendor, Free GPL (SiLabs 0x10C4)
htole16(0x7522), // idProduct
htole16(0x0100), // bcdDevice, 1.00
0x01, // iManufacturer string
0x02, // iProduct string
0x03, // iSerialNumber (no serial string)
0x01 // bNumConfigurations
};
ãã¹ãŠã®èšè¿°åãããããžãããã³çšèªã¯ããMIDIããã€ã¹çšã®ãŠãããŒãµã«ã·ãªã¢ã«ãã¹ããã€ã¹ã¯ã©ã¹å®çŸ©ãæšæºã§è©³çŽ°ã«èª¬æãããŠããŸãããŸãããããã¯ããã°ããéå§ããŠç解ããã«ã¯ãWindows Driver Kit7600ãŸãã¯ã USBDescriptorDumperãã®ãusbview.exeãããã°ã©ã ã«ãã£ãŠæäŸãããæ å ±ã調ã¹ãã ãã§ååã§ããããã°ã©ã ã«ã³ããŒããããšãã§ããŸãã
å³6ããã°ã©ã ãusbview.exeãã®èšè¿°åã«é¢ããæ å ±èšè¿°å
ãšå¯Ÿå¿ããé åããã³æ§é ã¯ããããã®ããŒã¿ãå€æŽãããªãïŒå®æ°ïŒããããã€ã¯ãããã»ããµã®ãã©ãã·ã¥ã¡ã¢ãªïŒã³ãŒãã»ã°ã¡ã³ãïŒã«ãããŸãããã©ãã·ã¥ã¡ã¢ãªã«å®æ°ãä¿åããããšã¯ãRAMãç¯çŽã§ããå žåçãªããã°ã©ãã³ã°ããªãã¯ã§ãã
ããã€ã¹èšè¿°åæ§é ã®Vendor_IDãã£ãŒã«ããšProduct_IDãã£ãŒã«ãã«æ³šæããŠãã ãããããã¯ãUSBããã€ã¹ãäžæã«èå¥ããããã®çªå·ã®ãã¢ã§ããããã€ã¹ã®ãã®ãããªçªå·ãååŸããã«ã¯ãUSB-IFçµç¹ã«ãéãæ¯æãããæ¢åã®Vendor_IDã®ææè ïŒãã€ã¯ãã³ã³ãããŒã©ãŒã®è£œé å ïŒã«ãªã¯ãšã¹ããéä¿¡ããŠProduct_IDãååŸããå¿ èŠããããŸãããŸããããšãã°ãäžåœäººã®ããã«ãä»ã®äººã«æãé©ããVIDãšPIDã䜿çšããããšãã§ããŸãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®å Žåãç¡æã®Product_IDãååŸãããªãã·ã§ã³ããããŸãã
MIDIã¹ããªãŒãã³ã°ãªãŒãã£ãªã¯ã©ã¹ã®USBããã€ã¹ãéçºããéã«æ³šæãã¹ããã1ã€ã®ãã€ã³ãã¯ãã³ãã¯ã¿ïŒãžã£ãã¯ïŒã§ããã³ãã¯ã¿ã¯ãããã€ã¹ãšãã¹ãéã®ããããžãšæ¥ç¶ãèšè¿°ããããã®æ¶ç©ºã®ïŒä»®æ³ïŒãšã³ãã£ãã£ã§ãããããã¯ãå ¥åïŒå ¥åãžã£ãã¯ïŒãšåºåïŒåºåãžã£ãã¯ïŒãå éšïŒåã蟌ã¿ïŒãããã³å€éšïŒå€éšïŒã§ããåã³ãã¯ã¿ã«ã¯ãäžæã®Jack_IdïŒ0ã15ã®çªå·ïŒããããŸããåºåã³ãã¯ã¿ã«ã¯ããœãŒã¹IDçªå·ãå«ãŸããŠããŸããæ¥ç¶çšã®ã³ãã¯ã¿çªå·ãæåŸã«ããªãŒãã£ãªãšã³ããã€ã³ãïŒEPïŒã¯ã圢æããããã£ãã«ïŒå ¥åã¹ããªãŒã ãšåºåã¹ããªãŒã ïŒã®äžã§æ©èœããŸãããããã¯ãèšè¿°åã«ã³ãã¯ã¿ãã€ã³ãã£ã³ã°æ å ±ãããã»ãšãã©éåžžã®ãã«ã¯EPã§ãã
å³ïŒ7ãžã£ãã¯ãšUSBãžã®ä»®æ³ã¹ããªãŒã ïŒMIDIã¯ã©ã¹ïŒã
MIDIãžã£ãã¯èšè¿°å
// EMB: IN Jack #1 <-----> EXT: OUT Jack #4
// EMB: OUT Jack #3 <-----> EXT: IN Jack #2
//--- Class-Specific MS Interface Header Descriptor, p.40
USB_MIDI_INTERFACE_DESCSIZE, // bLength, 7 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_HEADER, // bDescriptorSubtype, 0x01
0x00, // bcdADC(LSB)
0x01, // bcdADC(MSB), 0x0100 (version)
0x41, // wTotalLength(LSB), 65 bytes
0x00, // wTotalLength(MSB)
//--- MIDI IN JACK EMB(it connects to the USB OUT Endpoint), p.40
USB_IN_JACK_DESCSIZE, // bLength, 6 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_IN_JACK, // bDescriptorSubtype, 0x02
MIDI_JACK_TYPE_EMB, // bJackType, 0x01 (embedded)
1, // bJackID, #1
0, // Jack string descriptor, unused
//--- MIDI IN JACK EXT, p.40
USB_IN_JACK_DESCSIZE, // bLength, 6 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_IN_JACK, // bDescriptorSubtype, 0x02
MIDI_JACK_TYPE_EXT, // bJackType, 0x02 (external)
2, // bJackID, #2
0, // Jack string descriptor, unused
//--- MIDI OUT JACK EMB (connects to IN Endpoint), p.41
USB_OUT_JACK_DESCSIZE, // bLength, 9 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_OUT_JACK, // bDescriptorSubtype, 0x03
MIDI_JACK_TYPE_EMB, // bJackType, 0x01
3, // bJackID
1, // bNrInputPins
2, // baSourceID, this <=> Jack #2
1, // baSourcePin
0, // iJack, unused
//--- MIDI OUT JACK EXT, p.41
USB_OUT_JACK_DESCSIZE, // bLength, 9 bytes
USB_CS_INTERFACE_DESCRIPTOR, // bDescriptorType, 0x24
MIDI_CS_IF_OUT_JACK, // bDescriptorSubtype, 0x03
MIDI_JACK_TYPE_EXT, // bJackType, 0x02
4, // bJackID
1, // bNrInputPins
1, // baSourceID, this <=> Jack #1
1, // baSourcePin
0, // iJack, unused
USB MIDIã¯ã©ã¹ã®ãªãŒãã£ãªããã€ã¹ã§ã®ããŒã¿äº€æã¯ã32ããããã±ããïŒUSB-MIDIã€ãã³ããã±ããïŒã®éä¿¡ã§æ§æãããŸãã1ã2ããŸãã¯3ãã€ãã®ã¡ãã»ãŒãžãMIDIããã€ã¹ããåä¿¡ãããŸããUSBçµç±ã§è»¢éããå Žåãã±ãŒãã«çªå·ãšã³ãã³ãã³ãŒããå«ãããããã€ãããããã®ãã€ãã«è¿œå ãããŸãããã±ããã4ãã€ãæªæºã®å Žåã0ãåã蟌ãŸããŸããçŸåšã®ãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ã§ã¯ã32ãããã®å¢çãŸã§ãŒãã§åããŸãããã§ããŸãã質åã¯æªè§£æ±ºã®ãŸãŸã§ãã
ããšãã°ãã±ãŒãã«ïŒ1ã§ã¯ãNote OnããŒã³ãã³ãïŒéä¿¡æé960usïŒã¯æ¬¡ã®ãã±ããã«å€æãããŸãã
MIDIïŒ0x90 0x60 0x7f => USBïŒ0x19 0x90 0x60 0x7f
å³8USBä»æ§ã®USB-MIDIã€ãã³ããã±ããã®ã¹ããŒã ã
typedef union
{
struct PACKET
{
uint8_t cable : 4; // Cable Number (we use #0)
uint8_t cin : 4; // Code Index Number (cmd: 0x08)
uint8_t cmd; // MIDI command (status byte)
uint8_t data1; // MIDI data byte #1
uint8_t data2; // MIDI data byte #2
};
uint8_t buffer[sizeof(struct PACKET)];
} MIDI_EVENT_PACKET;
çŽæ¥ããã³éå€æã¯ãMIDI2USBïŒïŒããã³USB2MIDIïŒïŒé¢æ°ã«ãã£ãŠå®è¡ãããŸãããããã®é¢æ°ã§ã¯ãå ¥åããŒã¿ãå°çãããšãé¢æ°ãã¢ã€ãã«ç¶æ ïŒIDLEïŒããã³ãã³ãåä¿¡ç¶æ ïŒSTATUSïŒã«ç§»è¡ãã次ã«ããŒã¿åä¿¡ç¶æ ïŒDATAïŒã«ç§»è¡ããæåŸã«å ã®ç¶æ ã«æ»ã£ãŠããŒã¿ãéä¿¡ãããšãã«ãã¹ããŒããã·ã³ã䜿çšãããŸããæåŸ ã
MIDIãããã³ã«ã§ã¯ãããŒã¿ãã€ãã¯åºæ¬çã«7ãããïŒ0..127ïŒã§ããåžžã«æäžäœã®8çªç®ã®ãããã0ã«èšå®ãããŸããéã«ãã³ãã³ãïŒã¹ããŒã¿ã¹ãã€ãïŒã«ã¯åžžã«æäžäœã®ãããã1ã«èšå®ãããŸãã128ãã255ãŸã§ã®å€ããããŸã
ã9MIDIãããã³ã«ã®ãã€ãã®çš®é¡ã
æ°åã®æ¡æ°ã«ã€ããŠåè«ãèšã
:
â , ?
â H, .
â , 11-22-33?
â H, 11-22-34.
â H ! , !
â , ?
â H, .
â , 11-22-33?
â H, 11-22-34.
â H ! , !
ãã¹ãŠã®ã¹ããŒã ãšãœãŒã¹ã³ãŒããããã³å®æãããã¡ãŒã ãŠã§ã¢ã¯ãç§ã®gitãªããžããªã«ãããŸããMITã©ã€ã»ã³ã¹ã
ãœãããŠã§ã¢
ããŒããåãä»ããåŸããã€ã¯ãããã»ããµãããã°ã©ã ããå¿ èŠããããŸãããããè¡ãã«ã¯ãç¬èªã®/ã¯ããŒã³SiLabs C2ãããã°ã¢ããã¿ããŸãã¯J-Link v10 +ïŒEFM8ãµããŒãä»ãïŒãå·¥å Žã§ãã©ãã·ã¥ãããããŒãããŒããŒïŒãªããžã§ã³Rev-BïŒããŸãã¯æåŸã«é©åãªã¹ã¯ãªããã䜿çšããArduinoã®ããããã䜿çšã§ããŸããMIDIã¡ãã»ãŒãžããã§ãã¯ããã³ãããã°ããã«ã¯ãMIDI-OXãéåžžã«åœ¹ç«ã¡ãŸãã
å³10MIDI-OXããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ã
Cubaseã䜿çšããå Žåã¯ãAsioãã©ã€ããŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããããã¯ãDirectSoundãšDirectInputã䜿çšããå ŽåãããŒãæŒããŠããããŒããåçãããŸã§ã«é 延ãããããã§ããã¬ã€ãã³ã·ãŒã¯ããŒããŠã§ã¢ãšã¯ç¡é¢ä¿ã§ãããOSå®è£ ã®æ©èœã§ããäžè¬ã«ããã®ããã€ã¹ã¯ãCasioCDP-100æ©åšã§å®å šã«æ©èœããŸãã
å³11Cubase5ã€ã³ã¿ãŒãã§ã€ã¹ã
å®éšçãªãã¡ãŒã ãŠã§ã¢ã¯ãããŒãããã®ä»ã®MIDIã³ãã³ãã®å¯èœãªéãæ倧ã®ã¹ããªãŒã ãçæããŸãããäžååé³ã¯ã²ã©ããã®ã§ãããããã¹ãŠãæå³ãããšããã«æ©èœããŸããããŸããMuseScore 3.2ã䜿çšãããšãäžéãã¡ã€ã«ãèšé²ããã³åçã§ããŸãã
æåŸã®åè«
1990-. . â . . :
â , !
â , ! â !
â ! !
â ⊠. !
â ! !
. . , , , ⊠. , . :
â , , ?
â , !
â , ! â !
â ! !
â ⊠. !
â ! !
. . , , , ⊠. , . :
â , , ?
ä»äºã®çµæ
ã¢ããã¿ãŒã¯æ©èœããŸãïŒããŸãMIDIããUSBãžã®ã³ã³ããŒã¿ãŒãäœãããšãã§ããããã§ããç§ã®ããã€ã¹ã«ã¯ãã±ãŒã¹ãäžéšã®éšåãããã³äžåœè£œã¢ããã¿ãŒã®ã±ãŒãã«ã䜿çšããŸãããããUSBã³ãã¯ã¿ãã±ãŒã¹ã®å¥¥æ·±ãã«ãªã£ãŠããŸããUSBã±ãŒãã«ãããçŽããŠãã¡ã€ã«ãæäœããå¿ èŠããããŸãããLEDã¯æãã«ãªã£ãŠããŸãããç©Žã«ãŽã£ãããšã¯ãŸããŸããäžåœã®å ŽåãããŒããå€æŽããå¿ èŠããããŸãã
å³ïŒ12.ã³ã³ãã¯ãã«å解ãããããUSBãã©ã°ã
8ãããEFM8UB20ãã€ã¯ãã·ã¹ãã ã䜿çšãããšãã決å®ã¯ãäžéšã®äººã«ãšã£ãŠã¯ç©è°ãéžãããã«æããããããããŸããããã¡ãããä»ã®ãªãã·ã§ã³ãã³ã³ãããŒã©ãŒããããŸããå¥ã®æ¹æ³ã¯ãCH345ã³ã³ããŒã¿ãŒã§çŽç²ãªããŒããŠã§ã¢ãœãªã¥ãŒã·ã§ã³ãéžæããäžåœäººãæšå¥šããåç §åè·¯ã«åŸã£ãŠããã€ã¹ãäœæããããšã§ããããããç§ã®ããŒãžã§ã³ã¯ãŠãããŒãµã«ã§ããtkããã¡ãŒã ãŠã§ã¢ãå€æŽããããå¿ èŠãªæ©èœãè¿œå ããããèŠã€ãã£ããšã©ãŒãä¿®æ£ãããã§ããŸããçµå±ãå®æãããããžã§ã¯ãããç¥èãçµéšãé埳çæºè¶³ãåŸãããšãã§ããŸããããããŠæåŸã«ãç§ã¯ç§ã®èšäºãçµããŸããããããŠããªãã¯ãããèªã¿çµããŸããã
䟿å©ãªãªã³ã¯
- MIDIããã€ã¹ã®USBæšæº
- MIDIä»æ§1.0
- USB-MIDIã¢ããã¿ãŒã®æ¯èŒ
- ãããCH345T
- è¥ãäœæ²å®¶ã®äœåãèã
- èè ã®ãªãŒãã³ãããžã§ã¯ã
æž èŽããããšãããããŸããã