diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 3793182ce..9e51d0f76 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -108,7 +108,7 @@ void ToSendStuffBit(int b) { //----------------------------------------------------------------------------- // Read an ADC channel and block till it completes, then return the result -// in ADC units (0 to 1023). Also a routine to average 32 samples and +// in ADC units (0 to 1023). Also a routine to sum up a number of samples and // return that. //----------------------------------------------------------------------------- static uint16_t ReadAdc(int ch) { @@ -137,13 +137,12 @@ static uint16_t ReadAdc(int ch) { } // was static - merlok -uint16_t AvgAdc(int ch) { +uint16_t SumAdc(int ch, int NbSamples) { uint16_t a = 0; - for (uint8_t i = 0; i < 32; i++) + for (uint8_t i = 0; i < NbSamples; i++) a += ReadAdc(ch); - //division by 32 - return (a + 15) >> 5; + return (a + (NbSamples >> 1) - 1); } static void MeasureAntennaTuning(void) { @@ -186,7 +185,7 @@ static void MeasureAntennaTuning(void) { WDT_HIT(); FpgaSendCommand(FPGA_CMD_SET_DIVISOR, i); SpinDelay(20); - uint32_t adcval = ((MAX_ADC_LF_VOLTAGE * AvgAdc(ADC_CHAN_LF)) >> 10); + uint32_t adcval = ((MAX_ADC_LF_VOLTAGE * (SumAdc(ADC_CHAN_LF, 32) >> 1)) >> 14); if (i == LF_DIVISOR_125) payload.v_lf125 = adcval; // voltage at 125kHz @@ -212,9 +211,9 @@ static void MeasureAntennaTuning(void) { SpinDelay(50); #if defined RDV4 - payload.v_hf = (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + payload.v_hf = (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 32)) >> 15; #else - payload.v_hf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + payload.v_hf = (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; #endif FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -226,16 +225,16 @@ static void MeasureAntennaTuning(void) { static uint16_t MeasureAntennaTuningHfData(void) { #if defined RDV4 - return (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + return (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 64)) >> 16; #else - return (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + return (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 64)) >> 16; #endif } // Measure LF in milliVolt static uint32_t MeasureAntennaTuningLfData(void) { - return (MAX_ADC_LF_VOLTAGE * AvgAdc(ADC_CHAN_LF)) >> 10; + return (MAX_ADC_LF_VOLTAGE * (SumAdc(ADC_CHAN_LF, 32) >> 1)) >> 14; } void ReadMem(int addr) { @@ -541,7 +540,7 @@ void ListenReaderField(uint8_t limit) { LEDsoff(); if (limit == LF_ONLY) { - lf_av = lf_max = AvgAdc(ADC_CHAN_LF); + lf_av = lf_max = SumAdc(ADC_CHAN_LF, 32) >> 5; Dbprintf("LF 125/134kHz Baseline: %dmV", (MAX_ADC_LF_VOLTAGE * lf_av) >> 10); lf_baseline = lf_av; } @@ -550,9 +549,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 = AvgAdc(ADC_CHAN_HF_RDV40); + hf_av = hf_max = SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; #else - hf_av = hf_max = AvgAdc(ADC_CHAN_HF); + hf_av = hf_max = SumAdc(ADC_CHAN_HF, 32) >> 5; #endif Dbprintf("HF 13.56MHz Baseline: %dmV", (MAX_ADC_HF_VOLTAGE * hf_av) >> 10); hf_baseline = hf_av; @@ -586,7 +585,7 @@ void ListenReaderField(uint8_t limit) { LED_D_OFF(); } - lf_av_new = AvgAdc(ADC_CHAN_LF); + lf_av_new = SumAdc(ADC_CHAN_LF, 32) >> 5; // 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); @@ -605,9 +604,9 @@ void ListenReaderField(uint8_t limit) { } #if defined RDV4 - hf_av_new = AvgAdc(ADC_CHAN_HF_RDV40); + hf_av_new = SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; #else - hf_av_new = AvgAdc(ADC_CHAN_HF); + hf_av_new = SumAdc(ADC_CHAN_HF, 32) >> 5; #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 5aece8388..15f3d5ffd 100644 --- a/armsrc/appmain.h +++ b/armsrc/appmain.h @@ -30,7 +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); void ToSendStuffBit(int b); diff --git a/armsrc/iso14443b.c b/armsrc/iso14443b.c index bbca137fc..4999c4d85 100644 --- a/armsrc/iso14443b.c +++ b/armsrc/iso14443b.c @@ -641,9 +641,9 @@ void SimulateIso14443bTag(uint32_t pupi) { if (cardSTATE == SIM_NOFIELD) { #if defined RDV4 - vHf = (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + vHf = (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 32)) >> 15; #else - vHf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + vHf = (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; #endif if (vHf > MF_MINFIELDV) { cardSTATE = SIM_IDLE; diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 9ef3a34a8..72559a7b9 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1571,7 +1571,7 @@ void TurnReadLFOn(uint32_t delay) { FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_READER | FPGA_LF_ADC_READER_FIELD); // measure antenna strength. - //int adcval = ((MAX_ADC_LF_VOLTAGE * AvgAdc(ADC_CHAN_LF)) >> 10); + //int adcval = ((MAX_ADC_LF_VOLTAGE * (SumAdc(ADC_CHAN_LF, 32) >> 1)) >> 14); WaitUS(delay); } static void TurnReadLF_off(uint32_t delay) { diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index ecc0ee505..60f9a7810 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -539,9 +539,9 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 if (cardSTATE == MFEMUL_NOFIELD) { #if defined RDV4 - vHf = (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + vHf = (MAX_ADC_HF_VOLTAGE_RDV40 * SumAdc(ADC_CHAN_HF_RDV40, 32)) >> 15; #else - vHf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + vHf = (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; #endif if (vHf > MF_MINFIELDV) { diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index a77a70744..14dd1155a 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 AvgAdc(ADC_CHAN_HF_RDV40); + return SumAdc(ADC_CHAN_HF_RDV40, 32) >> 5; #else - return AvgAdc(ADC_CHAN_HF); + return SumAdc(ADC_CHAN_HF, 32) >> 5; #endif }