32.6 Computation Operation
The ADC module hardware is equipped with post conversion computation features. These features provide data post-processing functions that can be applied to the ADC conversion result, including digital filtering/averaging and threshold comparison functions.
The operation of the ADC computational features is controlled by MD
bits.
The module can be operated in one of five modes:
- Basic: This is a Legacy mode. In
this mode, ADC conversion occurs on single (DSEN =
0
) or double (DSEN =1
) samples. ADIF is set after all the conversions are complete. - Accumulate: With each trigger, the ADC conversion result is added to accumulator and ADCNT increments. ADIF is set after each conversion. ADTIF is set according to the Calculation mode.
- Average: With each trigger, the ADC conversion result is added to the accumulator. When the ADRPT number of samples have been accumulated, a threshold test is performed. Upon the next trigger, the accumulator is cleared. For the subsequent tests, additional ADRPT samples are required to be accumulated.
- Burst Average: At the trigger, the accumulator is cleared. The ADC conversion results are then collected repetitively until ADRPT samples are accumulated and finally the threshold is tested.
- Low-Pass Filter (LPF): With each trigger, the ADC conversion result is sent through a filter. When ADRPT samples have occurred, a threshold test is performed. Every trigger after that, the ADC conversion result is sent through the filter and another threshold test is performed.
The five modes are summarized in following table.
Bit Clear Conditions | Value after Trigger completion | Threshold Operations | Value at ADTIF interrupt | |||||||
---|---|---|---|---|---|---|---|---|---|---|
Mode | MD | ADACC and ADCNT | ADACC | ADCNT | Retrigger | Threshold Test | Interrupt | ADAOV | ADFLTR | ADCNT |
Low-Pass Filter | 100 | ADACLR =
1 |
S+ADACC-ADACC/
2ADCRS or (S2-S1) +ADACC-ADACC/2ADCRS |
If (ADCNT=FF): ADCNT, otherwise: ADCNT+1 | No | If ADCNT>=ADRPT | If threshold=true | ADACC Overflow | Filtered Value | count |
Burst Average |
011 | ADACLR =
1 or ADGO set or retrigger |
Each
repetition: same as Average End with sum of all samples |
Each
repetition: same as Average End with ADCNT=ADRPT |
Repeat while ADCNT<ADRPT | If ADCNT>=ADRPT | If threshold=true | ADACC Overflow | ADACC/2ADCRS | ADRPT |
Average | 010 | ADACLR =
1 or ADCNT>=ADRPT at ADGO or retrigger |
S + ADACC or (S2-S1) + ADACC |
If (ADCNT=FF): ADCNT, otherwise: ADCNT+1 | No | If ADCNT>=ADRPT | If threshold=true | ADACC Overflow | ADACC/2ADCRS | count |
Accumulate | 001 | ADACLR =
1 |
S + ADACC or (S2-S1) + ADACC |
If (ADCNT=FF): ADCNT, otherwise: ADCNT+1 | No | Every Sample | If threshold=true | ADACC Overflow | ADACC/2ADCRS | count |
Basic | 000 | ADACLR =
1 |
Unchanged | Unchanged | No | Every Sample | If threshold=true | N/A | N/A | count |