Nucleo F401REでFM音源を実装するやつ 外部DACとオペアンプを利用 現在はMCP4922とNJM2737
Dependencies: AOTTrigon I2CEEPROM MCP4922 AQM0802A mbed
Fork of NuMidi401 by
NuFM401
Nucleo F401用の自作ソフトウェアMIDI音源
概要
だいたいそんなもんです。
特徴
- ブレッドボードの上で組める程度には簡単な回路構成
- 外部のDACにMCP4922を採用
- 念のためのボルテージフォロアとしてNJM2737Dを採用
- バンク用EEPROMに24FC1025を採用
- シリアル経由でMIDIデータを受信することで操作
補足
シリアル <=> MIDI のドライバにはHairless-MIDISerialをオススメします。 仮想MIDIケーブルはとりあえずMIDI Yokeで。
Diff: FMOscillator/FMOscillator.cpp
- Revision:
- 16:5cfa8b491882
- Parent:
- 15:b03677948732
- Child:
- 17:2e577c6000cf
--- a/FMOscillator/FMOscillator.cpp Sat Jan 17 04:00:20 2015 +0000 +++ b/FMOscillator/FMOscillator.cpp Mon Jan 26 13:26:34 2015 +0000 @@ -6,8 +6,39 @@ } -FMOscillator::FMOscillator(Timer *timer, Serial *serial, AOTTrigon *trigon) { +FMOscillator::FMOscillator(int opc, Timer *tim, Serial *ser, AOTTrigon *tri, I2C *i2clcd) { + master = tim; + serial = ser; + trigon = tri; + opcount = opc; + + operators = new FMOperator*[opcount]; + for(int i = 0; i < opcount; i++) { + operators[i] = new FMOperator(master, trigon); + } + lcd = new AQM0802A(*i2clcd); + + serial->baud(256000); + serial->format(); + serial->attach(this, &FMOscillator::midiReceived); + master->start(); + lcd->cls(); + lcd->printf("NuFM401\nFMDriver"); +} + +FMOscillator::~FMOscillator() { + for(int i = 0; i < opcount; i++) { + delete operators[i]; + } + delete operators; + delete lcd; +} + +void FMOscillator::midiReceived() +{ + getMIDIMessage(); + while(serial->readable()) serial->getc(); } void FMOscillator::getMIDIMessage() @@ -98,6 +129,9 @@ void FMOscillator::midiNoteOn(char ch, char note, char vel) { + lcd->cls(); + lcd->printf("Note On\n"); + lcd->printf("%1x: %2x,%2x", ch, note, vel); if (vel==0) { //globalrelease((ch<<8)|note); } else { @@ -107,6 +141,9 @@ void FMOscillator::midiNoteOff(char ch, char note, char vel) { + lcd->cls(); + lcd->printf("Note Off\n"); + lcd->printf("%1x: %2x,%2x", ch, note, vel); //globalrelease((ch<<8)|note); }