一応動作確認OKなので、自分のメモとしても記録したいと思い、こっちのブログに書きます。
MIDIとは何かというところは省略します。
知識ゼロからMIDIを調べて、色々と人に教えてもらい、書籍を読み、なんとかここまで来ました。
仕様は凄く単純。
ボタンが3つあって、MIDIフットコントローラーの役割をします。
使用言語はC言語、MikroC_PROです。
PICは16F88です。
内部クロック8Mhz。
ハード側の回路図は。。。

単純です。
以下プログラムソース。
(全角スペースを消してください)
======================================================
void btn_on1(){ //プログラムチェンジ
//チャンネル:1 プログラム01 とする
PORTB=0b00000000;//LEDの初期化
PORTB=0b00000001;//LED点灯させます。
UART1_Write(0xC0);
while(!UART1_Tx_Idle());
UART1_Write(0x00);//0=1
delay_ms(200);
}
void btn_on2(){ //プログラムチェンジ
//チャンネル:1 プログラム02 とする
PORTB=0b00000000;//LEDの初期化
PORTB=0b00000010;//LED点灯させます。
UART1_Write(0xC0);
while(!UART1_Tx_Idle());
UART1_Write(0x01);//01=2
delay_ms(200);
}
void btn_on3(){ //プログラムチェンジ
//チャンネル:1 プログラム03 とする
PORTB=0b00000000;//LEDの初期化
PORTB=0b00001000;//LED点灯させます。
UART1_Write(0xC0);
while(!UART1_Tx_Idle());
UART1_Write(0x02);//02=3
delay_ms(200);
}
void main()
{
OSCCON=0x070;//内部クロック8Mhz使用
ANSEL=0b00000000;
TRISA=0b00011100; //RA2,3,4を入力にする
TRISB=0b00000000; //RBはすべて出力
PORTB=0b00100000; //TX(RB5)は常時ON(MIDI信号待機状態はONです)
UART1_Init(31250);//UARTの初期設定
delay_ms(200); //起動時はプログラム1を選択
PORTB=0b00000000;//LEDの初期化
PORTB=0b00000001;//LED点灯させます。
UART1_Write(0xC0);
while(!UART1_Tx_Idle());
UART1_Write(0x00);//0=1
delay_ms(200);
while(1)
{
if(Button(&PORTA,2,1,1)) btn_on1(); //RA2を押した時にLED_on1を実行
if(Button(&PORTA,3,1,1)) btn_on2(); //RA3を押した時にLED_on2を実行
if(Button(&PORTA,4,1,1)) btn_on3(); //RA4を押した時にLED_on3を実行
}
}
================================================================
ここまで。
自分がぶち当たった壁
1.PICのUART機能
2.PICのTXから出力されたMIDI信号をバッファリングすること。
その他たくさん分からなかった事がありましたが、やっぱりPICのUART機能と信号のバッファリングが一番悩んだ。。。
という事で、LOOP機能なんかも加え色々と実験を継続していきたいです。