diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 3793182ce..c5cdc5dc7 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) { @@ -138,12 +138,14 @@ static uint16_t ReadAdc(int ch) { // was static - merlok uint16_t AvgAdc(int ch) { - uint16_t a = 0; - for (uint8_t i = 0; i < 32; i++) - a += ReadAdc(ch); + return SumAdc(ch, 32) >> 5; +} - //division by 32 - return (a + 15) >> 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); } static void MeasureAntennaTuning(void) { @@ -186,7 +188,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 +214,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 +228,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, 32)) >> 15; #else - return (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + return (MAX_ADC_HF_VOLTAGE * SumAdc(ADC_CHAN_HF, 32)) >> 15; #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) { diff --git a/armsrc/appmain.h b/armsrc/appmain.h index 5aece8388..6a650f163 100644 --- a/armsrc/appmain.h +++ b/armsrc/appmain.h @@ -31,6 +31,7 @@ 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) {