Nucleo F401REでFM音源を実装するやつ の実装途中で32ポリ音源にしたやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 mbed
Diff: Main.cpp
- Revision:
- 10:0ffdefe75566
- Parent:
- 7:439c57c20593
- Child:
- 11:62da91a1eaf1
--- a/Main.cpp Mon Dec 29 02:42:03 2014 +0000 +++ b/Main.cpp Mon Dec 29 09:01:10 2014 +0000 @@ -1,20 +1,29 @@ #include "Main.h" Ticker sampler; +MCP4922 output(PA_7, PA_5, PA_8); + +AOTTrigon t; +const int operators = 32; +FMOperator op[operators]; + Timer master; -MCP4922 output(D4,D3,D7); -AOTTrigon t; +Serial midis(USBTX,USBRX); const double smpps = 40000.0; -const double smptime = 1.0 / smpps; const double smpus = 1000000.0 / smpps; double ntime = 0.0; double freq = 2.5f; -void tick_sampling(); +float out = 0.0f; -int main(){ +void tick_sampling(); +void midiReceived(); + +int main() +{ + //DAC setting output.referenceMode(MCP4922::DAC_A, MCP4922::REF_UNBUFFERED); output.gainMode(MCP4922::DAC_A, MCP4922::GAIN_1X); output.powerMode(MCP4922::DAC_A, MCP4922::POWER_NORMAL); @@ -22,13 +31,25 @@ 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); sampler.attach_us(&tick_sampling, smpus); + midis.attach(&midiReceived); + master.start(); - while(1); + while(true); } -void tick_sampling() { - ntime=master.read_us()/1000000.0; - for(int i=0;i<64;i++) t.sin(M_PI*2.0*freq*ntime); - output.write(MCP4922::DAC_A, t.sin(M_PI*2.0f*freq*ntime)/2.0+0.5); +void tick_sampling() +{ + ntime = master.read_us()/1000000.0; + output.write(MCP4922::DAC_A, out); +} + +void midiReceived() +{ + out = 1.0f - out; } \ No newline at end of file