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で。

Committer:
kb10uy
Date:
Thu Dec 25 04:41:44 2014 +0000
Revision:
6:76e79bf6b571
Parent:
5:6f060709aa23
Child:
7:439c57c20593
AOTTrigon??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kb10uy 1:cde592d8076e 1 #include "Main.h"
kb10uy 1:cde592d8076e 2
kb10uy 3:e98f2da2d3c5 3 Ticker sampler;
kb10uy 4:e300f6fd7f96 4 Timer master;
kb10uy 4:e300f6fd7f96 5 MCP4922 output(D4,D3,D7);
kb10uy 4:e300f6fd7f96 6 AOTTrigon t(64);
kb10uy 3:e98f2da2d3c5 7
kb10uy 3:e98f2da2d3c5 8 const double smpps = 40000.0;
kb10uy 3:e98f2da2d3c5 9 const double smptime = 1.0 / smpps;
kb10uy 3:e98f2da2d3c5 10 const double smpus = 1000000.0 / smpps;
kb10uy 3:e98f2da2d3c5 11
kb10uy 3:e98f2da2d3c5 12 double ntime = 0.0;
kb10uy 5:6f060709aa23 13 double freq = 2.5;
kb10uy 2:658699249a81 14
kb10uy 3:e98f2da2d3c5 15 void tick_sampling();
kb10uy 3:e98f2da2d3c5 16
kb10uy 3:e98f2da2d3c5 17 int main(){
kb10uy 5:6f060709aa23 18 output.referenceMode(MCP4922::DAC_A, MCP4922::REF_UNBUFFERED);
kb10uy 5:6f060709aa23 19 output.gainMode(MCP4922::DAC_A, MCP4922::GAIN_1X);
kb10uy 5:6f060709aa23 20 output.powerMode(MCP4922::DAC_A, MCP4922::POWER_NORMAL);
kb10uy 5:6f060709aa23 21 output.referenceMode(MCP4922::DAC_B, MCP4922::REF_UNBUFFERED);
kb10uy 5:6f060709aa23 22 output.gainMode(MCP4922::DAC_B, MCP4922::GAIN_1X);
kb10uy 5:6f060709aa23 23 output.powerMode(MCP4922::DAC_B, MCP4922::POWER_NORMAL);
kb10uy 5:6f060709aa23 24
kb10uy 3:e98f2da2d3c5 25 sampler.attach_us(&tick_sampling, smpus);
kb10uy 4:e300f6fd7f96 26 master.start();
kb10uy 4:e300f6fd7f96 27 while(1);
kb10uy 3:e98f2da2d3c5 28 }
kb10uy 3:e98f2da2d3c5 29
kb10uy 3:e98f2da2d3c5 30 void tick_sampling() {
kb10uy 4:e300f6fd7f96 31 ntime=master.read_us()/1000000.0;
kb10uy 6:76e79bf6b571 32 for(int i=0;i<64;i++) t.sin(M_PI*2.0*freq*ntime);
kb10uy 6:76e79bf6b571 33 output.write(MCP4922::DAC_A, t.sin(M_PI*2.0*freq*ntime)/2.0+0.5);
kb10uy 1:cde592d8076e 34 }