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

Main.cpp

Committer:
kb10uy
Date:
2014-12-29
Revision:
10:0ffdefe75566
Parent:
7:439c57c20593
Child:
11:62da91a1eaf1

File content as of revision 10:0ffdefe75566:

#include "Main.h"

Ticker sampler;
MCP4922 output(PA_7, PA_5, PA_8);

AOTTrigon t;
const int operators = 32;
FMOperator op[operators];

Timer master;
Serial midis(USBTX,USBRX);

const double smpps = 40000.0;
const double smpus = 1000000.0 / smpps;

double ntime = 0.0;
double freq = 2.5f;

float out = 0.0f;

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);
    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);
    sampler.attach_us(&tick_sampling, smpus);
    midis.attach(&midiReceived);
    
    master.start();
    while(true);
}

void tick_sampling()
{
    ntime = master.read_us()/1000000.0;
    output.write(MCP4922::DAC_A, out);
}

void midiReceived()
{
    out = 1.0f - out;
}