まず、cv発生器では4つのピンからの信号で1オクターブを操作しているようなので、これを5つのピンで操作するように
しないといけないと思います。attiny2313の3ピンは使ってないようですのでこれを使えるでしょうか?
おそらく大丈夫だと思います。このピンはシリアルの出力を使う場合にはふさがってしまうので、何か MIDI 出力をするような改造はできなくなりますが、今回の改造では大丈夫でしょう。ピン数をケチる方法は他にいくつかありますが ピン 3 を使うのが一番簡単だと思います。
前の投稿で書きましたように、MiniBoard ではダイオードの回路を使ってキーごとに別の二進数の値を割り当てているのですが、1オクターブで使われるのは 0x01 から 0x0d までです。5つのピンで操作するようにすると、値は 0 -31、16進数ですと 0x00 から 0x1f まで使えるので、二オクターブ目の C# から上の C までは、0x0e から 0x19 までの値が割り当てられるようにダイオード回路を組んでみてください。
ソフトウェアの変更も必要です。まずは入出力の設定のところで、新しく加える入力ピンをプルアップする必要があります。前回の投稿では煩雑になるので省略してしまったのですが、キー読み取りに使われる PB4, PB5, PB6, PB7 は、プルアップといって、何も繋いでいない状態では 1 になるようにプロセッサ内部で高抵抗を介してピンに high 状態が入力されています。iosetup 関数の中でそれが設定されています。
void iosetup(void) {
/* setup output data port */
DDRB = _BV(PB0) | // tuning tone
_BV(PB1) | // gate out
_BV(PB2) | // note CV
_BV(PB3); // pitch bend
PORTB = 0xf0; // ここで PB4, PB5, PB6, PB7 に 1 が設定される。このことによりこれらのピンがプルアップされる
PORTD = _BV(PD2) | _BV(PD3) | _BV(PD4) | _BV(PD5) | _BV(PD6);
}
この部分に、ピン 3 のプルアップを加える必要があります。ピン 3 は PD1 ですので、以下のように変更すれば良いはずです。
void iosetup(void) {
/* setup output data port */
DDRB = _BV(PB0) | // tuning tone
_BV(PB1) | // gate out
_BV(PB2) | // note CV
_BV(PB3); // pitch bend
PORTB = 0xf0; // ここで PB4, PB5, PB6, PB7 に 1 が設定される。このことによりこれらのピンがプルアップされる
PORTD = _BV(PD1) | _BV(PD2) | _BV(PD3) | _BV(PD4) | _BV(PD5) | _BV(PD6); // PD1 が加わった
}
あとは、ISR(TIMER1_OVF_vect) の中での、キー読み取りの行
key = ((PINB >> 4) ^ 0x0f);
を、以下のように変えれば良いと思います。
key = (((PIND & _BV(PD1)) << 3) ^ 0x10) + ((PINB >> 4) ^ 0x0f);
ところで、この回路でひとつちょっと問題なのが、キーの同時押しをしてしまうと変な値が入ります。出音が変な風になるかもしれません。
あとオクターブスイッチで変わるのは1オクターブですのでこれも2オクターブに変更しないといけません。
オクターブスイッチのシフトは 1 オクターブと 2 オクターブでどちらが弾きやすいかわかりませんが、ISR((TIMER1_OVF_vect) の中のオクターブスイッチ読み取りの行
octave = ((PIND >> 3) ^ 0x0f) * 12;
これを、以下のように変更すれば 2 オクターブ飛びになります。現状の回路では 16 段階のスイッチだったと思いますが、最大 32 オクターブのトランスポーズをしてしまうので、上の方は CV の出せる範囲を突き抜けてしまうかもしれません。
octave = ((PIND >> 3) ^ 0x0f) * 24;
それから、マイクロプロセッサのプログラムを理解するにはプログラムそのものだけでなくプロセッサ特有のレジスタやその使い方も知っていた方が良いです。それにはデータシートが一番充実した資料です。ATTiny2313 のデータシートは以下から見られます。
http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2543-AVR-ATtiny2313_Datasheet.pdf