KIK01 Proto 08

Dependencies:   AverageMCP3008 VoltageMonitor mbed-rtos mbed mcp3008

Fork of KIK01_Proto07 by Ryo Od

Committer:
ryood
Date:
Wed Jan 17 08:23:23 2018 +0000
Revision:
39:3c73531d13a2
Parent:
38:90dde01f8255
Delete wait_us(1) from AD8402Write()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 3:f89b400cfe57 1 /*
ryood 3:f89b400cfe57 2 * KIK01
ryood 3:f89b400cfe57 3 * Kick Machine
ryood 3:f89b400cfe57 4 *
ryood 39:3c73531d13a2 5 * 2018.01.17 Release
ryood 35:05798de92fb5 6 * 2017.12.15 Proto08: LEDs
ryood 33:eac518ea0f34 7 * 2017.12.03 Proto07: SyncIn
ryood 32:41cda5ad45e4 8 * 2017.11.29 Proto06: Add Power Monitor
ryood 27:b07a55935230 9 * 2017.10.19 Proto05: Add NOS01 Controller
ryood 17:a5d9908bd456 10 * 2017.09.16 Proto04: SPI1 for AD8402 Wein Bridge DCO & Internal DAC for Dual-OTA-VCA
ryood 15:8f674acdac03 11 * 2017.07.04 Proto03: MCP4922 DCA
ryood 13:43a43da257e3 12 * 2017.06.19 Proto02
ryood 3:f89b400cfe57 13 * 2017.06.04 created.
ryood 3:f89b400cfe57 14 *
ryood 3:f89b400cfe57 15 */
ryood 3:f89b400cfe57 16
ryood 0:2dcec10e9199 17 #include "mbed.h"
ryood 0:2dcec10e9199 18 #include "rtos.h"
ryood 13:43a43da257e3 19 #include "mcp3008.h"
ryood 28:387c5a6d5206 20 #include "AverageMCP3008.h"
ryood 22:a3bb7594f9bb 21 #include "EnvelopeAR.h"
ryood 0:2dcec10e9199 22
ryood 38:90dde01f8255 23 #define UART_TRACE (0)
ryood 32:41cda5ad45e4 24 #include "VoltageMonitor.h"
ryood 32:41cda5ad45e4 25
ryood 38:90dde01f8255 26 #define PIN_CHECK (0)
ryood 36:3543a352b9d4 27 #define LED_SYNCOUT_BLINK (1)
ryood 36:3543a352b9d4 28
ryood 35:05798de92fb5 29 #define TITLE_STR1 ("KIK01 Kick Machine Proto08")
ryood 39:3c73531d13a2 30 #define TITLE_STR2 ("20180117")
ryood 0:2dcec10e9199 31
ryood 0:2dcec10e9199 32 #define PI_F (3.1415926f)
ryood 15:8f674acdac03 33
ryood 35:05798de92fb5 34 #define MCP3008_SPI_SPEED (1406250)
ryood 21:a527f51381d6 35 #define AD8402_SPI_SPEED (10000000)
ryood 31:3c7e1cd0d947 36 #define ENVELOPE_UPDATE_RATE (32000) // Hz
ryood 17:a5d9908bd456 37
ryood 20:70a05941db8c 38 #define AD8402_RMAX (10000.0f)
ryood 20:70a05941db8c 39 #define AD8402_RMIN (50.0f)
ryood 20:70a05941db8c 40
ryood 31:3c7e1cd0d947 41 #define AVERAGE_BUFFER_SIZE (4)
ryood 31:3c7e1cd0d947 42
ryood 32:41cda5ad45e4 43 #define PM_VDD (3.32f)
ryood 35:05798de92fb5 44 #define PM_LoThreshold (2.3f)
ryood 35:05798de92fb5 45 #define PM_HiThreshold (2.7f)
ryood 32:41cda5ad45e4 46
ryood 36:3543a352b9d4 47 #define LED_BEAT_BLINK_CYCLE (0.15f)
ryood 36:3543a352b9d4 48 #define LED_SYNCIN_BLINK_CYCLE (0.04f)
ryood 36:3543a352b9d4 49 #define LED_SYNCOUT_BLINK_CYCLE (0.04f)
ryood 36:3543a352b9d4 50
ryood 35:05798de92fb5 51 // LEDs
ryood 36:3543a352b9d4 52 DigitalOut LedPower(PB_2);
ryood 35:05798de92fb5 53 DigitalOut LedBeat(PA_12);
ryood 35:05798de92fb5 54 DigitalOut LedSyncIn(PA_11);
ryood 35:05798de92fb5 55 DigitalOut LedSyncOut(PB_12);
ryood 35:05798de92fb5 56
ryood 35:05798de92fb5 57 // Envelope Output
ryood 26:866d672ba446 58 AnalogOut Dac1(PA_4);
ryood 27:b07a55935230 59 AnalogOut Dac2(PA_5);
ryood 3:f89b400cfe57 60
ryood 26:866d672ba446 61 // AD8402 SPI (SPI2)
ryood 26:866d672ba446 62 // SPI (PinName mosi, PinName miso, PinName sclk, PinName ssel=NC)
ryood 26:866d672ba446 63 SPI SpiMAD8402(PB_15, PB_14, PB_13);
ryood 35:05798de92fb5 64 DigitalOut AD8402Cs(PC_4, 1); // Initaially Inactive
ryood 15:8f674acdac03 65
ryood 18:1bf4abf6895b 66 // MCP3008 SPI
ryood 26:866d672ba446 67 // SPI (PinName mosi, PinName miso, PinName sclk, PinName ssel=NC)
ryood 26:866d672ba446 68 SPI SpiMAdc(PB_5, PB_4, PB_3);
ryood 32:41cda5ad45e4 69 MCP3008 Adc1(&SpiMAdc, PA_9);
ryood 26:866d672ba446 70 MCP3008 Adc2(&SpiMAdc, PA_8);
ryood 32:41cda5ad45e4 71 MCP3008 Adc3(&SpiMAdc, PB_10);
ryood 31:3c7e1cd0d947 72 AverageMCP3008 AvgAdc1(&Adc1, AVERAGE_BUFFER_SIZE);
ryood 31:3c7e1cd0d947 73 AverageMCP3008 AvgAdc2(&Adc2, AVERAGE_BUFFER_SIZE);
ryood 32:41cda5ad45e4 74 AverageMCP3008 AvgAdc3(&Adc3, AVERAGE_BUFFER_SIZE);
ryood 32:41cda5ad45e4 75
ryood 32:41cda5ad45e4 76 // Power Monitor
ryood 32:41cda5ad45e4 77 AnalogIn PowerMonitorIn(PA_0);
ryood 35:05798de92fb5 78 VoltageMonitor PWMon(&PowerMonitorIn, PM_VDD, PM_LoThreshold, PM_HiThreshold, &LedPower);
ryood 8:bb34a4894337 79
ryood 18:1bf4abf6895b 80 // Sync
ryood 33:eac518ea0f34 81 DigitalOut SyncOut(PC_10);
ryood 33:eac518ea0f34 82 InterruptIn SyncIn(PC_11);
ryood 37:85eb8e38cac8 83 DigitalIn AutoRunSw(PB_1);
ryood 18:1bf4abf6895b 84
ryood 14:8e96f97e261b 85 // Check pins
ryood 36:3543a352b9d4 86 DigitalOut Dout1(D14);
ryood 36:3543a352b9d4 87 DigitalOut Dout2(D15);
ryood 36:3543a352b9d4 88 DigitalOut Dout3(D2);
ryood 14:8e96f97e261b 89
ryood 9:d1e6eae9722b 90 EnvelopeAR envelopeFrequency(5, 300, 880.0f, 120.0f, 40.0f, 0.36f, 0.1f);
ryood 5:846772a77d33 91 EnvelopeAR envelopeAmplitude(50, 200, 0.99f, 1.0f, 0.0f);
ryood 29:947992b9904f 92 EnvelopeAR envelopeNoiseAmplitude(50, 200, 0.99f, 1.0f, 0.0f);
ryood 5:846772a77d33 93
ryood 25:b4977c7e0db7 94 EnvelopeParam frequencyParam;
ryood 25:b4977c7e0db7 95 EnvelopeParam amplitudeParam;
ryood 29:947992b9904f 96 EnvelopeParam noiseAmplitudeParam;
ryood 0:2dcec10e9199 97
ryood 36:3543a352b9d4 98 Timeout timeoutLedBeat;
ryood 36:3543a352b9d4 99 Timeout timeoutLedSyncIn;
ryood 36:3543a352b9d4 100 #if (LED_SYNCOUT_BLINK)
ryood 36:3543a352b9d4 101 Timeout timeoutLedSyncOut;
ryood 36:3543a352b9d4 102 #endif
ryood 36:3543a352b9d4 103
ryood 3:f89b400cfe57 104 volatile int ticks;
ryood 3:f89b400cfe57 105 volatile float frequency;
ryood 3:f89b400cfe57 106 volatile float amplitude;
ryood 29:947992b9904f 107 volatile float noiseAmplitude;
ryood 3:f89b400cfe57 108
ryood 5:846772a77d33 109 volatile int envelopeLength;
ryood 14:8e96f97e261b 110 volatile int stepLength;
ryood 0:2dcec10e9199 111
ryood 38:90dde01f8255 112 float bpm;
ryood 38:90dde01f8255 113
ryood 36:3543a352b9d4 114 //-----------------------------------------------------------------------------
ryood 38:90dde01f8255 115 // Interrupt Service Routine
ryood 36:3543a352b9d4 116 //-----------------------------------------------------------------------------
ryood 36:3543a352b9d4 117
ryood 36:3543a352b9d4 118 void ledBeatAtTimeout()
ryood 36:3543a352b9d4 119 {
ryood 36:3543a352b9d4 120 LedBeat = 0;
ryood 36:3543a352b9d4 121 }
ryood 36:3543a352b9d4 122
ryood 36:3543a352b9d4 123 void ledSyncInAtTimeout()
ryood 36:3543a352b9d4 124 {
ryood 36:3543a352b9d4 125 LedSyncIn = 0;
ryood 36:3543a352b9d4 126 }
ryood 36:3543a352b9d4 127
ryood 36:3543a352b9d4 128 #if (LED_SYNCOUT_BLINK)
ryood 36:3543a352b9d4 129 void ledSyncOutAtTimeout()
ryood 36:3543a352b9d4 130 {
ryood 36:3543a352b9d4 131 LedSyncOut = 0;
ryood 36:3543a352b9d4 132 }
ryood 36:3543a352b9d4 133 #endif
ryood 36:3543a352b9d4 134
ryood 38:90dde01f8255 135 void syncInFunction()
ryood 38:90dde01f8255 136 {
ryood 38:90dde01f8255 137 ticks = 0;
ryood 38:90dde01f8255 138 LedSyncIn = 1;
ryood 38:90dde01f8255 139 timeoutLedSyncIn.attach(&ledSyncInAtTimeout, LED_SYNCIN_BLINK_CYCLE);
ryood 38:90dde01f8255 140 }
ryood 36:3543a352b9d4 141
ryood 17:a5d9908bd456 142 void AD8402Write(uint8_t address, uint8_t value)
ryood 17:a5d9908bd456 143 {
ryood 21:a527f51381d6 144 #if (PIN_CHECK)
ryood 26:866d672ba446 145 Dout2 = 1;
ryood 21:a527f51381d6 146 #endif
ryood 21:a527f51381d6 147
ryood 18:1bf4abf6895b 148 AD8402Cs = 0;
ryood 21:a527f51381d6 149 SpiMAD8402.write(address);
ryood 21:a527f51381d6 150 SpiMAD8402.write(value);
ryood 18:1bf4abf6895b 151 AD8402Cs = 1;
ryood 39:3c73531d13a2 152 //wait_us(1);
ryood 21:a527f51381d6 153
ryood 21:a527f51381d6 154 #if (PIN_CHECK)
ryood 26:866d672ba446 155 Dout2 = 0;
ryood 21:a527f51381d6 156 #endif
ryood 17:a5d9908bd456 157 }
ryood 17:a5d9908bd456 158
ryood 23:da7c5f7feff1 159 void DcoSetFrequency(float freq)
ryood 17:a5d9908bd456 160 {
ryood 17:a5d9908bd456 161 const float c = 0.00000047;
ryood 17:a5d9908bd456 162 float r = 1.0f / (2.0f * PI_F * frequency * c);
ryood 20:70a05941db8c 163 if (r < AD8402_RMIN) r = AD8402_RMIN;
ryood 20:70a05941db8c 164 if (r > AD8402_RMAX) r = AD8402_RMAX;
ryood 20:70a05941db8c 165
ryood 20:70a05941db8c 166 uint8_t v = 256.0f * (r - AD8402_RMIN) / AD8402_RMAX;
ryood 21:a527f51381d6 167
ryood 17:a5d9908bd456 168 AD8402Write(0, v);
ryood 17:a5d9908bd456 169 AD8402Write(1, v);
ryood 23:da7c5f7feff1 170 }
ryood 17:a5d9908bd456 171
ryood 27:b07a55935230 172 void DcaSetAmplitude(int channel, float amp)
ryood 23:da7c5f7feff1 173 {
ryood 27:b07a55935230 174 switch (channel) {
ryood 27:b07a55935230 175 case 1:
ryood 27:b07a55935230 176 Dac1.write(amp);
ryood 27:b07a55935230 177 break;
ryood 27:b07a55935230 178 case 2:
ryood 33:eac518ea0f34 179 //Dac2.write(amp);
ryood 27:b07a55935230 180 Dac2.write(amp * 0.8f); // Avoid LED,s Non-Linearity
ryood 27:b07a55935230 181 break;
ryood 27:b07a55935230 182 default:
ryood 27:b07a55935230 183 error("DcaSetAmplitude(): invalid channel");
ryood 27:b07a55935230 184 }
ryood 17:a5d9908bd456 185 }
ryood 15:8f674acdac03 186
ryood 2:8dff77a1ee4d 187 void update()
ryood 2:8dff77a1ee4d 188 {
ryood 12:5b498285d121 189 #if (PIN_CHECK)
ryood 26:866d672ba446 190 Dout1 = 1;
ryood 12:5b498285d121 191 #endif
ryood 15:8f674acdac03 192
ryood 14:8e96f97e261b 193 // Output Sync Signal per steps
ryood 17:a5d9908bd456 194 if (ticks % stepLength == 0) {
ryood 33:eac518ea0f34 195 SyncOut = 1;
ryood 36:3543a352b9d4 196 #if (LED_SYNCOUT_BLINK)
ryood 36:3543a352b9d4 197 LedSyncOut = 1;
ryood 36:3543a352b9d4 198 timeoutLedSyncOut.attach(&ledSyncOutAtTimeout, LED_SYNCOUT_BLINK_CYCLE);
ryood 36:3543a352b9d4 199 #endif
ryood 14:8e96f97e261b 200 }
ryood 15:8f674acdac03 201
ryood 17:a5d9908bd456 202 // set envelope parameters
ryood 25:b4977c7e0db7 203 envelopeAmplitude.setParam(amplitudeParam);
ryood 25:b4977c7e0db7 204 envelopeFrequency.setParam(frequencyParam);
ryood 30:1291e20b1c53 205 envelopeNoiseAmplitude.setParam(noiseAmplitudeParam);
ryood 11:7e11404adca0 206
ryood 23:da7c5f7feff1 207 frequency = envelopeFrequency.getAmplitude(ticks);
ryood 30:1291e20b1c53 208 amplitude = envelopeAmplitude.getAmplitude(ticks);
ryood 30:1291e20b1c53 209 noiseAmplitude = envelopeNoiseAmplitude.getAmplitude(ticks);
ryood 23:da7c5f7feff1 210
ryood 23:da7c5f7feff1 211 DcoSetFrequency(frequency);
ryood 27:b07a55935230 212 DcaSetAmplitude(1, amplitude); // DCO
ryood 30:1291e20b1c53 213 DcaSetAmplitude(2, noiseAmplitude); // NOS01
ryood 11:7e11404adca0 214
ryood 17:a5d9908bd456 215 ticks++;
ryood 37:85eb8e38cac8 216 if (AutoRunSw && ticks >= envelopeLength) {
ryood 17:a5d9908bd456 217 ticks = 0;
ryood 36:3543a352b9d4 218 LedBeat = 1;
ryood 36:3543a352b9d4 219 timeoutLedBeat.attach(&ledBeatAtTimeout, LED_BEAT_BLINK_CYCLE);
ryood 2:8dff77a1ee4d 220 }
ryood 15:8f674acdac03 221
ryood 14:8e96f97e261b 222 // Output SyncSignal
ryood 33:eac518ea0f34 223 SyncOut = 0;
ryood 15:8f674acdac03 224
ryood 12:5b498285d121 225 #if (PIN_CHECK)
ryood 26:866d672ba446 226 Dout1 = 0;
ryood 12:5b498285d121 227 #endif
ryood 2:8dff77a1ee4d 228 }
ryood 2:8dff77a1ee4d 229
ryood 38:90dde01f8255 230 //-----------------------------------------------------------------------------
ryood 38:90dde01f8255 231 // Functions
ryood 38:90dde01f8255 232 //-----------------------------------------------------------------------------
ryood 38:90dde01f8255 233
ryood 25:b4977c7e0db7 234 void readParams()
ryood 5:846772a77d33 235 {
ryood 28:387c5a6d5206 236 bpm = AvgAdc1.read_input(7) * 180.0f + 60.0f;
ryood 12:5b498285d121 237 envelopeLength = 60 * ENVELOPE_UPDATE_RATE / bpm;
ryood 14:8e96f97e261b 238 stepLength = envelopeLength / 4;
ryood 11:7e11404adca0 239
ryood 28:387c5a6d5206 240 amplitudeParam.attack = AvgAdc1.read_input(0) * envelopeLength;
ryood 28:387c5a6d5206 241 amplitudeParam.release = AvgAdc1.read_input(1) * envelopeLength;
ryood 28:387c5a6d5206 242 amplitudeParam.v0 = AvgAdc1.read_input(4);
ryood 28:387c5a6d5206 243 amplitudeParam.v1 = AvgAdc1.read_input(5);
ryood 28:387c5a6d5206 244 amplitudeParam.v2 = AvgAdc1.read_input(6);
ryood 28:387c5a6d5206 245 amplitudeParam.attackTauRatio = AvgAdc1.read_input(2) + 0.01f;
ryood 28:387c5a6d5206 246 amplitudeParam.releaseTauRatio = AvgAdc1.read_input(3) + 0.01f;
ryood 11:7e11404adca0 247
ryood 28:387c5a6d5206 248 frequencyParam.attack = AvgAdc2.read_input(0) * envelopeLength * 0.1f;
ryood 28:387c5a6d5206 249 frequencyParam.release = AvgAdc2.read_input(1) * envelopeLength + 1;
ryood 28:387c5a6d5206 250 frequencyParam.v0 = AvgAdc2.read_input(4) * 4000.0f;
ryood 28:387c5a6d5206 251 frequencyParam.v1 = AvgAdc2.read_input(5) * 400.0f;
ryood 28:387c5a6d5206 252 frequencyParam.v2 = AvgAdc2.read_input(6) * 400.0f;
ryood 28:387c5a6d5206 253 frequencyParam.attackTauRatio = AvgAdc2.read_input(2) + 0.01f;
ryood 28:387c5a6d5206 254 frequencyParam.releaseTauRatio = AvgAdc2.read_input(3) + 0.01f;
ryood 29:947992b9904f 255
ryood 29:947992b9904f 256 noiseAmplitudeParam.attack = AvgAdc3.read_input(0) * envelopeLength;
ryood 29:947992b9904f 257 noiseAmplitudeParam.release = AvgAdc3.read_input(1) * envelopeLength;
ryood 29:947992b9904f 258 noiseAmplitudeParam.v0 = AvgAdc3.read_input(4);
ryood 29:947992b9904f 259 noiseAmplitudeParam.v1 = AvgAdc3.read_input(5);
ryood 29:947992b9904f 260 noiseAmplitudeParam.v2 = AvgAdc3.read_input(6);
ryood 29:947992b9904f 261 noiseAmplitudeParam.attackTauRatio = AvgAdc3.read_input(2) + 0.01f;
ryood 29:947992b9904f 262 noiseAmplitudeParam.releaseTauRatio = AvgAdc3.read_input(3) + 0.01f;
ryood 5:846772a77d33 263 }
ryood 5:846772a77d33 264
ryood 35:05798de92fb5 265 void LedsCheck(int n, int wait)
ryood 35:05798de92fb5 266 {
ryood 35:05798de92fb5 267 for (int i = 0; i < n; i++) {
ryood 35:05798de92fb5 268 LedBeat = 1;
ryood 38:90dde01f8255 269 Thread::wait(wait);
ryood 38:90dde01f8255 270 LedBeat = 0;
ryood 38:90dde01f8255 271
ryood 35:05798de92fb5 272 LedSyncIn = 1;
ryood 38:90dde01f8255 273 Thread::wait(wait);
ryood 38:90dde01f8255 274 LedSyncIn = 0;
ryood 38:90dde01f8255 275
ryood 35:05798de92fb5 276 LedSyncOut = 1;
ryood 35:05798de92fb5 277 LedSyncOut = 0;
ryood 35:05798de92fb5 278 Thread::wait(wait);
ryood 35:05798de92fb5 279 }
ryood 33:eac518ea0f34 280 }
ryood 33:eac518ea0f34 281
ryood 0:2dcec10e9199 282 int main()
ryood 0:2dcec10e9199 283 {
ryood 27:b07a55935230 284 #if UART_TRACE
ryood 27:b07a55935230 285 printf("\r\n\n%s %s\r\n", TITLE_STR1, TITLE_STR2);
ryood 27:b07a55935230 286 #endif
ryood 15:8f674acdac03 287
ryood 35:05798de92fb5 288 // LEDs Check
ryood 35:05798de92fb5 289 LedsCheck(4, 100); // 4 counts, 100ms cycle
ryood 35:05798de92fb5 290
ryood 21:a527f51381d6 291 SpiMAD8402.format(8, 0);
ryood 21:a527f51381d6 292 SpiMAD8402.frequency(AD8402_SPI_SPEED);
ryood 17:a5d9908bd456 293
ryood 26:866d672ba446 294 SpiMAdc.format(8, 0);
ryood 26:866d672ba446 295 SpiMAdc.frequency(MCP3008_SPI_SPEED);
ryood 36:3543a352b9d4 296
ryood 36:3543a352b9d4 297 SyncIn.mode(PullDown);
ryood 37:85eb8e38cac8 298 AutoRunSw.mode(PullUp);
ryood 15:8f674acdac03 299
ryood 17:a5d9908bd456 300 frequency = 100.0f;
ryood 0:2dcec10e9199 301 amplitude = 1.0f;
ryood 29:947992b9904f 302 noiseAmplitude = 1.0f;
ryood 17:a5d9908bd456 303 bpm = 120.0f;
ryood 17:a5d9908bd456 304
ryood 25:b4977c7e0db7 305 readParams();
ryood 11:7e11404adca0 306
ryood 3:f89b400cfe57 307 ticks = 0;
ryood 2:8dff77a1ee4d 308 Ticker samplingTicker;
ryood 17:a5d9908bd456 309 samplingTicker.attach(&update, (1.0f/ENVELOPE_UPDATE_RATE));
ryood 33:eac518ea0f34 310
ryood 33:eac518ea0f34 311 // Sync Interrupt
ryood 35:05798de92fb5 312 SyncIn.rise(&syncInFunction);
ryood 35:05798de92fb5 313 SyncIn.mode(PullDown);
ryood 11:7e11404adca0 314
ryood 3:f89b400cfe57 315 for (;;) {
ryood 13:43a43da257e3 316 #if (PIN_CHECK)
ryood 26:866d672ba446 317 Dout3 = 1;
ryood 15:8f674acdac03 318 #endif
ryood 25:b4977c7e0db7 319
ryood 25:b4977c7e0db7 320 readParams();
ryood 25:b4977c7e0db7 321
ryood 13:43a43da257e3 322 #if (PIN_CHECK)
ryood 26:866d672ba446 323 Dout3 = 0;
ryood 15:8f674acdac03 324 #endif
ryood 11:7e11404adca0 325
ryood 32:41cda5ad45e4 326
ryood 11:7e11404adca0 327 #if UART_TRACE
ryood 6:897d6392b408 328 printf("%.1f\t%d\t", bpm, envelopeLength);
ryood 11:7e11404adca0 329
ryood 31:3c7e1cd0d947 330 printf("| %d\t%d\t", amplitudeParam.attack, amplitudeParam.release);
ryood 6:897d6392b408 331 printf("%.2f\t%.2f\t%.2f\t", amplitudeParam.v0, amplitudeParam.v1, amplitudeParam.v2);
ryood 6:897d6392b408 332 printf("%.2f\t%.2f\t", amplitudeParam.attackTauRatio, amplitudeParam.releaseTauRatio);
ryood 6:897d6392b408 333
ryood 31:3c7e1cd0d947 334 printf("| %d\t%d\t", frequencyParam.attack, frequencyParam.release);
ryood 6:897d6392b408 335 printf("%.2f\t%.2f\t%.2f\t", frequencyParam.v0, frequencyParam.v1, frequencyParam.v2);
ryood 29:947992b9904f 336 printf("%.2f\t%.2f\t", frequencyParam.attackTauRatio, frequencyParam.releaseTauRatio);
ryood 29:947992b9904f 337
ryood 31:3c7e1cd0d947 338 printf("| %d\t%d\t", noiseAmplitudeParam.attack, noiseAmplitudeParam.release);
ryood 29:947992b9904f 339 printf("%.2f\t%.2f\t%.2f\t", noiseAmplitudeParam.v0, noiseAmplitudeParam.v1, noiseAmplitudeParam.v2);
ryood 32:41cda5ad45e4 340 printf("%.2f\t%.2f\t", noiseAmplitudeParam.attackTauRatio, noiseAmplitudeParam.releaseTauRatio);
ryood 37:85eb8e38cac8 341
ryood 37:85eb8e38cac8 342 printf("| AutoRun:%d\t", int(AutoRunSw));
ryood 11:7e11404adca0 343 #endif
ryood 11:7e11404adca0 344
ryood 32:41cda5ad45e4 345 PWMon.check();
ryood 32:41cda5ad45e4 346
ryood 13:43a43da257e3 347 Thread::wait(1);
ryood 3:f89b400cfe57 348 }
ryood 0:2dcec10e9199 349 }