自作楽器用音源モジュール作成(2)

音色やらその他については今回の設計においては後回しなので、受け取ったMIDIデータをVS1053bのリアルタイムMIDIモードに投げつけて鳴らすことにする。

VS1053bに関して

VS1053bに電源供給。Real-Time MIDIで起動するには
GPIO0=LOW
GPIO1=HIGH
とデータシート57ページに記載がある。
f:id:tohkaf:20151207000017p:plain
https://www.sparkfun.com/datasheets/Components/SMD/vs1053.pdf

PSoCに関して

f:id:tohkaf:20151206235236p:plain

基板のピン都合上、SCBは使わない方向で行く。

BAUDRATEの設定がComboBoxに31.25kHzが無いと思ったら外部クロックで駆動させればいける。(ExternalClock / Oversampling rate [Hz]になる)

f:id:tohkaf:20151206235502p:plain


f:id:tohkaf:20151206235511p:plain


あとはプログラムだがひとまず鳴らすように書いた。

#include <project.h>

int main()
{
    uint8_t i,j;
    uint8_t midiData[3] = {0x90, 0x70, 0x7f};

    CyGlobalIntEnable; 

    UART_VS1053b_Start();
    
    LCD_Char_1_Start();
    LCD_Char_1_Position(0,0);
    LCD_Char_1_PrintString("CTRL NOTE");
    
    for(i = 0 ;; ++i)
    {
        for(j = 0 ; j < 0x7f ; ++j){
            /* LCD */
            LCD_Char_1_Position(1,0);
            LCD_Char_1_PrintNumber(j);
    
            /* Cn:Program Change */
            midiData[0] = 0xc0;
            midiData[1] = j;
            UART_VS1053b_PutArray(midiData, 2);
            
            for(i = 0x40 ; i < 0x50 ; ++i){
                /* LCD */
                LCD_Char_1_Position(1,5);
                LCD_Char_1_PrintNumber(i);
                /* 9n:Note On */
                midiData[0] = 0x90;
                midiData[1] = i;
                midiData[2] = 0x3f;
                UART_VS1053b_PutArray(midiData, 3);

                CyDelay(200);
                /* 8n:Note Off*/
                midiData[0] = 0x80;
                midiData[2] = 0x0;
                UART_VS1053b_PutArray(midiData, 3);

            }        
        }
    }
}

動作

f:id:tohkaf:20151207000233j:plain

適当なイヤフォンを繋いで動作が確認できた、そろそろ箱の方も考えたい。