Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737

Dependencies:   AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed

Fork of NuMidi401 by Yuu Kobayashi

NuFM401

Nucleo F401用の自作ソフトウェアMIDI音源

概要

だいたいそんなもんです。

特徴

  • ブレッドボードの上で組める程度には簡単な回路構成
  • 外部のDACにMCP4922を採用
  • 念のためのボルテージフォロアとしてNJM2737Dを採用
  • バンク用EEPROMに24FC1025を採用
  • シリアル経由でMIDIデータを受信することで操作

補足

シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。

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();
-}