Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed
Fork of NuMidi401 by
NuFM401
Nucleo F401用の自作ソフトウェアMIDI音源
概要
だいたいそんなもんです。
特徴
- ブレッドボードの上で組める程度には簡単な回路構成
- 外部のDACにMCP4922を採用
- 念のためのボルテージフォロアとしてNJM2737Dを採用
- バンク用EEPROMに24FC1025を採用
- シリアル経由でMIDIデータを受信することで操作
補足
シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。
Diff: Main.cpp
- Revision:
- 16:5cfa8b491882
- Parent:
- 15:b03677948732
- Child:
- 23:deb76bdf6f03
--- a/Main.cpp Sat Jan 17 04:00:20 2015 +0000 +++ b/Main.cpp Mon Jan 26 13:26:34 2015 +0000 @@ -1,26 +1,23 @@ #include "Main.h" MCP4922 output(PA_7, PA_5, PA_8); +I2C lcdbus(D14, D15); -AOTTrigon t; -Timer master; -Serial midis(USBTX,USBRX); -FMOscillator fm; +AOTTrigon trigon; +Timer timer; +Serial midiserial(USBTX,USBRX); +int operators=64; +FMOscillator *fm; const double smpps = 40000.0; const double smpus = 1000000.0 / smpps; double ntime = 0.0; -volatile double freq = 0; - -float out = 0.0f; - -void tick_sampling(); -void midiReceived(); int main() { + fm = new FMOscillator(operators, &timer, &midiserial, &trigon, &lcdbus); //DAC setting output.referenceMode(MCP4922::DAC_A, MCP4922::REF_UNBUFFERED); output.gainMode(MCP4922::DAC_A, MCP4922::GAIN_1X); @@ -28,23 +25,9 @@ output.referenceMode(MCP4922::DAC_B, MCP4922::REF_UNBUFFERED); output.gainMode(MCP4922::DAC_B, MCP4922::GAIN_1X); output.powerMode(MCP4922::DAC_B, MCP4922::POWER_NORMAL); - - //MIDI Serial setting - midis.baud(256000); - midis.format(); - //for(int i = 0; i < operators; i++) new(op + i) FMOperator(&master, &t); - midis.attach(&midiReceived); - - master.start(); while(true) { - ntime = master.read_us()/1000000.0; + ntime = timer.read_us()/1000000.0; //output.write(MCP4922::DAC_A,out/oc+0.5); } } - -void midiReceived() -{ - //getMIDIMessage(); - while(midis.readable()) midis.getc(); -}