From 26d8facf2c8ff3bf4f741b1866fcd3bfeb5d4d8b Mon Sep 17 00:00:00 2001 From: cnlohr Date: Tue, 25 Jun 2024 02:39:10 -0700 Subject: [PATCH] Update all files + calculator. Working with FM Stations --- ch32v/ch32v003-timer/nonlora.c | 526 +++++++++++++++++++++ ch32v/ch32v203-goertzel/adcgoertzel.c | 124 +++-- ch32v/ch32v203-goertzel/ttest/demo_run.ods | Bin 83088 -> 82536 bytes ch32v/lib/calculator.html | 47 +- 4 files changed, 650 insertions(+), 47 deletions(-) create mode 100644 ch32v/ch32v003-timer/nonlora.c diff --git a/ch32v/ch32v003-timer/nonlora.c b/ch32v/ch32v003-timer/nonlora.c new file mode 100644 index 0000000..c6632b9 --- /dev/null +++ b/ch32v/ch32v003-timer/nonlora.c @@ -0,0 +1,526 @@ +/** + +MIT-like-non-ai-license + +Copyright (c) 2024 Charles Lohr "CNLohr" + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the two following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +In addition the following restrictions apply: + +1. The Software and any modifications made to it may not be used for the +purpose of training or improving machine learning algorithms, including but not +limited to artificial intelligence, natural language processing, or data +mining. This condition applies to any derivatives, modifications, or updates +based on the Software code. Any usage of the Software in an AI-training dataset +is considered a breach of this License. + +2. The Software may not be included in any dataset used for training or +improving machine learning algorithms, including but not limited to artificial +intelligence, natural language processing, or data mining. + + +3. Any person or organization found to be in violation of these restrictions +will be subject to legal action and may be held liable for any damages +resulting from such use. + +If any term is unenforcable, other terms remain in-force. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +**/ + + +// NOT LORA!!! + +// Transmit a sweep on 97.7MHz +//#define FM_TRANSMITTER_SWEEP + +// Nothing = Transmit a 315MHz signal. + +// XXX WARNING: Something is wrong with this - +// The output isn't perfectly time aligned +// And as such there are extra images in weird places. +// TODO: Investigate the DMA+SPI Port jankyness. +#include "ch32v003fun.h" +#include +#include + +#include "LoRa-SDR-Code.h" + +#ifdef LORAWAN +#include "lorawan_simple.h" +#endif + +#define DMA_SIZE_WORDS 128 + +#define SENDBUFF_WORDS (DMA_SIZE_WORDS*2) +uint8_t sendbuff[SENDBUFF_WORDS]; + +// Bits are shifted out MSBit first, then to LSBit + + +#define MAX_BYTES 25 +#define MAX_SYMBOLS (MAX_BYTES*2+16) + +// Our table is bespoke for the specific SF. +#define CHIPSSPREAD CHIRPLENGTH_WORDS// QUARTER_CHIRP_LENGTH_WORDS (TODO: Use the quater value elsewhere in the code) +#define MARK_FROM_SF0 (1<BSHR = 1; // Turn on GPIOD0 for profiling + + // Backup flags. + volatile int intfr = DMA1->INTFR; + do + { + // Clear all possible flags. + DMA1->INTFCR = DMA1_IT_GL3; + + + //int place = DMA1_Channel3->CNTR; + // CNTR says that there are THIS MANY bytes left in the transfer. + // So a high CNTR value indicates a very early place in the buffer. + + uint16_t * sb = 0; + + temp++; + + if( intfr & DMA1_IT_HT3 ) + { + sb = sendbuff; + } + else if( intfr & DMA1_IT_TC3 ) + { + sb = sendbuff + SENDBUFF_WORDS/2; + } + + if( sb ) + { + if( quadsetplace < 0 ) + { + // Abort Send + memset( sb, 0, SENDBUFF_WORDS*2/2 ); + DMA1_Channel3->CFGR &= ~DMA_CFGR1_EN; + goto complete; + } + + fxcycle += DMA_SIZE_WORDS; + if( fxcycle == NUM_DMAS_PER_QUARTER_CHIRP*DMA_SIZE_WORDS ) + { + fxcycle = 0; + // Advance to next quarter word. + quadsetplace++; + + if( quadsetplace > quadsetcount ) + { +#ifdef TEST_TONE + quadsetplace = 0; +#else + quadsetplace = -1; +#endif + memset( sb, 0, SENDBUFF_WORDS*2/2 ); + goto complete; + } + } + + int symbol = quadsets[quadsetplace]; // Actually 0...CHIRPLENGTHWORDS + + const uint16_t * tsb = 0; + + // Select down- or up-chirp. + if( symbol < 0 ) + { + int word = fxcycle - symbol - 1; + if( word >= CHIRPLENGTH_WORDS ) word -= CHIRPLENGTH_WORDS; + word++; + tsb = (&chirpbuff[word+REVERSE_START_OFFSET_BYTES/4]); + } + else + { + int word = fxcycle + symbol; + if( word >= CHIRPLENGTH_WORDS ) word -= CHIRPLENGTH_WORDS; + tsb = (&chirpbuff[word]); + } + + // I tried using the DMA to do the copy - but that didn't work for some reason. + //while( DMA1_Channel2->CFGR & 1 ); +// DMA1_Channel2->CNTR = DMA_SIZE_WORDS/2; +// DMA1_Channel2->MADDR = (uint32_t)tsb; +// DMA1_Channel2->PADDR = (uint32_t)sb; +// DMA1_Channel2->CFGR |= DMA_CFGR1_EN; + + int cpy = DMA_SIZE_WORDS/2; +#ifdef TEST_TONE + // Test tone + memset( sb, 0xaa, cpy*2 ); +#else +#if DMA_SIZE_WORDS_DIVISIBLE_BY_FOUR == 0 + #error need divisibiltiy by 2. +#else + //while( cpy-- ) { *(sb++) = wordo; } + // Guarantee aligned access. + uint32_t * sbw = (uint32_t*)(((uint32_t)sb)&~3); + uint32_t * tsbw = (uint32_t*)(((uint32_t)tsb)&~3); + //while( cpy-- ) { *(sbw++) = *(tsbw++); } + + // Align the data copy if needed + if( cpy & 1 ) + { + *(sbw++) = *(tsbw++); + } + cpy /= 2; // Doubled up per loop + asm volatile("\ +1:\ +c.lw a3, 0(%[from])\n\ +c.lw a4, 4(%[from])\n\ +c.addi %[from], 8\n\ +c.addi %[cpy], -1\n\ +c.sw a3, 0(%[to])\n\ +c.sw a4, 4(%[to])\n\ +c.addi %[to], 8\n\ +c.bnez %[cpy], 1b\n\ +" : [cpy]"+r"(cpy), [from]"+r"(tsbw), [to]"+r"(sbw) : : "a3", "a4", "memory"); +#endif +#endif + } + +complete: + intfr = DMA1->INTFR; + } while( intfr ); + + //GPIOD->BSHR = 1<<16; // Turn off GPIOD0 for profiling +} +#endif + + + +void LoopFunction() __attribute__((section(".srodata"))); +void LoopFunction() +{ + uint8_t * start = (uint8_t*)DMA1_Channel2->MADDR; + uint8_t * end = (uint8_t*)((uint32_t)DMA1_Channel2->MADDR + SENDBUFF_WORDS); + uint8_t * here = start+ 8; + uint32_t targ = 2000; + uint32_t running = 0; + uint8_t * tail = end - DMA1_Channel2->CNTR; + uint32_t * cntr = DMA1_Channel2->CNTR; + uint32_t temp = 0; + uint32_t temp2 = 0; + + asm volatile("\n\ + li %[targ], 2000\n\ +genloop:\n\ + lw %[temp], 0(%[cntr])\n\ + sub %[tail], %[end], %[temp]\n\ + beq %[here], %[tail], genloop\n\ +innerloop:\ + li %[temp], 17\n\ + blt %[running], %[targ], noskip\n\ + li %[temp], 18\n\ + sub %[running], %[running], %[targ]\n\ +noskip:\n\ + sb %[temp], 0(%[here])\n\ + addi %[here], %[here], 1\n\ + bne %[here], %[end], skipreset\n\ + add %[here], x0, %[start]\n\ +skipreset:\n\ + bne %[here], %[tail], innerloop\n\ + j genloop\n\ +" : [here]"+r"(here) : + [start]"r"(start), + [end]"r"(end), + [targ]"r"(targ), + [running]"r"(running), + [tail]"r"(tail), + [cntr]"r"(cntr), + [temp]"r"(temp), + [temp2]"r"(temp2) ); + +/* + while(1) + { + int targ_f = 2000; //(frameno & 511)*9 + 1700; + int run_f = 0; + uint8_t * tail = end - DMA1_Channel2->CNTR; + + while( here != tail ) + { + int setf = 17; + if( run_f > targ_f ) + { + setf = 18; + run_f -= targ_f; + } + run_f += setf*32; + + *here = setf; + + here++; + } +*/ +/* + for( j = 0; j < sizeof( sendbuff ); j++ ) + { + int setf = 10; + if( run_f > targ_f ) + { + setf = 9; + run_f -= targ_f; + } + run_f += setf*32; + + sendbuff[j] = setf; + } +*/ +} +void LoopFunction2() __attribute__((aligned(256))) __attribute__((section(".srodata"))) __attribute__ ((noinline)); + +__attribute__((section(".sdata"))) __attribute__((aligned(256))) const uint32_t tablef[] = { + 0x08080808, + 0x08080809, + 0x08090809, + 0x09090908, + 0x09090909, + 0x0909090a, + 0x090a090a, + 0x0a0a0a09, + 0x0a0a0a0a, // Below this line is unstable - i.e. sometimes there are missing DMA transfers. + 0x0a0a0a0b, + 0x0a0b0a0b, + 0x0b0b0b0a, + 0x0b0b0b0b, + 0x0b0b0b0c, + 0x0b0c0b0c, + 0x0c0c0c0b, + 0x0c0c0c0c, + 0x0c0c0c0d, + 0x0c0d0c0d, + 0x0d0d0d0c, + 0x0d0d0d0d, + 0x0d0d0d0e, + 0x0d0e0d0e, + 0x0e0e0e0d, + 0x0e0e0e0e, + 0x0e0e0e0f, + 0x0e0f0e0f, + 0x0f0f0f0e, + 0x0f0f0f0f, + 0x0f0f0f10, + 0x0f100f10, + 0x1010100f, + 0x10101010, + 0x10101011, + 0x10111011, + 0x11111110, + }; + +void LoopFunction2() +{ + + uint32_t * start = (uint8_t*)DMA1_Channel2->MADDR; + uint32_t * end = (uint8_t*)((uint32_t)DMA1_Channel2->MADDR + SENDBUFF_WORDS); + uint32_t * here = start; + + int run_f = 0; + + volatile uint32_t * cntrptr = &DMA1_Channel2->CNTR; + + while(1) + { + //uint32_t * tail = 0xfffffffc & (uintptr_t)(((uint8_t*)end) - *cntrptr); + //if( tail == end ) tail--; + uint32_t * tail = ((SENDBUFF_WORDS-1) & (0xfffffffc)) & (uintptr_t)(((uint8_t*)start) + SENDBUFF_WORDS - *cntrptr); + + while( here != tail ) + { +#ifdef FM_TRANSMITTER_SWEEP + // 97.7MHz FM Station + uint32_t cp = ((SysTick->CNT>>3)&0x3fff)+0x12900; +#else + // 315MHz + uint32_t cp = 0x1bfc3; +#endif + *(here++) = tablef[run_f>>12]; + run_f &= (1<<12)-1; + run_f += cp; + if( here == end ) + here = start; + } + } + +} + + +int main() +{ + SystemInit(); + + funGpioInitAll(); + + // Set a wait state (1 = normal <= 48MHz) + FLASH->ACTLR = 1; + +// MCO for testing. +// funPinMode( PA8, GPIO_CFGLR_OUT_50Mhz_AF_PP ); RCC->CFGR0 |= RCC_CFGR0_MCO_PLL; + +// printf( "Switching to HSE\n" ); + Delay_Ms( 10 ); + + // Disable clock security system. + RCC->CTLR &= ~RCC_CSSON; + + // Enable external crystal + RCC->CTLR |= RCC_HSEON; + + // XXX NOTE: This is only used if you have a clock, not an oscillator. +// RCC->CTLR |= RCC_HSEBYP; + + // Set System Clock Source to be 0. + RCC->CFGR0 = (RCC->CFGR0 & ~RCC_SW) | 0; + + // Disable PLL + RCC->CTLR &= ~RCC_PLLON; + + // Switch to HSE + RCC->CFGR0 |= RCC_PLLSRC; + + // Enable PLL + RCC->CTLR |= RCC_PLLON; + + // Wait for HSE to become ready. + while( !( RCC->CTLR & RCC_HSERDY) ); + while( !( RCC->CTLR & RCC_PLLRDY) ); + + RCC->CFGR0 |= RCC_SW_1; // Switch system clock to PLL +// printf( "HSE Switched\n" ); + Delay_Ms( 10 ); + RCC->CTLR &= ~RCC_HSION; + Delay_Ms( 10 ); + //printf( "HSI Off [%08lx %08lx]\n", RCC->CTLR, RCC->CFGR0 ); HSI Off [03035180 0001000a] + + RCC->APB2PCENR |= RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC | + RCC_APB2Periph_TIM1; + + RCC->AHBPCENR |= RCC_AHBPeriph_DMA1; + + funPinMode( PC3, GPIO_CFGLR_OUT_50Mhz_AF_PP ); // T1C3 on PC3 + + RCC->APB2PRSTR |= RCC_APB2Periph_TIM1; + RCC->APB2PRSTR &= ~RCC_APB2Periph_TIM1; + + + // Prescaler + TIM1->PSC = 0x0000; + + // Auto Reload - sets period + TIM1->ATRLR = 20; + + // Reload immediately + TIM1->SWEVGR |= TIM_UG; + + // Enable CH1N output, positive pol + TIM1->CCER |= TIM_CC3E; + TIM1->CCER |= TIM_CC1E; + + // Compare 3 = for output + // Modes: + // 0, 1, 2: Nothing + // 3: Flip + // 4, 5: Nothing + // 6: "Fast PWM mode 1" + // 7: Flipping (Further out) +#ifdef FM_TRANSMITTER_SWEEP + TIM1->CHCTLR2 = TIM_OC3M_0 | TIM_OC3M_1 | TIM_OC3PE | TIM_OC3FE; +#else + TIM1->CHCTLR2 = TIM_OC3M_2 | TIM_OC3M_1 | TIM_OC3PE | TIM_OC3FE; +#endif + + // Compare 1 = for triggering + TIM1->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1; + + // Set the Capture Compare Register value to 50% initially + TIM1->CH3CVR = 5; // ACTUALLY Ignored typically it seems. + TIM1->CH1CVR = 0; // This triggers DMA. + + // Enable TIM1 outputs + TIM1->BDTR |= TIM_MOE; + + // Enable TIM1 + TIM1->CTLR1 |= TIM_CEN; + + TIM1->DMAINTENR = TIM_TDE | TIM_COMDE | TIM_CC1DE | TIM_UDE; + + + //DMA1_Channel3 is for SPI1TX + DMA1_Channel2->PADDR = (uint32_t)&TIM1->ATRLR; + DMA1_Channel2->MADDR = (uint32_t)sendbuff; + DMA1_Channel2->CNTR = 0;// sizeof( bufferset )/2; // Number of unique copies. (Don't start, yet!) + DMA1_Channel2->CFGR = + DMA_M2M_Disable | + DMA_Priority_VeryHigh | + DMA_PeripheralDataSize_HalfWord | + DMA_MemoryDataSize_Byte | + DMA_MemoryInc_Enable | + DMA_Mode_Circular | // OR DMA_Mode_Circular or DMA_Mode_Normal + DMA_DIR_PeripheralDST | + 0; + //DMA_IT_TC | DMA_IT_HT; // Transmission Complete + Half Empty Interrupts. + +// NVIC_EnableIRQ( DMA1_Channel3_IRQn ); + + int j; + for( j = 0; j < sizeof( sendbuff ); j++ ) + { + sendbuff[j] = 12; + } + + + // Enter critical section. + DMA1_Channel2->MADDR = (uint32_t)sendbuff; + DMA1_Channel2->CNTR = SENDBUFF_WORDS; // Number of unique uint16_t entries. + DMA1_Channel2->CFGR |= DMA_CFGR1_EN; + + LoopFunction2(); +} + diff --git a/ch32v/ch32v203-goertzel/adcgoertzel.c b/ch32v/ch32v203-goertzel/adcgoertzel.c index d74fa3a..811604e 100644 --- a/ch32v/ch32v203-goertzel/adcgoertzel.c +++ b/ch32v/ch32v203-goertzel/adcgoertzel.c @@ -64,13 +64,13 @@ SOFTWARE. #define SH1107_128x128 +#define PWM_OUTPUT +#define ENABLE_OLED #include "ssd1306_i2c.h" #include "ssd1306.h" -#define ADC_BUFFSIZE 512 - -#define GOERTZEL_BUFFER 8192 +#define ADC_BUFFSIZE 1024 volatile uint16_t adc_buffer[ADC_BUFFSIZE]; @@ -79,23 +79,51 @@ volatile uint16_t adc_buffer[ADC_BUFFSIZE]; //const int32_t g_goertzel_coefficient = 870249096; //const int32_t g_goertzel_coefficient_s = 1963250500; -/* +#if 0 +#define PWM_PERIOD (30-1) +#define GOERTZEL_BUFFER (752) +const int32_t g_goertzel_omega_per_sample = 2485087396; // 0.368351 of whole per step / 27.031915MHz +const int32_t g_goertzel_coefficient = -1453756170; +const int32_t g_goertzel_coefficient_s = 1580594514; +#endif + +#if 0 +#define PWM_PERIOD (30-1) +#define GOERTZEL_BUFFER (420) +const int32_t g_goertzel_omega_per_sample = 5509657063; // 0.816667 of whole per step / 0.880000MHz +const int32_t g_goertzel_coefficient = 873460290; +const int32_t g_goertzel_coefficient_s = -1961823932; +#endif + +#if 0 #define PWM_PERIOD (31-1) -const int32_t g_goertzel_omega_per_sample = 1228662895; // 0.182118 of whole per step / 27.025000MHz -const int32_t g_goertzel_coefficient = 888414806; -const int32_t g_goertzel_coefficient_s = 1955097223; -*/ +#define GOERTZEL_BUFFER (412) +const int32_t g_goertzel_omega_per_sample = 1670254667; // 0.247573 of whole per step / 1.150016MHz +const int32_t g_goertzel_coefficient = 32748822; +const int32_t g_goertzel_coefficient_s = 2147233926; +#endif -#define PWM_PERIOD (28-1) -const int32_t g_goertzel_omega_per_sample = 1154616630; // 0.171143 of whole per step / 0.880162MHz -const int32_t g_goertzel_coefficient = 1021021706; -const int32_t g_goertzel_coefficient_s = 1889232832; +#if 0 +#define PWM_PERIOD (30-1) +#define GOERTZEL_BUFFER (576) +const int32_t g_goertzel_omega_per_sample = 1264972285; // 0.187500 of whole per step / 90.300000MHz +const int32_t g_goertzel_coefficient = 821806413; +const int32_t g_goertzel_coefficient_s = 1984016189; +#endif +#if 1 +#define PWM_PERIOD (30-1) +#define GOERTZEL_BUFFER (396) +const int32_t g_goertzel_omega_per_sample = 5485805733; // 0.813131 of whole per step / 90.303030MHz +const int32_t g_goertzel_coefficient = 829669840; +const int32_t g_goertzel_coefficient_s = -1980740764; +#endif +int intensity_max = 1; -#define LOG_GOERTZEL_LIST 256 +#define LOG_GOERTZEL_LIST 512 int32_t gertzellogs[LOG_GOERTZEL_LIST*2]; int gertzellogs_head; @@ -141,7 +169,7 @@ void SetupADC() while(ADC1->CTLR2 & ADC_CAL); // ADC_SCAN: Allow scanning. - ADC1->CTLR1 = /*ADC_Pga_64 | */ADC_SCAN; + ADC1->CTLR1 = ADC_Pga_64 | ADC_SCAN; // Turn on DMA @@ -188,17 +216,20 @@ static void SetupTimer1() TIM1->ATRLR = PWM_PERIOD; #ifdef PWM_OUTPUT - // PA10 = T1CH3. - GPIOA->CFGHR &= ~(0xf<<(4*2)); - GPIOA->CFGHR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP_AF)<<(4*2); + // PA9 = T1CH2. + GPIOA->CFGHR &= ~(0xf<<(4*1)); + GPIOA->CFGHR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP_AF)<<(4*1); - TIM1->CCER = TIM_CC3E | TIM_CC3P; - TIM1->CHCTLR2 = TIM_OC3M_2 | TIM_OC3M_1; - TIM1->CH3CVR = 5; // Actual duty cycle (Off to begin with) + TIM1->CCER = TIM_CC2E | TIM_CC2P; + TIM1->CHCTLR1 |= TIM_OC2M_2 | TIM_OC2M_1 | TIM_OC2FE; + TIM1->CH2CVR = 5; // Actual duty cycle (Off to begin with) + + // Enable TIM1 outputs + TIM1->BDTR |= 0xc000;//TIM_MOE; #endif - TIM1->CCER = TIM_CC1E; - TIM1->CHCTLR1 = TIM_OC1M_2 | TIM_OC1M_1; + TIM1->CCER |= TIM_CC1E; + TIM1->CHCTLR1 |= TIM_OC1M_2 | TIM_OC1M_1; TIM1->CH1CVR = 1; // Setup TRGO to trigger for ADC (NOTE: Not on the 203! TIM1_TRGO is only connected to injection) @@ -319,6 +350,29 @@ void DMA1_Channel1_IRQHandler( void ) gertzellogs[gertzellogs_head++] = g_goertzelp2_store; gertzellogs_head = gertzellogs_head & ((LOG_GOERTZEL_LIST*2)-1); + + + #ifdef PWM_OUTPUT + int32_t zp = g_goertzelp_store; + int32_t zp2 = g_goertzelp2_store; + int32_t rr = (((int64_t)(g_goertzel_coefficient ) * (int64_t)zp<<1)>>32) - (zp2); + int32_t ri = (((int64_t)(g_goertzel_coefficient_s) * (int64_t)zp<<1)>>32); + + //rr>>=1; + //ri>>=1; + rr = rr * PWM_PERIOD / (intensity_max>>7); + ri = ri * PWM_PERIOD / (intensity_max>>7); + int s = rr * rr + ri * ri; + int intensity = 1<<( ( 32 - __builtin_clz(s) )/2); + intensity = (intensity + s/intensity)/2; + intensity = (intensity + s/intensity)/2; + + if( intensity >= PWM_PERIOD ) intensity = PWM_PERIOD-1; + if( intensity < 0 ) intensity = 0; + + TIM1->CH2CVR = intensity; // Actual duty cycle (Off to begin with) + #endif + g_goertzel_outs++; goertzel = g_goertzel_omega_per_sample>>(29-16); goertzelp = 0; @@ -342,8 +396,6 @@ void DMA1_Channel1_IRQHandler( void ) void InnerLoop() { - int intensity_max = 1; - while(1){ int k; @@ -374,17 +426,18 @@ void InnerLoop() int32_t rr = (((int64_t)(g_goertzel_coefficient ) * (int64_t)zp<<1)>>32) - (zp2); int32_t ri = (((int64_t)(g_goertzel_coefficient_s) * (int64_t)zp<<1)>>32); - rr>>=4; - ri>>=4; + //rr>>=1; + //ri>>=1; int s = rr * rr + ri * ri; int intensity = 1<<( ( 32 - __builtin_clz(s) )/2); intensity = (intensity + s/intensity)/2; intensity = (intensity + s/intensity)/2; - if( intensity > intensity_max ) intensity_max = intensity; +// if( intensity > intensity_max ) intensity_max = intensity; + intensity_max = intensity_max - (intensity_max>>8) + intensity; - rr = rr * 64 / intensity_max; - ri = ri * 64 / intensity_max; + rr = rr * 64 / (intensity_max>>7); + ri = ri * 64 / (intensity_max>>7); rr += 64; ri += 64; @@ -394,19 +447,18 @@ void InnerLoop() if( rr > 127 ) rr = 127; if( ri > 127 ) ri = 127; +#ifdef ENABLE_OLED ssd1306_drawPixel( rr, ri, 1 ); +#endif } - intensity_max = intensity_max - (intensity_max>>4); - +#ifdef ENABLE_OLED ssd1306_refresh(); ssd1306_setbuf(0); int32_t rr = (((int64_t)(g_goertzel_coefficient ) * (int64_t)g_goertzelp_store<<1)>>32) - (g_goertzelp2_store); \ int32_t ri = (((int64_t)(g_goertzel_coefficient_s) * (int64_t)g_goertzelp_store<<1)>>32); \ - rr>>=4; - ri>>=4; int s = rr * rr + ri * ri; int x = 1<<( ( 32 - __builtin_clz(s) )/2); x = (x + s/x)/2; @@ -414,7 +466,11 @@ void InnerLoop() char cts[32]; snprintf( cts, 32, "%6d", x ); + ssd1306_drawstr( 0, 0, cts, 1 ); +#else + Delay_Ms(17); +#endif // printf( "%6d %8d %8d - %8d %8d - %8d\n", g_goertzel_outs,g_goertzelp2_store, g_goertzelp_store, rr, ri, x ); @@ -461,7 +517,7 @@ int main() //printf( "CTLR: %08x / CFGR0: %08x\n", (RCC->CTLR), (RCC->CFGR0) ); RCC->AHBPCENR |= 3; //DMA2EN | DMA1EN - RCC->APB2PCENR |= RCC_APB2Periph_TIM1 | RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | 0x07; // Enable all GPIO + RCC->APB2PCENR |= RCC_APB2Periph_TIM1 | RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | 0x07 | RCC_APB2Periph_GPIOA; // Enable all GPIO RCC->APB1PCENR |= RCC_APB1Periph_TIM2; SetupADC(); diff --git a/ch32v/ch32v203-goertzel/ttest/demo_run.ods b/ch32v/ch32v203-goertzel/ttest/demo_run.ods index f7cec96701104f3b7ff174a84bf2702ea8edb77a..8ccbcd4658ea565488f60cd6e140ac1d3ff67fb2 100644 GIT binary patch delta 65614 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 ayPbrF? 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 diff --git a/ch32v/lib/calculator.html b/ch32v/lib/calculator.html index 8949316..18297c4 100644 --- a/ch32v/lib/calculator.html +++ b/ch32v/lib/calculator.html @@ -23,12 +23,13 @@ function DrawSpan( colspan, freq, target, docolor, extrastr = "" ) return ret; } -function Goertz( n, mhz, fr ) +function Goertz( n, mhz, fr, brf ) { let omega = fr * 3.1415926535*2.0; var textarea = document.getElementById("goertzeloutput"); textarea.value = "#define PWM_PERIOD ("+n+"-1)\n" + + "#define GOERTZEL_BUFFER ("+brf+")\n" + "const int32_t g_goertzel_omega_per_sample = " + ( omega*2*(1<<29)).toFixed(0) + "; // " + ( omega / (3.1415926535*2.0)).toFixed(6) + " of whole per step / " + mhz.toFixed(6) + "MHz\n" + "const int32_t g_goertzel_coefficient = " + (2 * Math.cos( omega ) * (1<<30)).toFixed(0) + ";\n" + "const int32_t g_goertzel_coefficient_s = "+ (2 * Math.sin( omega ) * (1<<30)).toFixed(0) + ";\n"; @@ -46,6 +47,7 @@ function computeTable() let target = Number(document.getElementById("targetmhz").value ); let quadrature = document.getElementById("QUADRATURE").checked; let quanta = Math.round(Number(document.getElementById("quanta").value)); + let quantasearch = Math.round(Number(document.getElementById("quantasearch").value)); const max_harmonics = 28|0; @@ -77,7 +79,7 @@ function computeTable() "" + "" + "" + - "
Goertzel
Goertzel (Inverse)
"; + ""; } contents += ""; @@ -94,20 +96,38 @@ function computeTable() let goertzelpointinv = 0; let tgoertzelp = 0; let tgoertzelpi = 0; + let quantaA = 0; + let quantaINV = 0; for( let h = 0|min_harmonics; h <= max_harmonics; h++ ) { let base = freq * h; let next = freq * (h+1); - if( target <= next && target >= base ) - { - var t; - goertzelpoint = ( target - base ) / ( next - base ); - goertzelpoint = Math.round(quanta * goertzelpoint)/quanta; - tgoertzelp = h; - goertzelpointinv = (1.0 - ( target - base ) / ( next - base )); - goertzelpointinv = Math.round(quanta * goertzelpointinv)/quanta; - tgoertzelpi = h+1; + // Round quanta down to next order-of-4-even + for( let tquanta = (quanta&0xffffc) - (quantasearch&0xffffc); tquanta < (quanta&0xffffc) + (quantasearch&0xffffc); tquanta+=4 ) + { + if( target <= next && target >= base ) + { + var t; + let tgoertzelpoint = ( target - base ) / ( next - base ); + tgoertzelpoint = Math.round(tquanta * tgoertzelpoint)/tquanta; + if( Math.abs( freq*(h+tgoertzelpoint) - target ) < Math.abs( freq*(h+goertzelpoint) - target ) ) + { + goertzelpoint = tgoertzelpoint; + tgoertzelp = h; + quantaA = tquanta; + } + + let tgoertzelpointinv = (1.0 - ( target - base ) / ( next - base )); + tgoertzelpointinv = Math.round(tquanta * tgoertzelpointinv)/tquanta; + + if( Math.abs( freq*(h-tgoertzelpointinv+1) - target ) < Math.abs( freq*(h-goertzelpointinv+1) - target ) ) + { + goertzelpointinv = tgoertzelpointinv; + tgoertzelpi = h; + quantaINV = tquanta; + } + } } } contents += ""; @@ -135,7 +155,7 @@ function computeTable() if( mode == 0 ) { contents += ""; } else if( mode == 1 ) @@ -145,7 +165,7 @@ function computeTable() else if( mode == 2 ) { contents += ""; } else if( mode == 3 ) @@ -171,6 +191,7 @@ function computeTable() +
" - if( tgoertzelp == h ) contents += "↑" + (goertzelpoint).toFixed(6) + ""; + if( tgoertzelp == h ) contents += "↑" + (goertzelpoint).toFixed(6) + ""; contents += "" - if( tgoertzelp == h-1 ) contents += "↓" + goertzelpointinv.toFixed(6) + ""; + if( tgoertzelpi == h-1 ) contents += "↓" + goertzelpointinv.toFixed(6) + ""; contents += "
Crystal MHz
Target MHz
Quanta (Goertzel's Algorithm Only)
Quanta Search Range (Goertzel's Algorithm Only)
Table TypeQuadratureGoertzels