Yossi_Students / Mbed 2 deprecated TAU_ZOOLOG_WAVE_Generator

Dependencies:   mbed

Fork of TAU_ZOOLOG_Chirp_Generator by Yossi_Students

Committer:
TauZoolog
Date:
Tue Jun 27 13:01:03 2017 +0000
Revision:
3:25cd717ad782
Child:
9:6d4136d9c074
Sasha Father did extensive work on user interface and code implementations for STM32F446 Setup. For reference design.

Who changed what in which revision?

UserRevisionLine numberNew 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) {
TauZoolog 3:25cd717ad782 50 if (num_back_to_normal == 0) {
TauZoolog 3:25cd717ad782 51 num_threshold_crossing++;
TauZoolog 3:25cd717ad782 52
TauZoolog 3:25cd717ad782 53 } else {
TauZoolog 3:25cd717ad782 54 num_back_to_normal--;
TauZoolog 3:25cd717ad782 55 num_threshold_crossing = 0;
TauZoolog 3:25cd717ad782 56 }
TauZoolog 3:25cd717ad782 57 if (num_threshold_crossing > num_of_cycles_to_detect_threshold_crossing) {
TauZoolog 3:25cd717ad782 58 // start transmission of predefined output signal
TauZoolog 3:25cd717ad782 59 startPredefinedOutput = 1;
TauZoolog 3:25cd717ad782 60 // printf("ADCFloatFiltered = %f\n", ADCFloatFiltered);
TauZoolog 3:25cd717ad782 61 }
TauZoolog 3:25cd717ad782 62 } else {
TauZoolog 3:25cd717ad782 63 num_threshold_crossing = 0;
TauZoolog 3:25cd717ad782 64 }
TauZoolog 3:25cd717ad782 65
TauZoolog 3:25cd717ad782 66 if (startPredefinedOutput == 0 ) {
TauZoolog 3:25cd717ad782 67 *(__IO uint32_t *) Dac_Reg = (uint16_t)Float2ADC;
TauZoolog 3:25cd717ad782 68
TauZoolog 3:25cd717ad782 69 } else {
TauZoolog 3:25cd717ad782 70 // Predefined Output
TauZoolog 3:25cd717ad782 71 // printf("ADCValueMin = %d; ADCValueMax = %d; ADCValueDelta = %d\n", ADCValueMin, ADCValueMax, ADCValueMax - ADCValueMin);
TauZoolog 3:25cd717ad782 72
TauZoolog 3:25cd717ad782 73 //printf("play predefined sound\n");
TauZoolog 3:25cd717ad782 74 for (i=0; i < AMOUNT_OF_SIGNIFICANT_SAMPLES; i++ ) {
TauZoolog 3:25cd717ad782 75 // toggle pin PA_6 -- D12, Loop frequency indicator
TauZoolog 3:25cd717ad782 76 mytoggle = ! mytoggle;
TauZoolog 3:25cd717ad782 77 //OutputADCFloat = scaled_sounddata[i];
TauZoolog 3:25cd717ad782 78 //OutputADCFloat = (sounddata[i] * scale_for_predefined_output);
TauZoolog 3:25cd717ad782 79 // ADCValueOut=(uint16_t)(((sounddata[i] * scale_for_predefined_output) + 1.0f) * Float2ADC);
TauZoolog 3:25cd717ad782 80 ADCValueOut=(uint16_t)((scaled_sounddata[i] + 1.0f) * Float2ADC);
TauZoolog 3:25cd717ad782 81 // Output value using DAC
TauZoolog 3:25cd717ad782 82 // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
TauZoolog 3:25cd717ad782 83 *(__IO uint32_t *) Dac_Reg = ADCValueOut;
TauZoolog 3:25cd717ad782 84
TauZoolog 3:25cd717ad782 85 // Delay processor to achieve SAMPLING_FREQUENCY (500KHz)
TauZoolog 3:25cd717ad782 86 wait_us(sampling_frequency_delay); // delay in microseconds
TauZoolog 3:25cd717ad782 87 NOP();
TauZoolog 3:25cd717ad782 88 NOP();
TauZoolog 3:25cd717ad782 89 NOP();
TauZoolog 3:25cd717ad782 90 NOP();
TauZoolog 3:25cd717ad782 91 NOP();
TauZoolog 3:25cd717ad782 92 NOP();
TauZoolog 3:25cd717ad782 93 NOP();
TauZoolog 3:25cd717ad782 94 NOP();
TauZoolog 3:25cd717ad782 95 #if 1
TauZoolog 3:25cd717ad782 96 NumCycles++;
TauZoolog 3:25cd717ad782 97 if((NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT > 0) && (NumCycles % NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT == 0)) {
TauZoolog 3:25cd717ad782 98 // printf("Check keyboard input. Cycle: %d\n", NumCycles);
TauZoolog 3:25cd717ad782 99 UserButtonPressed = checkKeyboardInput();
TauZoolog 3:25cd717ad782 100 }
TauZoolog 3:25cd717ad782 101 #endif
TauZoolog 3:25cd717ad782 102 }
TauZoolog 3:25cd717ad782 103 wait_us(delay_after_signal_transmission);
TauZoolog 3:25cd717ad782 104 num_back_to_normal = NUM_OF_CYCLES_BACK_TO_NORMAL;
TauZoolog 3:25cd717ad782 105 startPredefinedOutput = 0;
TauZoolog 3:25cd717ad782 106 ADCValueMax = 0;
TauZoolog 3:25cd717ad782 107 ADCValueMin = 0xfff;
TauZoolog 3:25cd717ad782 108 }
TauZoolog 3:25cd717ad782 109
TauZoolog 3:25cd717ad782 110 }
TauZoolog 3:25cd717ad782 111
TauZoolog 3:25cd717ad782 112 inline void test_output()
TauZoolog 3:25cd717ad782 113 {
TauZoolog 3:25cd717ad782 114 int i;
TauZoolog 3:25cd717ad782 115
TauZoolog 3:25cd717ad782 116 for (i=0; i < AMOUNT_OF_SIGNIFICANT_SAMPLES; i++ ) {
TauZoolog 3:25cd717ad782 117 // toggle pin PA_6 -- D12, Loop frequency indicator
TauZoolog 3:25cd717ad782 118 mytoggle = ! mytoggle;
TauZoolog 3:25cd717ad782 119 //OutputADCFloat = scaled_sounddata[i];
TauZoolog 3:25cd717ad782 120 OutputADCFloat = sounddata[i] * scale_for_predefined_output;
TauZoolog 3:25cd717ad782 121 ADCValueOut=(uint16_t)((OutputADCFloat + 1.0f) * Float2ADC);
TauZoolog 3:25cd717ad782 122 // Output value using DAC
TauZoolog 3:25cd717ad782 123 // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
TauZoolog 3:25cd717ad782 124 *(__IO uint32_t *) Dac_Reg = ADCValueOut;
TauZoolog 3:25cd717ad782 125
TauZoolog 3:25cd717ad782 126 // Delay processor to achieve SAMPLING_FREQUENCY (500KHz)
TauZoolog 3:25cd717ad782 127 wait_us(sampling_frequency_delay); // delay in microseconds
TauZoolog 3:25cd717ad782 128 // NOP();
TauZoolog 3:25cd717ad782 129 // NOP();
TauZoolog 3:25cd717ad782 130 // NOP();
TauZoolog 3:25cd717ad782 131 // NOP();
TauZoolog 3:25cd717ad782 132 // NOP();
TauZoolog 3:25cd717ad782 133 // NOP();
TauZoolog 3:25cd717ad782 134 // NOP();
TauZoolog 3:25cd717ad782 135 // NOP();
TauZoolog 3:25cd717ad782 136 #if 1
TauZoolog 3:25cd717ad782 137 NumCycles++;
TauZoolog 3:25cd717ad782 138 if((NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT > 0) && (NumCycles % NUM_CYCLES_TO_CHECK_KEYBOARD_INPUT == 0)) {
TauZoolog 3:25cd717ad782 139 // printf("Check keyboard input. Cycle: %d\n", NumCycles);
TauZoolog 3:25cd717ad782 140 UserButtonPressed = checkKeyboardInput();
TauZoolog 3:25cd717ad782 141 }
TauZoolog 3:25cd717ad782 142 #endif
TauZoolog 3:25cd717ad782 143 }
TauZoolog 3:25cd717ad782 144 wait_us(delay_after_signal_transmission);
TauZoolog 3:25cd717ad782 145 }
TauZoolog 3:25cd717ad782 146