diff --git a/armsrc/appmain.c b/armsrc/appmain.c index bfd37f475..a261ecba3 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -245,6 +245,11 @@ void MeasureAntennaTuning(void) { SpinDelay(20); v_hf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + // hitting the roof, try other ADC channel + if ( v_hf > MAX_ADC_HF_VOLTAGE-300 ) { + v_hf = (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + } + uint64_t arg0 = v_lf134; arg0 <<= 32; arg0 |= v_lf125; @@ -259,15 +264,24 @@ void MeasureAntennaTuning(void) { } void MeasureAntennaTuningHf(void) { - uint16_t vHf = 0; // in mV + uint16_t volt = 0; // in mV // Let the FPGA drive the high-frequency antenna around 13.56 MHz. FpgaDownloadAndGo(FPGA_BITSTREAM_HF); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR); + SpinDelay(20); + volt = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + bool use_high = ( volt > MAX_ADC_HF_VOLTAGE-300 ); + + while( !BUTTON_PRESS() ){ SpinDelay(20); - vHf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; - DbprintfEx(CMD_MEASURE_ANTENNA_TUNING_HF, "%u mV / %5.2f V", vHf, vHf/1000.0); + if ( use_high ) { + volt = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10; + } else { + volt = (MAX_ADC_HF_VOLTAGE_RDV40 * AvgAdc(ADC_CHAN_HF_RDV40)) >> 10; + } + DbprintfEx(CMD_MEASURE_ANTENNA_TUNING_HF, "%u mV / %5.2f V", volt, volt/1000.0); } FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); DbpString("[+] cancelled"); diff --git a/armsrc/apps.h b/armsrc/apps.h index 6d60a8cc3..0172a3692 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -51,6 +51,8 @@ void Dbhexdump(int len, uint8_t *d, bool bAsci); // ADC Vref = 3300mV, and an (10M+1M):1M voltage divider on the HF input can measure voltages up to 36300 mV #define MAX_ADC_HF_VOLTAGE 36300 +// ADC Vref = 3300mV, (240k-10M):240k voltage divider, 140800 mV +#define MAX_ADC_HF_VOLTAGE_RDV40 140800 // ADC Vref = 3300mV, and an (10000k+240k):240k voltage divider on the LF input can measure voltages up to 140800 mV #define MAX_ADC_LF_VOLTAGE 140800 int AvgAdc(int ch); diff --git a/include/proxmark3.h b/include/proxmark3.h index 75e446d5c..7e1c9e5ec 100644 --- a/include/proxmark3.h +++ b/include/proxmark3.h @@ -23,6 +23,7 @@ #define ADC_CHAN_LF 4 #define ADC_CHAN_HF 5 +#define ADC_CHAN_HF_RDV40 7 #define ADC_MODE_PRESCALE(x) ((x) << 8) #define ADC_MODE_STARTUP_TIME(x) ((x) << 16) #define ADC_MODE_SAMPLE_HOLD_TIME(x) ((x) << 24)