IEC60601-1-8 Audible Alert Generator

Dependencies:   mbed

See here for more info.

Committer:
wim
Date:
Fri May 18 19:51:12 2012 +0000
Revision:
0:07767204347b
First Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:07767204347b 1 /****************************************************************
wim 0:07767204347b 2 * IEC601601-1-8
wim 0:07767204347b 3 *
wim 0:07767204347b 4 * This modules provides the IEC Medical Alert tones.
wim 0:07767204347b 5 *
wim 0:07767204347b 6 *
wim 0:07767204347b 7 * Copyright(C) 2007, NXP Semiconductor
wim 0:07767204347b 8 * All rights reserved.
wim 0:07767204347b 9 *
wim 0:07767204347b 10 * Port to mbed 2012 (WH)
wim 0:07767204347b 11 ****************************************************************/
wim 0:07767204347b 12 #include "mbed.h"
wim 0:07767204347b 13 #include "IEC60601-1-8.h"
wim 0:07767204347b 14
wim 0:07767204347b 15 #define DEBUG_ON 0 // Activate Testpins for timing
wim 0:07767204347b 16 #if(DEBUG_ON)
wim 0:07767204347b 17 // Activate Testpins for timing
wim 0:07767204347b 18 DigitalOut TimInt(p19);
wim 0:07767204347b 19 DigitalOut SeqInt(p20);
wim 0:07767204347b 20 #endif
wim 0:07767204347b 21
wim 0:07767204347b 22 #define AMPL 200 // Output Amplitude
wim 0:07767204347b 23 #define PI 3.1415926
wim 0:07767204347b 24 #define FSAMPLE 25000 // Timer Reload Frequency
wim 0:07767204347b 25
wim 0:07767204347b 26
wim 0:07767204347b 27 // define rise and fall time of tones
wim 0:07767204347b 28 #define HP_RISE 12 // rise time setting for high priority tones (12 = ~20ms Tr)
wim 0:07767204347b 29 // decrease to make slower, increase to make faster
wim 0:07767204347b 30 #define HP_FALL 12 // fall time setting for high priority tones (12 = ~20ms Tf)
wim 0:07767204347b 31 // decrease to make slower, increase to make faster
wim 0:07767204347b 32 #define MP_RISE 8 // rise time setting for high priority tones (8 = ~30ms Tr)
wim 0:07767204347b 33 // decrease to make slower, increase to make faster
wim 0:07767204347b 34 #define MP_FALL 8 // fall time setting for high priority tones (8 = ~30ms Tf)
wim 0:07767204347b 35 // decrease to make slower, increase to make faster
wim 0:07767204347b 36
wim 0:07767204347b 37
wim 0:07767204347b 38 Note_Type const _TuneSequence [][5] = {{C4,C4,C4,C4,C4}, // general
wim 0:07767204347b 39 {C5,B4,A4,G4,F4}, // oxygen
wim 0:07767204347b 40 {C4,A4,F4,A4,F4}, // ventilation
wim 0:07767204347b 41 {C4,E4,G4,G4,C5}, // cardiovascular
wim 0:07767204347b 42 {C4,D4,E4,F4,G4}, // temperature
wim 0:07767204347b 43 {C5,D4,G4,C5,D4}, // drug_delivery
wim 0:07767204347b 44 {C4,Fsharp4,C4,C4,Fsharp4}, // perfusion
wim 0:07767204347b 45 {C5,C4,C4,C5,C4}, // power_fail
wim 0:07767204347b 46 // {E4,C4,0,0,0}}; // low_alarm
wim 0:07767204347b 47 {E4,C4,C4,C4,C4}}; // low_alarm
wim 0:07767204347b 48
wim 0:07767204347b 49 float const _FreqArray[][5]= {{261.626,523.252,784.878,1046.50,1308.13}, // C4
wim 0:07767204347b 50 {293.67,587.34,881.01,1174.7,1468.3}, // D4
wim 0:07767204347b 51 {329.63,659.26,988.89,1318.52,1648.15}, // E4
wim 0:07767204347b 52 {349.23,698.46,1047.69,1396.9,1746.15}, // F4
wim 0:07767204347b 53 {369.99,739.98,1109.97,1479.96,1849.95}, // FSharp4
wim 0:07767204347b 54 {392.00,784.00,1176.0,1568.0,1960.0}, // G4
wim 0:07767204347b 55 {440.000,880.00,1320.0,1760.00,2200.00}, // A4
wim 0:07767204347b 56 {493.88,987.76,1481.64,1975.5,2469.4}, // B4
wim 0:07767204347b 57 {523.251,1046.50,1569.756,2093.00,2616.25}}; // C5
wim 0:07767204347b 58
wim 0:07767204347b 59 unsigned char _ToneWeights[] = {255,255,255,255,255}; // used for test and
wim 0:07767204347b 60 // adjusting harmonic levels
wim 0:07767204347b 61
wim 0:07767204347b 62 struct wave _Waves[9][5]; // 'Waves' holds tone gen coefficients and variables
wim 0:07767204347b 63 // the coefficients are calculated during initialization.
wim 0:07767204347b 64
wim 0:07767204347b 65
wim 0:07767204347b 66 IEC60601::IEC60601() {
wim 0:07767204347b 67
wim 0:07767204347b 68 _InitDAC();
wim 0:07767204347b 69 _InitSequencer();
wim 0:07767204347b 70 _InitToneCoefArray();
wim 0:07767204347b 71 _ticker.attach_us(this, &IEC60601::_TimerInteruptHandler, 40);
wim 0:07767204347b 72 };
wim 0:07767204347b 73
wim 0:07767204347b 74
wim 0:07767204347b 75
wim 0:07767204347b 76 void IEC60601::TurnOnAlarm(Prio_Type priority, Alarm_Type alarm_type) {
wim 0:07767204347b 77
wim 0:07767204347b 78 _priority = priority;
wim 0:07767204347b 79 _alarm_type = alarm_type;
wim 0:07767204347b 80
wim 0:07767204347b 81 _mscount = 0;
wim 0:07767204347b 82 _sequence = 1;
wim 0:07767204347b 83
wim 0:07767204347b 84 }
wim 0:07767204347b 85
wim 0:07767204347b 86 void IEC60601::TurnOffAlarm(void) {
wim 0:07767204347b 87 _sequence = 0;
wim 0:07767204347b 88 }
wim 0:07767204347b 89
wim 0:07767204347b 90 void IEC60601::TestAlarm(Note_Type active_note, int w0, int w1, int w2, int w3, int w4) {
wim 0:07767204347b 91
wim 0:07767204347b 92 _priority = TEST;
wim 0:07767204347b 93
wim 0:07767204347b 94 _active_note = active_note;
wim 0:07767204347b 95 _ToneWeights[0]= w0;
wim 0:07767204347b 96 _ToneWeights[1]= w1;
wim 0:07767204347b 97 _ToneWeights[2]= w2;
wim 0:07767204347b 98 _ToneWeights[3]= w3;
wim 0:07767204347b 99 _ToneWeights[4]= w4;
wim 0:07767204347b 100
wim 0:07767204347b 101 _mscount = 0;
wim 0:07767204347b 102 _sequence = 1;
wim 0:07767204347b 103 }
wim 0:07767204347b 104
wim 0:07767204347b 105
wim 0:07767204347b 106 // This modules provides the note sequencers and envelope control
wim 0:07767204347b 107 // functions for the alarm notes for the IEC Medical Alert tone demo.
wim 0:07767204347b 108
wim 0:07767204347b 109 void IEC60601::_InitSequencer(void) {
wim 0:07767204347b 110 _envelope_on = false;
wim 0:07767204347b 111 _envelope_off = false;
wim 0:07767204347b 112 }
wim 0:07767204347b 113
wim 0:07767204347b 114
wim 0:07767204347b 115 void IEC60601::_TurnOnNote(void) {
wim 0:07767204347b 116 _envelope = 0;
wim 0:07767204347b 117 _note_on = true;
wim 0:07767204347b 118 _envelope_on = true;
wim 0:07767204347b 119 }
wim 0:07767204347b 120
wim 0:07767204347b 121 void IEC60601::_TurnOffNote(void) {
wim 0:07767204347b 122 _note_on = false;
wim 0:07767204347b 123 }
wim 0:07767204347b 124
wim 0:07767204347b 125
wim 0:07767204347b 126 void IEC60601::_HighPriSequence (void) {
wim 0:07767204347b 127
wim 0:07767204347b 128 switch (_mscount) {
wim 0:07767204347b 129 case 1:
wim 0:07767204347b 130 _active_note = _TuneSequence [_alarm_type][0]; // 1rst note of sequence
wim 0:07767204347b 131 _note_level = 170;
wim 0:07767204347b 132 _TurnOnNote();
wim 0:07767204347b 133 break;
wim 0:07767204347b 134 case 145: // 145 ms (trise + tduration)
wim 0:07767204347b 135 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 136 break;
wim 0:07767204347b 137 case 224:
wim 0:07767204347b 138 _active_note = _TuneSequence [_alarm_type][1]; // 2nd note of sequence
wim 0:07767204347b 139 _note_level = 255;
wim 0:07767204347b 140 _TurnOnNote();
wim 0:07767204347b 141 break;
wim 0:07767204347b 142 case 368:
wim 0:07767204347b 143 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 144 break;
wim 0:07767204347b 145 case 447:
wim 0:07767204347b 146 _active_note = _TuneSequence [_alarm_type][2]; // 3rd note of sequence
wim 0:07767204347b 147 _note_level = 255;
wim 0:07767204347b 148 _TurnOnNote();
wim 0:07767204347b 149 break;
wim 0:07767204347b 150 case 591:
wim 0:07767204347b 151 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 152 break;
wim 0:07767204347b 153 case 835:
wim 0:07767204347b 154 _active_note = _TuneSequence [_alarm_type][3]; // 4th note of sequence
wim 0:07767204347b 155 _note_level = 255;
wim 0:07767204347b 156 _TurnOnNote();
wim 0:07767204347b 157 break;
wim 0:07767204347b 158 case 979:
wim 0:07767204347b 159 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 160 break;
wim 0:07767204347b 161 case 1058:
wim 0:07767204347b 162 _active_note = _TuneSequence [_alarm_type][4]; // 5th note of sequence
wim 0:07767204347b 163 _note_level = 255;
wim 0:07767204347b 164 _TurnOnNote();
wim 0:07767204347b 165 break;
wim 0:07767204347b 166 case 1202:
wim 0:07767204347b 167 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 168 break;
wim 0:07767204347b 169
wim 0:07767204347b 170 case 1250: // allows for fall time of envelope
wim 0:07767204347b 171 if (_sequence == 2) { // Done after one repeat
wim 0:07767204347b 172 _sequence = 0;
wim 0:07767204347b 173 _mscount = 0;
wim 0:07767204347b 174 }
wim 0:07767204347b 175 break;
wim 0:07767204347b 176 case 1750:
wim 0:07767204347b 177 if (_sequence == 1) { // If this is the first time through, repeat
wim 0:07767204347b 178 _sequence = 2;
wim 0:07767204347b 179 }
wim 0:07767204347b 180 _mscount = 0;
wim 0:07767204347b 181 break;
wim 0:07767204347b 182 }
wim 0:07767204347b 183 }
wim 0:07767204347b 184
wim 0:07767204347b 185
wim 0:07767204347b 186 void IEC60601::_MedPriSequence (void) {
wim 0:07767204347b 187
wim 0:07767204347b 188 switch (_mscount) {
wim 0:07767204347b 189 case 1:
wim 0:07767204347b 190 _active_note = _TuneSequence [_alarm_type][0];
wim 0:07767204347b 191 _note_level = 170;
wim 0:07767204347b 192 _TurnOnNote();
wim 0:07767204347b 193 break;
wim 0:07767204347b 194 case 221: // 221 ms (trise(30) + tduration(190)+ start(1))
wim 0:07767204347b 195 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 196 break;
wim 0:07767204347b 197 case 441:
wim 0:07767204347b 198 _active_note = _TuneSequence [_alarm_type][1]; // 2nd note of sequence
wim 0:07767204347b 199 _note_level = 255;
wim 0:07767204347b 200 _TurnOnNote();
wim 0:07767204347b 201 break;
wim 0:07767204347b 202 case 661:
wim 0:07767204347b 203 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 204 break;
wim 0:07767204347b 205 case 881:
wim 0:07767204347b 206 _active_note = _TuneSequence [_alarm_type][2]; // 3rd note of sequence
wim 0:07767204347b 207 _note_level = 255;
wim 0:07767204347b 208 _TurnOnNote();
wim 0:07767204347b 209 break;
wim 0:07767204347b 210 case 1101:
wim 0:07767204347b 211 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 212 break;
wim 0:07767204347b 213 case 1151: // allows for fall time of envelope
wim 0:07767204347b 214 _sequence = 0; // Medium Prio does not repeat
wim 0:07767204347b 215 _mscount = 0;
wim 0:07767204347b 216 }
wim 0:07767204347b 217
wim 0:07767204347b 218 }
wim 0:07767204347b 219
wim 0:07767204347b 220 void IEC60601::_LowPriSequence (void) {
wim 0:07767204347b 221
wim 0:07767204347b 222 switch (_mscount) {
wim 0:07767204347b 223 case 1:
wim 0:07767204347b 224 _active_note = _TuneSequence [_alarm_type][0];
wim 0:07767204347b 225 _note_level = 170;
wim 0:07767204347b 226 _TurnOnNote();
wim 0:07767204347b 227 break;
wim 0:07767204347b 228 case 261: // 261 ms (trise(35) + tduration(225))
wim 0:07767204347b 229 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 230 break;
wim 0:07767204347b 231 case 521:
wim 0:07767204347b 232 _active_note = _TuneSequence [_alarm_type][1]; // 2nd note of sequence
wim 0:07767204347b 233 _note_level = 255;
wim 0:07767204347b 234 _TurnOnNote();
wim 0:07767204347b 235 break;
wim 0:07767204347b 236 case 781:
wim 0:07767204347b 237 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 238 break;
wim 0:07767204347b 239 case 816: // Low Prio does not repeat
wim 0:07767204347b 240 _sequence = 0;
wim 0:07767204347b 241 _mscount = 0;
wim 0:07767204347b 242 }
wim 0:07767204347b 243 }
wim 0:07767204347b 244
wim 0:07767204347b 245 void IEC60601::_TestSequence (void) {
wim 0:07767204347b 246
wim 0:07767204347b 247 switch (_mscount) {
wim 0:07767204347b 248 case 1:
wim 0:07767204347b 249 // _active_note = _TuneSequence [_alarm_type][0];
wim 0:07767204347b 250 _note_level = 255;
wim 0:07767204347b 251 _TurnOnNote();
wim 0:07767204347b 252 break;
wim 0:07767204347b 253
wim 0:07767204347b 254 case 1000:
wim 0:07767204347b 255 _note_on = false; // begin decay as note turns "off"
wim 0:07767204347b 256 break;
wim 0:07767204347b 257
wim 0:07767204347b 258 case 1035:
wim 0:07767204347b 259
wim 0:07767204347b 260 for (int i=0; i<5; i++) { // Restore weights
wim 0:07767204347b 261 _ToneWeights[i] = 255;
wim 0:07767204347b 262 };
wim 0:07767204347b 263 _sequence = 0; // Test does not repeat
wim 0:07767204347b 264 _mscount = 0;
wim 0:07767204347b 265 break;
wim 0:07767204347b 266 }
wim 0:07767204347b 267 }
wim 0:07767204347b 268
wim 0:07767204347b 269 void IEC60601::_EnvelopeControl(void) {
wim 0:07767204347b 270
wim 0:07767204347b 271 if (_note_on) {
wim 0:07767204347b 272 if (_envelope >= _note_level) {
wim 0:07767204347b 273 _envelope = _note_level;
wim 0:07767204347b 274 }
wim 0:07767204347b 275 else {
wim 0:07767204347b 276 if (_priority == HIGH) {
wim 0:07767204347b 277 _envelope += HP_RISE; // high priority risetime control
wim 0:07767204347b 278 }
wim 0:07767204347b 279 else {
wim 0:07767204347b 280 _envelope += MP_RISE; // Medium priority risetime control
wim 0:07767204347b 281 }
wim 0:07767204347b 282 }
wim 0:07767204347b 283 }
wim 0:07767204347b 284 else {
wim 0:07767204347b 285 if (_envelope > 0) {
wim 0:07767204347b 286 if (_priority == HIGH) {
wim 0:07767204347b 287 _envelope -= HP_FALL; // high priority falltime control
wim 0:07767204347b 288 }
wim 0:07767204347b 289 else {
wim 0:07767204347b 290 _envelope -= MP_FALL; // Medium priority falltime control
wim 0:07767204347b 291 }
wim 0:07767204347b 292 }
wim 0:07767204347b 293 }
wim 0:07767204347b 294 if ((_envelope <= 0) && (!_note_on) && (_envelope_on) ) {
wim 0:07767204347b 295 _envelope = 0;
wim 0:07767204347b 296 _envelope_off = true; // synchronize with zero cross
wim 0:07767204347b 297 }
wim 0:07767204347b 298 }
wim 0:07767204347b 299
wim 0:07767204347b 300
wim 0:07767204347b 301
wim 0:07767204347b 302 // This module generates multiple sine waves that are combined
wim 0:07767204347b 303 // to generate tones that contain a fundamental and 4 harmonics
wim 0:07767204347b 304 // per the IEC60601-1-8 Medical Alarm specification
wim 0:07767204347b 305
wim 0:07767204347b 306 void IEC60601::_InitDAC(void) {
wim 0:07767204347b 307
wim 0:07767204347b 308 LPC_PINCON->PINSEL1 &= ~0x00300000; // enable DAC P0.26
wim 0:07767204347b 309 LPC_PINCON->PINSEL1 |= 0x00200000;
wim 0:07767204347b 310 LPC_PINCON->PINMODE1 &= ~0x00300000; // disable Rs on P0.26
wim 0:07767204347b 311 LPC_PINCON->PINMODE1 |= 0x00200000;
wim 0:07767204347b 312
wim 0:07767204347b 313 LPC_DAC->DACR = 0x8000; // init DAC to half on voltage
wim 0:07767204347b 314 }
wim 0:07767204347b 315
wim 0:07767204347b 316
wim 0:07767204347b 317 void IEC60601::_InitToneCoefArray(void) { // generate the coefficients and init array for tones
wim 0:07767204347b 318
wim 0:07767204347b 319 unsigned char n;
wim 0:07767204347b 320 unsigned char j;
wim 0:07767204347b 321
wim 0:07767204347b 322 for (j=0;j<9;j++) // Initialize all nine scale tones (C4-C5)
wim 0:07767204347b 323 {
wim 0:07767204347b 324 for (n=0;n<5;n++) // fundamental and 4 harmonics for IEC60601-1-8
wim 0:07767204347b 325 {
wim 0:07767204347b 326 _Waves[j][n].coef = ((cos (2*PI*(float)(_FreqArray[j][n]/FSAMPLE)))* 32768) ; // 2* taken out, put in final calc as a shift
wim 0:07767204347b 327 _Waves[j][n].y1 = 0;
wim 0:07767204347b 328 _Waves[j][n].y2 = ((sin (2*PI*(float)((_FreqArray[j][n]/FSAMPLE))) * AMPL * 32768)); // Try 8388608 (+8 bits) w/ long coef
wim 0:07767204347b 329 }
wim 0:07767204347b 330 }
wim 0:07767204347b 331 }
wim 0:07767204347b 332
wim 0:07767204347b 333
wim 0:07767204347b 334 void IEC60601::_GenerateMultiTone (struct wave *t) {
wim 0:07767204347b 335 long int y;
wim 0:07767204347b 336 int i;
wim 0:07767204347b 337 int env_weights;
wim 0:07767204347b 338 long int output;
wim 0:07767204347b 339 static long int output_old;
wim 0:07767204347b 340
wim 0:07767204347b 341 output = 0; // clear output accumulator
wim 0:07767204347b 342 for (i=0; i<5; i++) { // cycle through the 5 structures in the array
wim 0:07767204347b 343 y = ((t->coef *(long long)(t->y1)>>14)) - t->y2; // Goertzel Calculation
wim 0:07767204347b 344 t->y2 = t->y1; // store for next time
wim 0:07767204347b 345 t->y1 = y; // store for next time
wim 0:07767204347b 346 env_weights = _envelope * _ToneWeights[i]>>8;
wim 0:07767204347b 347 output += ((t->y1 * env_weights) >> 8); // sum fundamental and harmonics
wim 0:07767204347b 348 t++; // increment structure pointer
wim 0:07767204347b 349 }
wim 0:07767204347b 350
wim 0:07767204347b 351 //// DAC->DACR = ((output >> 10) & 0xFFC0) + 0x8000; // make unsigned and output to DAC
wim 0:07767204347b 352 ///// Adapt to mbed !!!!
wim 0:07767204347b 353 LPC_DAC->DACR = ((output >> 10) & 0xFFC0) + 0x8000; // make unsigned and output to DAC
wim 0:07767204347b 354
wim 0:07767204347b 355
wim 0:07767204347b 356 if ((output >= 0) && (output_old <= 0)) { // zero crossing detect
wim 0:07767204347b 357 if (_envelope_off && (!_note_on)) {
wim 0:07767204347b 358 _envelope_on = false; // sychronizes turn off with zero cross
wim 0:07767204347b 359 _envelope_off = false; // reset envelope flag
wim 0:07767204347b 360 }
wim 0:07767204347b 361 }
wim 0:07767204347b 362 output_old = output;
wim 0:07767204347b 363 }
wim 0:07767204347b 364
wim 0:07767204347b 365 #if(0)
wim 0:07767204347b 366 void IEC60601::_OutputTones(Note_Type note, unsigned char level) {
wim 0:07767204347b 367
wim 0:07767204347b 368 _note_level = level;
wim 0:07767204347b 369 _GenerateMultiTone (&Waves[note][0]);
wim 0:07767204347b 370 }
wim 0:07767204347b 371 #endif
wim 0:07767204347b 372
wim 0:07767204347b 373
wim 0:07767204347b 374 void IEC60601::_TimerInteruptHandler (void){
wim 0:07767204347b 375 static int timeval = 0;
wim 0:07767204347b 376
wim 0:07767204347b 377 #if(DEBUG_ON)
wim 0:07767204347b 378 // Activate Testpins for timing
wim 0:07767204347b 379 TimInt = 1;
wim 0:07767204347b 380 #endif
wim 0:07767204347b 381
wim 0:07767204347b 382 if (_envelope_on) {
wim 0:07767204347b 383 //Oude code
wim 0:07767204347b 384 // _OutputTones(_active_note, _note_level); // parameters are set in sequencer
wim 0:07767204347b 385
wim 0:07767204347b 386 _GenerateMultiTone (&_Waves[_active_note][0]); // parameters set in sequencer
wim 0:07767204347b 387 }
wim 0:07767204347b 388
wim 0:07767204347b 389 timeval++;
wim 0:07767204347b 390 if (timeval == 25) { // millisecond interval (@ 25 khz sample rate)
wim 0:07767204347b 391
wim 0:07767204347b 392 #if(DEBUG_ON)
wim 0:07767204347b 393 // Activate Testpins for timing
wim 0:07767204347b 394 SeqInt=1;
wim 0:07767204347b 395 #endif
wim 0:07767204347b 396 if (_sequence != 0) {
wim 0:07767204347b 397 switch (_priority) {
wim 0:07767204347b 398 case HIGH:
wim 0:07767204347b 399 _HighPriSequence();
wim 0:07767204347b 400 break;
wim 0:07767204347b 401 case MEDIUM:
wim 0:07767204347b 402 _MedPriSequence();
wim 0:07767204347b 403 break;
wim 0:07767204347b 404 case LOW:
wim 0:07767204347b 405 _LowPriSequence();
wim 0:07767204347b 406 break;
wim 0:07767204347b 407 case TEST:
wim 0:07767204347b 408 _TestSequence();
wim 0:07767204347b 409 break;
wim 0:07767204347b 410 }
wim 0:07767204347b 411 }
wim 0:07767204347b 412 timeval = 0; // clear interval counter
wim 0:07767204347b 413 _mscount++; // increment ms counter
wim 0:07767204347b 414 _EnvelopeControl();
wim 0:07767204347b 415
wim 0:07767204347b 416 #if(DEBUG_ON)
wim 0:07767204347b 417 // Activate Testpins for timing
wim 0:07767204347b 418 SeqInt=0;
wim 0:07767204347b 419 #endif
wim 0:07767204347b 420 }
wim 0:07767204347b 421
wim 0:07767204347b 422 #if(DEBUG_ON)
wim 0:07767204347b 423 // Activate Testpins for timing
wim 0:07767204347b 424 TimInt = 0;
wim 0:07767204347b 425 #endif
wim 0:07767204347b 426
wim 0:07767204347b 427 }
wim 0:07767204347b 428
wim 0:07767204347b 429
wim 0:07767204347b 430