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:
4:e300f6fd7f96
Parent:
3:e98f2da2d3c5
Child:
5:6f060709aa23
--- a/Main.cpp	Tue Dec 23 05:32:48 2014 +0000
+++ b/Main.cpp	Tue Dec 23 07:22:28 2014 +0000
@@ -1,8 +1,9 @@
 #include "Main.h"
 
 Ticker sampler;
-MCP4922 output(SPI_MOSI,SPI_SCK,SPI_CS);
-AOTTrigon t(1024);
+Timer master;
+MCP4922 output(D4,D3,D7);
+AOTTrigon t(64);
 
 const double smpps = 40000.0;
 const double smptime = 1.0 / smpps;
@@ -14,13 +15,14 @@
 void tick_sampling();
 
 int main(){
-    output.referenceMode(MCP4922::DAC_A, MCP4922::REF_UNBUFFERED);
-    output.gainMode(MCP4922::DAC_A, MCP4922::GAIN_1X);
-    output.powerMode(MCP4922::DAC_A, MCP4922::POWER_NORMAL);
+    output.frequency(20000000);
     sampler.attach_us(&tick_sampling, smpus);
+    master.start();
+    while(1);
 }
 
 void tick_sampling() {
-    output.write(MCP4922::DAC_A, 0.5f/*t.sine(M_PI*2.0*freq*ntime)/2.0+0.5*/);
-    ntime+=smptime;
+    ntime=master.read_us()/1000000.0;
+    for(int i=0;i<32;i++) t.sine(M_PI*2.0*freq*ntime);
+    output.writeA((int)(4095*(t.sine(M_PI*2.0*freq*ntime)/2.0+0.5)));
 }
\ No newline at end of file