56 #ifndef ANTENNALEVEL_H_
57 #define ANTENNALEVEL_H_
61 #define ANTENNA_LEVEL_R1 10E3
62 #define ANTENNA_LEVEL_R2 220E0
63 #define ANTENNA_LEVEL_VREF 1.0
64 #define ANTENNA_LEVEL_RES 4096
65 #define ANTENNA_LEVEL_OFFSET 190
67 #define ANTENNA_LEVEL_MILLIVOLT 1E3
68 #define ANTENNA_LEVEL_FACTOR (ANTENNA_LEVEL_VREF * (ANTENNA_LEVEL_R1 + ANTENNA_LEVEL_R2) / (ANTENNA_LEVEL_RES * ANTENNA_LEVEL_R2) )
69 #define ANTENNA_LEVEL_SCALE ((uint32_t) 1<<16)
70 #define ANTENNA_LEVEL_NUMERATOR ((uint32_t) (ANTENNA_LEVEL_MILLIVOLT * ANTENNA_LEVEL_FACTOR * ANTENNA_LEVEL_SCALE + .5))
71 #define ANTENNA_LEVEL_DENOMINATOR (ANTENNA_LEVEL_SCALE)
74 void AntennaLevelInit(
void)
76 ADCA.CTRLA = ADC_ENABLE_bm;
77 ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;
78 ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | ADC_BANDGAP_bm;
79 ADCA.PRESCALER = ADC_PRESCALER_DIV32_gc;
80 ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
81 ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN7_gc;
86 uint16_t AntennaLevelGet(
void)
88 ADCA.CH0.CTRL |= ADC_CH_START_bm;
89 while( !(ADCA.CH0.INTFLAGS & ADC_CH_CHIF_bm) );
91 ADCA.CH0.INTFLAGS = ADC_CH_CHIF_bm;
93 int16_t Result = ADCA.CH0RES - ANTENNA_LEVEL_OFFSET;
94 if (Result < 0) Result = 0;
96 return (uint16_t) (((uint32_t) Result * ANTENNA_LEVEL_NUMERATOR) / ANTENNA_LEVEL_DENOMINATOR);