LevelMeter-Display  2.0
An ultrasonic Level Meter for Stormwater Cisterns
Functions | Variables
adc.c File Reference

Routines for handling the ADC. More...

Include dependency graph for adc.c:

Functions

void InitADC (void)
 Initializes the ADC. More...
 
 ISR (ADC_vect)
 ADC Conversion Complete Interrupt. More...
 

Variables

volatile ADCData_t ADCData
 ADC-Values for the last measurement. More...
 
volatile ADCData_t ADCDataAvg
 Averaged ADC-Values. More...
 
volatile ADCData_t ADCDataMax
 Maximum ADC-Values during last average Period. More...
 
volatile ADCData_t ADCDataMaxTmp
 Maximum ADC-Values in the current Period. More...
 
volatile ADCData_t ADCDataMin
 Minimum ADC-Values during last average Period. More...
 
volatile ADCData_t ADCDataMinTmp
 Minimum ADC-Values in the current Period. More...
 
volatile uint8_t adcFlags
 
static uint8_t channel
 
volatile uint16_t channelMismatchCnt
 

Detailed Description

Routines for handling the ADC.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Function Documentation

◆ InitADC()

void InitADC ( void  )

Initializes the ADC.

The ADC is set to free running mode at 115.2kHz clock. This gives one result every 113us or one complete set every 564us.

References channel, and muxChannel.

◆ ISR()

ISR ( ADC_vect  )

ADC Conversion Complete Interrupt.

Calculates the Value of the current channel and switches MUX and REF to the next channel.
The flag ADCFLAG_NEWRESULTS (all channels have been updated) will be set every 564us, ADCFLAG_NEWAVERAGES will be available every 36.1ms.
Optimization for Size (-Os): This routine takes about 37us worst case.

References ADCData, ADCDataAvg, ADCDataMaxTmp, ADCDataMinTmp, ADCFLAG_NEWAVERAGES, ADCFLAG_NEWRESULTS, adcFlags, ADCData_t::array, channel, channelMismatchCnt, LEDRedOff(), and LEDRedOn().

Here is the call graph for this function:

Variable Documentation

◆ ADCData

volatile ADCData_t ADCData

ADC-Values for the last measurement.

Referenced by ISR().

◆ ADCDataAvg

volatile ADCData_t ADCDataAvg

Averaged ADC-Values.

Referenced by ISR().

◆ ADCDataMax

volatile ADCData_t ADCDataMax

Maximum ADC-Values during last average Period.

Referenced by ADCResetMinMax().

◆ ADCDataMaxTmp

volatile ADCData_t ADCDataMaxTmp

Maximum ADC-Values in the current Period.

Referenced by ADCResetMinMax(), and ISR().

◆ ADCDataMin

volatile ADCData_t ADCDataMin

Minimum ADC-Values during last average Period.

Referenced by ADCResetMinMax().

◆ ADCDataMinTmp

volatile ADCData_t ADCDataMinTmp

Minimum ADC-Values in the current Period.

Referenced by ADCResetMinMax(), and ISR().

◆ adcFlags

volatile uint8_t adcFlags

Referenced by ISR().

◆ channel

uint8_t channel
static

Referenced by InitADC(), and ISR().

◆ channelMismatchCnt

volatile uint16_t channelMismatchCnt

Referenced by CmdStat(), and ISR().