Nucleo Sequencer of my Base Machine

Dependencies:   Amp AverageAnalogIn Envelope FilterController Sequence BaseMachineComon mbed-rtos mbed

Fork of SpiSequenceSender_Test by Ryo Od

Committer:
ryood
Date:
Fri Jul 29 09:44:27 2016 +0000
Revision:
13:b0f988a239df
Parent:
12:c248781608af
Child:
14:c173e03ee3ad
???????????????POT????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:21e39bc75e31 1 #include "mbed.h"
ryood 5:4abac408b827 2 #include "rtos.h"
ryood 0:21e39bc75e31 3
ryood 6:fc10eac60b91 4 #define UART_TRACE (0)
ryood 6:fc10eac60b91 5 #include "SpiSequenceSender.h"
ryood 9:3e4e08578e1c 6 #include "EnvelopeGenerator.h"
ryood 9:3e4e08578e1c 7 #include "SpiAmpController.h"
ryood 12:c248781608af 8 #include "SpiFilterController.h"
ryood 0:21e39bc75e31 9
ryood 6:fc10eac60b91 10 #define SEQUENCE_N (16)
ryood 6:fc10eac60b91 11 #define SPI_RATE (8000000)
ryood 0:21e39bc75e31 12
ryood 13:b0f988a239df 13 const int samplingPeriod = 2; // ms
ryood 10:fb04f9959fd9 14 const int bpm = 120;
ryood 10:fb04f9959fd9 15 const int envelopeLength = (60 * 1000 / (bpm * 4)) / samplingPeriod;
ryood 10:fb04f9959fd9 16
ryood 13:b0f988a239df 17 //AnalogIn levelIn(A0);
ryood 13:b0f988a239df 18 AnalogIn durationIn(A2);
ryood 13:b0f988a239df 19 AnalogIn decayIn(A1);
ryood 13:b0f988a239df 20 AnalogIn sustainIn(A0);
ryood 13:b0f988a239df 21 AnalogIn cutoffIn(A3);
ryood 13:b0f988a239df 22 AnalogIn resonanceIn(A4);
ryood 10:fb04f9959fd9 23
ryood 0:21e39bc75e31 24 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 25
ryood 0:21e39bc75e31 26 Sequence sequence[SEQUENCE_N];
ryood 10:fb04f9959fd9 27 SpiSequenceSender sequenceSender(&spiMaster, D9, sequence, SEQUENCE_N, samplingPeriod, bpm);
ryood 6:fc10eac60b91 28
ryood 10:fb04f9959fd9 29 Envelope envelope(4095, envelopeLength, envelopeLength*3/4, envelopeLength/2, 2047);
ryood 9:3e4e08578e1c 30 EnvelopeGenerator envelopeGenerator;
ryood 9:3e4e08578e1c 31 SpiAmpController ampController(&spiMaster, D8, D7);
ryood 6:fc10eac60b91 32
ryood 12:c248781608af 33 SpiFilterController filterController(&spiMaster, D10);
ryood 0:21e39bc75e31 34
ryood 8:de409197ff95 35 void callbackFunction(int ticks)
ryood 8:de409197ff95 36 {
ryood 8:de409197ff95 37 if (ticks == 0) {
ryood 9:3e4e08578e1c 38 envelopeGenerator.init(envelope);
ryood 8:de409197ff95 39 }
ryood 9:3e4e08578e1c 40 uint16_t level = envelopeGenerator.getModLevel();
ryood 9:3e4e08578e1c 41 //printf("g,%d\r\n", level);
ryood 9:3e4e08578e1c 42 ampController.outDca(level);
ryood 9:3e4e08578e1c 43 envelopeGenerator.update();
ryood 12:c248781608af 44
ryood 12:c248781608af 45 filterController.outDCF();
ryood 8:de409197ff95 46 }
ryood 8:de409197ff95 47
ryood 0:21e39bc75e31 48 int main()
ryood 0:21e39bc75e31 49 {
ryood 0:21e39bc75e31 50 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 51 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 52
ryood 0:21e39bc75e31 53 // Test SequencerSender Run
ryood 0:21e39bc75e31 54 //
ryood 10:fb04f9959fd9 55 sequenceSender.setBpm(bpm);
ryood 0:21e39bc75e31 56 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 57 Sequence& seq = sequenceSender.getSequences()[i];
ryood 6:fc10eac60b91 58 seq.setPitch(i);
ryood 4:dd1582f2e5df 59 seq.setOctave(-1);
ryood 0:21e39bc75e31 60 seq.tie = true;
ryood 0:21e39bc75e31 61 }
ryood 0:21e39bc75e31 62
ryood 12:c248781608af 63 sequence[3].setOctave(0);
ryood 12:c248781608af 64 sequence[7].setOctave(0);
ryood 5:4abac408b827 65 sequence[11].setOctave(0);
ryood 12:c248781608af 66 sequence[15].setOctave(0);
ryood 6:fc10eac60b91 67
ryood 9:3e4e08578e1c 68 envelopeGenerator.init(envelope);
ryood 12:c248781608af 69
ryood 12:c248781608af 70 sequenceSender.attachUpdate(&callbackFunction);
ryood 12:c248781608af 71 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW);
ryood 0:21e39bc75e31 72 sequenceSender.run(0);
ryood 5:4abac408b827 73
ryood 5:4abac408b827 74 for (;;) {
ryood 10:fb04f9959fd9 75 /*
ryood 5:4abac408b827 76 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4);
ryood 6:fc10eac60b91 77 Thread::wait(500);
ryood 6:fc10eac60b91 78 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW);
ryood 6:fc10eac60b91 79 Thread::wait(500);
ryood 6:fc10eac60b91 80 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SQUARE);
ryood 10:fb04f9959fd9 81 */
ryood 13:b0f988a239df 82 //envelope.setLevel(levelIn * 4095);
ryood 13:b0f988a239df 83 envelope.setLevel(4095);
ryood 10:fb04f9959fd9 84 envelope.setDuration(durationIn * envelopeLength);
ryood 10:fb04f9959fd9 85 envelope.setDecay(decayIn * envelopeLength);
ryood 10:fb04f9959fd9 86 envelope.setSustain(sustainIn * 4095);
ryood 12:c248781608af 87
ryood 12:c248781608af 88 filterController.setCutoff(cutoffIn * 255);
ryood 12:c248781608af 89 filterController.setResonance(resonanceIn * 255);
ryood 12:c248781608af 90
ryood 13:b0f988a239df 91 /*
ryood 12:c248781608af 92 printf("%d\t%d\t%d\t%d\t%d\t%d\r\n",
ryood 12:c248781608af 93 filterController.getCutoff(),
ryood 12:c248781608af 94 filterController.getResonance(),
ryood 12:c248781608af 95 envelope.getLevel(),
ryood 12:c248781608af 96 envelope.getDuration(),
ryood 12:c248781608af 97 envelope.getDecay(),
ryood 12:c248781608af 98 envelope.getSustain()
ryood 12:c248781608af 99 );
ryood 13:b0f988a239df 100 */
ryood 5:4abac408b827 101 }
ryood 0:21e39bc75e31 102 }