Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of TAU_ZOOLOG_Chirp_Generator by
predefined_output.h@9:6d4136d9c074, 2017-07-16 (annotated)
- Committer:
- Arkadi
- Date:
- Sun Jul 16 12:39:53 2017 +0000
- Revision:
- 9:6d4136d9c074
- Parent:
- 3:25cd717ad782
Small fixes to UI
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| TauZoolog | 3:25cd717ad782 | 1 | // Predefined output procedure |
| TauZoolog | 3:25cd717ad782 | 2 | |
| TauZoolog | 3:25cd717ad782 | 3 | inline void predefined_output(void) |
| TauZoolog | 3:25cd717ad782 | 4 | { |
| TauZoolog | 3:25cd717ad782 | 5 | int i; |
| TauZoolog | 3:25cd717ad782 | 6 | uint32_t ADCValue; |
| TauZoolog | 3:25cd717ad782 | 7 | |
| TauZoolog | 3:25cd717ad782 | 8 | // Read ADC input |
| TauZoolog | 3:25cd717ad782 | 9 | // ADCFloat=((uint16_t)(hadc1.Instance->DR) * ADC2Float)-1.0f; |
| TauZoolog | 3:25cd717ad782 | 10 | ADCValue = (uint32_t)hadc1.Instance->DR; |
| TauZoolog | 3:25cd717ad782 | 11 | |
| TauZoolog | 3:25cd717ad782 | 12 | // Read ADC input |
| TauZoolog | 3:25cd717ad782 | 13 | ADCFloat=(ADCValue * ADC2Float)-1.0f; |
| TauZoolog | 3:25cd717ad782 | 14 | // ADCFloat=(float)(hadc1.Instance->DR); |
| TauZoolog | 3:25cd717ad782 | 15 | |
| TauZoolog | 3:25cd717ad782 | 16 | // toggle pin PA_6 -- D12, Loop frequency indicator |
| TauZoolog | 3:25cd717ad782 | 17 | mytoggle = ! mytoggle; |
| TauZoolog | 3:25cd717ad782 | 18 | |
| TauZoolog | 3:25cd717ad782 | 19 | if( ADCValue > ADCValueMax) { |
| TauZoolog | 3:25cd717ad782 | 20 | ADCValueMax = ADCValue; |
| TauZoolog | 3:25cd717ad782 | 21 | // printf("ADCValueMin = %d; ADCValueMax = %d; ADCValueDelta = %d\n", ADCValueMin, ADCValueMax, ADCValueMax - ADCValueMin); |
| TauZoolog | 3:25cd717ad782 | 22 | } |
| TauZoolog | 3:25cd717ad782 | 23 | if( ADCValue < ADCValueMin) { |
| TauZoolog | 3:25cd717ad782 | 24 | ADCValueMin = ADCValue; |
| TauZoolog | 3:25cd717ad782 | 25 | // printf("ADCValueMin = %d; ADCValueMax = %d; ADCValueDelta = %d\n", ADCValueMin, ADCValueMax, ADCValueMax - ADCValueMin); |
| TauZoolog | 3:25cd717ad782 | 26 | } |
| TauZoolog | 3:25cd717ad782 | 27 | |
| TauZoolog | 3:25cd717ad782 | 28 | ////////////////////////////////////////////////////// |
| TauZoolog | 3:25cd717ad782 | 29 | // Apply Filter to input // |
| TauZoolog | 3:25cd717ad782 | 30 | ////////////////////////////////////////////////////// |
| TauZoolog | 3:25cd717ad782 | 31 | if (use_filter_with_predefined_output) { |
| TauZoolog | 3:25cd717ad782 | 32 | LLastInput[0] = LastInput[0]; |
| TauZoolog | 3:25cd717ad782 | 33 | LastInput[0] = CurrInput[0]; |
| TauZoolog | 3:25cd717ad782 | 34 | CurrInput[0] = ADCFloat; |
| TauZoolog | 3:25cd717ad782 | 35 | for (i=1; i <= NumSectionsHP; i++) { |
| TauZoolog | 3:25cd717ad782 | 36 | LLastInput[i] = LastInput[i]; |
| TauZoolog | 3:25cd717ad782 | 37 | LastInput[i] = CurrInput[i]; |
| TauZoolog | 3:25cd717ad782 | 38 | CurrInput[i] = SOSMatHP[i-1][0]*CurrInput[i-1] + SOSMatHP[i-1][1]*LastInput[i-1] + |
| TauZoolog | 3:25cd717ad782 | 39 | SOSMatHP[i-1][2]*LLastInput[i-1] - |
| TauZoolog | 3:25cd717ad782 | 40 | SOSMatHP[i-1][4]*LastInput[i] - SOSMatHP[i-1][5]*LLastInput[i]; |
| TauZoolog | 3:25cd717ad782 | 41 | ADCFloatFiltered = CurrInput[i]; |
| TauZoolog | 3:25cd717ad782 | 42 | } |
| TauZoolog | 3:25cd717ad782 | 43 | |
| TauZoolog | 3:25cd717ad782 | 44 | ADCFloatFiltered = ADCFloatFiltered * GscaleHP; |
| TauZoolog | 3:25cd717ad782 | 45 | } else { |
| TauZoolog | 3:25cd717ad782 | 46 | ADCFloatFiltered = ADCFloat; |
| TauZoolog | 3:25cd717ad782 | 47 | } |
| TauZoolog | 3:25cd717ad782 | 48 | |
| TauZoolog | 3:25cd717ad782 | 49 | if((ADCValueMax - ADCValueMin) > signal_low_threshold) { |
| Arkadi | 9:6d4136d9c074 | 50 | startPredefinedOutput = 1; |
| TauZoolog | 3:25cd717ad782 | 51 | } |
| TauZoolog | 3:25cd717ad782 | 52 | |
| TauZoolog | 3:25cd717ad782 | 53 | if (startPredefinedOutput == 0 ) { |
| TauZoolog | 3:25cd717ad782 | 54 | *(__IO uint32_t *) Dac_Reg = (uint16_t)Float2ADC; |
| TauZoolog | 3:25cd717ad782 | 55 | |
| TauZoolog | 3:25cd717ad782 | 56 | } else { |
| TauZoolog | 3:25cd717ad782 | 57 | // Predefined Output |
| TauZoolog | 3:25cd717ad782 | 58 | // printf("ADCValueMin = %d; ADCValueMax = %d; ADCValueDelta = %d\n", ADCValueMin, ADCValueMax, ADCValueMax - ADCValueMin); |
| TauZoolog | 3:25cd717ad782 | 59 | |
| TauZoolog | 3:25cd717ad782 | 60 | //printf("play predefined sound\n"); |
| TauZoolog | 3:25cd717ad782 | 61 | for (i=0; i < AMOUNT_OF_SIGNIFICANT_SAMPLES; i++ ) { |
| TauZoolog | 3:25cd717ad782 | 62 | // toggle pin PA_6 -- D12, Loop frequency indicator |
| TauZoolog | 3:25cd717ad782 | 63 | mytoggle = ! mytoggle; |
| TauZoolog | 3:25cd717ad782 | 64 | //OutputADCFloat = scaled_sounddata[i]; |
| TauZoolog | 3:25cd717ad782 | 65 | //OutputADCFloat = (sounddata[i] * scale_for_predefined_output); |
| TauZoolog | 3:25cd717ad782 | 66 | // ADCValueOut=(uint16_t)(((sounddata[i] * scale_for_predefined_output) + 1.0f) * Float2ADC); |
| TauZoolog | 3:25cd717ad782 | 67 | ADCValueOut=(uint16_t)((scaled_sounddata[i] + 1.0f) * Float2ADC); |
| TauZoolog | 3:25cd717ad782 | 68 | // Output value using DAC |
| TauZoolog | 3:25cd717ad782 | 69 | // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut); |
| TauZoolog | 3:25cd717ad782 | 70 | *(__IO uint32_t *) Dac_Reg = ADCValueOut; |
| TauZoolog | 3:25cd717ad782 | 71 | |
| TauZoolog | 3:25cd717ad782 | 72 | // Delay processor to achieve SAMPLING_FREQUENCY (500KHz) |
| TauZoolog | 3:25cd717ad782 | 73 | wait_us(sampling_frequency_delay); // delay in microseconds |
| TauZoolog | 3:25cd717ad782 | 74 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 75 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 76 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 77 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 78 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 79 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 80 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 81 | NOP(); |
| TauZoolog | 3:25cd717ad782 | 82 | #if 1 |
| TauZoolog | 3:25cd717ad782 | 83 | NumCycles++; |
| TauZoolog | 3:25cd717ad782 | 84 | if((NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT > 0) && (NumCycles % NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT == 0)) { |
| TauZoolog | 3:25cd717ad782 | 85 | // printf("Check keyboard input. Cycle: %d\n", NumCycles); |
| TauZoolog | 3:25cd717ad782 | 86 | UserButtonPressed = checkKeyboardInput(); |
| TauZoolog | 3:25cd717ad782 | 87 | } |
| TauZoolog | 3:25cd717ad782 | 88 | #endif |
| TauZoolog | 3:25cd717ad782 | 89 | } |
| TauZoolog | 3:25cd717ad782 | 90 | wait_us(delay_after_signal_transmission); |
| Arkadi | 9:6d4136d9c074 | 91 | //num_back_to_normal = NUM_OF_CYCLES_BACK_TO_NORMAL; |
| TauZoolog | 3:25cd717ad782 | 92 | startPredefinedOutput = 0; |
| TauZoolog | 3:25cd717ad782 | 93 | ADCValueMax = 0; |
| TauZoolog | 3:25cd717ad782 | 94 | ADCValueMin = 0xfff; |
| TauZoolog | 3:25cd717ad782 | 95 | } |
| TauZoolog | 3:25cd717ad782 | 96 | |
| TauZoolog | 3:25cd717ad782 | 97 | } |
| TauZoolog | 3:25cd717ad782 | 98 | |
| TauZoolog | 3:25cd717ad782 | 99 | inline void test_output() |
| TauZoolog | 3:25cd717ad782 | 100 | { |
| TauZoolog | 3:25cd717ad782 | 101 | int i; |
| TauZoolog | 3:25cd717ad782 | 102 | |
| TauZoolog | 3:25cd717ad782 | 103 | for (i=0; i < AMOUNT_OF_SIGNIFICANT_SAMPLES; i++ ) { |
| TauZoolog | 3:25cd717ad782 | 104 | // toggle pin PA_6 -- D12, Loop frequency indicator |
| TauZoolog | 3:25cd717ad782 | 105 | mytoggle = ! mytoggle; |
| TauZoolog | 3:25cd717ad782 | 106 | //OutputADCFloat = scaled_sounddata[i]; |
| TauZoolog | 3:25cd717ad782 | 107 | OutputADCFloat = sounddata[i] * scale_for_predefined_output; |
| TauZoolog | 3:25cd717ad782 | 108 | ADCValueOut=(uint16_t)((OutputADCFloat + 1.0f) * Float2ADC); |
| TauZoolog | 3:25cd717ad782 | 109 | // Output value using DAC |
| TauZoolog | 3:25cd717ad782 | 110 | // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut); |
| TauZoolog | 3:25cd717ad782 | 111 | *(__IO uint32_t *) Dac_Reg = ADCValueOut; |
| TauZoolog | 3:25cd717ad782 | 112 | |
| TauZoolog | 3:25cd717ad782 | 113 | // Delay processor to achieve SAMPLING_FREQUENCY (500KHz) |
| TauZoolog | 3:25cd717ad782 | 114 | wait_us(sampling_frequency_delay); // delay in microseconds |
| TauZoolog | 3:25cd717ad782 | 115 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 116 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 117 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 118 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 119 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 120 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 121 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 122 | // NOP(); |
| TauZoolog | 3:25cd717ad782 | 123 | #if 1 |
| TauZoolog | 3:25cd717ad782 | 124 | NumCycles++; |
| TauZoolog | 3:25cd717ad782 | 125 | if((NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT > 0) && (NumCycles % NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT == 0)) { |
| TauZoolog | 3:25cd717ad782 | 126 | // printf("Check keyboard input. Cycle: %d\n", NumCycles); |
| TauZoolog | 3:25cd717ad782 | 127 | UserButtonPressed = checkKeyboardInput(); |
| TauZoolog | 3:25cd717ad782 | 128 | } |
| TauZoolog | 3:25cd717ad782 | 129 | #endif |
| TauZoolog | 3:25cd717ad782 | 130 | } |
| TauZoolog | 3:25cd717ad782 | 131 | wait_us(delay_after_signal_transmission); |
| TauZoolog | 3:25cd717ad782 | 132 | } |
| TauZoolog | 3:25cd717ad782 | 133 |
