From 0ce3be2f3431e9652d7831650c7f916e3d8afe2e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 10 Jun 2020 00:06:18 +0200 Subject: [PATCH] Reintroduce AvgAdv, avoid *64 as it could easily overflow This reverts partly commit 9189dc85635af754556b2803033574d425b67146. --- armsrc/appmain.c | 21 ++++++++++++--------- armsrc/appmain.h | 1 + armsrc/thinfilm.c | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 9e51d0f76..c5cdc5dc7 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -137,11 +137,14 @@ static uint16_t ReadAdc(int ch) { } // was static - merlok +uint16_t AvgAdc(int ch) { + return SumAdc(ch, 32) >> 5; +} + uint16_t SumAdc(int ch, int NbSamples) { uint16_t a = 0; for (uint8_t i = 0; i < NbSamples; i++) a += ReadAdc(ch); - return (a + (NbSamples >> 1) - 1); } @@ -225,9 +228,9 @@ static void MeasureAntennaTuning(void) { static uint16_t MeasureAntennaTuningHfData(void) { #if defined RDV4 - return (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 64)) >> 16; + return (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 32)) >> 15; #else - return (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 64)) >> 16; + return (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; #endif } @@ -540,7 +543,7 @@ void ListenReaderField(uint8_t limit) { LEDsoff(); if (limit == LF_ONLY) { - lf_av = lf_max = SumAdc(ADC_CHAN_LF, 32) >> 5; + lf_av = lf_max = AvgAdc(ADC_CHAN_LF); Dbprintf("LF 125/134kHz Baseline: %dmV", (MAX_ADC_LF_VOLTAGE * lf_av) >> 10); lf_baseline = lf_av; } @@ -549,9 +552,9 @@ void ListenReaderField(uint8_t limit) { #if defined RDV4 // iceman, useless, since we are measuring readerfield, not our field. My tests shows a max of 20v from a reader. - hf_av = hf_max = SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; + hf_av = hf_max = AvgAdc(ADC_CHAN_HF_RDV40); #else - hf_av = hf_max = SumAdc(ADC_CHAN_HF, 32) >> 5; + hf_av = hf_max = AvgAdc(ADC_CHAN_HF); #endif Dbprintf("HF 13.56MHz Baseline: %dmV", (MAX_ADC_HF_VOLTAGE * hf_av) >> 10); hf_baseline = hf_av; @@ -585,7 +588,7 @@ void ListenReaderField(uint8_t limit) { LED_D_OFF(); } - lf_av_new = SumAdc(ADC_CHAN_LF, 32) >> 5; + lf_av_new = AvgAdc(ADC_CHAN_LF); // see if there's a significant change if (ABS(lf_av - lf_av_new) > REPORT_CHANGE) { Dbprintf("LF 125/134kHz Field Change: %5dmV", (MAX_ADC_LF_VOLTAGE * lf_av_new) >> 10); @@ -604,9 +607,9 @@ void ListenReaderField(uint8_t limit) { } #if defined RDV4 - hf_av_new = SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; + hf_av_new = AvgAdc(ADC_CHAN_HF_RDV40); #else - hf_av_new = SumAdc(ADC_CHAN_HF, 32) >> 5; + hf_av_new = AvgAdc(ADC_CHAN_HF); #endif // see if there's a significant change if (ABS(hf_av - hf_av_new) > REPORT_CHANGE) { diff --git a/armsrc/appmain.h b/armsrc/appmain.h index 15f3d5ffd..6a650f163 100644 --- a/armsrc/appmain.h +++ b/armsrc/appmain.h @@ -30,6 +30,7 @@ void send_wtx(uint16_t wtx); void ReadMem(int addr); void __attribute__((noreturn)) AppMain(void); +uint16_t AvgAdc(int ch); uint16_t SumAdc(int ch, int NbSamples); //void PrintToSendBuffer(void); diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index 14dd1155a..a77a70744 100644 --- a/armsrc/thinfilm.c +++ b/armsrc/thinfilm.c @@ -53,9 +53,9 @@ static uint16_t FpgaSendQueueDelay; static uint16_t ReadReaderField(void) { #if defined RDV4 - return SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; + return AvgAdc(ADC_CHAN_HF_RDV40); #else - return SumAdc(ADC_CHAN_HF, 32) >> 5; + return AvgAdc(ADC_CHAN_HF); #endif }