ADC
8.0
|
#include <ADC.h>
Classes | |
struct | Sync_result |
Struct for synchronous measurements. More... | |
Public Member Functions | |
ADC () | |
void | setReference (ADC_REFERENCE type, int8_t adc_num=-1) |
Set the voltage reference you prefer, default is vcc. More... | |
void | setResolution (uint8_t bits, int8_t adc_num=-1) |
Change the resolution of the measurement. More... | |
uint8_t | getResolution (int8_t adc_num=-1) |
Returns the resolution of the ADC_Module. More... | |
uint32_t | getMaxValue (int8_t adc_num=-1) |
Returns the maximum value for a measurement: 2^res-1. More... | |
void | setConversionSpeed (ADC_CONVERSION_SPEED speed, int8_t adc_num=-1) |
Sets the conversion speed (changes the ADC clock, ADCK) More... | |
void | setSamplingSpeed (ADC_SAMPLING_SPEED speed, int8_t adc_num=-1) |
Sets the sampling speed. More... | |
void | setAveraging (uint8_t num, int8_t adc_num=-1) |
Set the number of averages. More... | |
void | enableInterrupts (int8_t adc_num=-1) |
Enable interrupts. More... | |
void | disableInterrupts (int8_t adc_num=-1) |
Disable interrupts. More... | |
void | enableDMA (int8_t adc_num=-1) |
Enable DMA request. More... | |
void | disableDMA (int8_t adc_num=-1) |
Disable ADC DMA request. More... | |
void | enableCompare (int16_t compValue, bool greaterThan, int8_t adc_num=-1) |
Enable the compare function to a single value. More... | |
void | enableCompareRange (int16_t lowerLimit, int16_t upperLimit, bool insideRange, bool inclusive, int8_t adc_num=-1) |
Enable the compare function to a range. More... | |
void | disableCompare (int8_t adc_num=-1) |
Disable the compare function. More... | |
void | enablePGA (uint8_t gain, int8_t adc_num=-1) |
Enable and set PGA. More... | |
uint8_t | getPGA (int8_t adc_num=-1) |
Returns the PGA level. More... | |
void | disablePGA (int8_t adc_num=-1) |
Disable PGA. More... | |
bool | isConverting (int8_t adc_num=-1) |
Is the ADC converting at the moment? More... | |
bool | isComplete (int8_t adc_num=-1) |
Is an ADC conversion ready? More... | |
bool | isDifferential (int8_t adc_num=-1) |
Is the ADC in differential mode? More... | |
bool | isContinuous (int8_t adc_num=-1) |
Is the ADC in continuous mode? More... | |
int | analogRead (uint8_t pin, int8_t adc_num=-1) |
Returns the analog value of the pin. More... | |
int | analogRead (ADC_INTERNAL_SOURCE pin, int8_t adc_num=-1) |
Returns the analog value of the special internal source, such as the temperature sensor. More... | |
int | analogReadDifferential (uint8_t pinP, uint8_t pinN, int8_t adc_num=-1) |
Reads the differential analog value of two pins (pinP - pinN). More... | |
bool | startSingleRead (uint8_t pin, int8_t adc_num=-1) |
Starts an analog measurement on the pin and enables interrupts. More... | |
bool | startSingleDifferential (uint8_t pinP, uint8_t pinN, int8_t adc_num=-1) |
Start a differential conversion between two pins (pinP - pinN) and enables interrupts. More... | |
int | readSingle (int8_t adc_num=-1) |
Reads the analog value of a single conversion. More... | |
bool | startContinuous (uint8_t pin, int8_t adc_num=-1) |
Starts continuous conversion on the pin. More... | |
bool | startContinuousDifferential (uint8_t pinP, uint8_t pinN, int8_t adc_num=-1) |
Starts continuous conversion between the pins (pinP-pinN). More... | |
int | analogReadContinuous (int8_t adc_num=-1) |
Reads the analog value of a continuous conversion. More... | |
void | stopContinuous (int8_t adc_num=-1) |
Stops continuous conversion. More... | |
Sync_result | analogSynchronizedRead (uint8_t pin0, uint8_t pin1) |
Returns the analog values of both pins, measured at the same time by the two ADC modules. More... | |
Sync_result | analogSyncRead (uint8_t pin0, uint8_t pin1) |
Same as analogSynchronizedRead. More... | |
Sync_result | analogSynchronizedReadDifferential (uint8_t pin0P, uint8_t pin0N, uint8_t pin1P, uint8_t pin1N) |
Returns the differential analog values of both sets of pins, measured at the same time by the two ADC modules. More... | |
Sync_result | analogSyncReadDifferential (uint8_t pin0P, uint8_t pin0N, uint8_t pin1P, uint8_t pin1N) |
Same as analogSynchronizedReadDifferential. More... | |
bool | startSynchronizedSingleRead (uint8_t pin0, uint8_t pin1) |
Starts an analog measurement at the same time on the two ADC modules. More... | |
bool | startSynchronizedSingleDifferential (uint8_t pin0P, uint8_t pin0N, uint8_t pin1P, uint8_t pin1N) |
Start a differential conversion between two pins (pin0P - pin0N) and (pin1P - pin1N) More... | |
Sync_result | readSynchronizedSingle () |
Reads the analog value of a single conversion. More... | |
bool | startSynchronizedContinuous (uint8_t pin0, uint8_t pin1) |
Starts a continuous conversion in both ADCs simultaneously. More... | |
bool | startSynchronizedContinuousDifferential (uint8_t pin0P, uint8_t pin0N, uint8_t pin1P, uint8_t pin1N) |
Starts a continuous differential conversion in both ADCs simultaneously. More... | |
Sync_result | readSynchronizedContinuous () |
Returns the values of both ADCs. More... | |
void | stopSynchronizedContinuous () |
Stops synchronous continuous conversion. | |
void | printError () |
void | resetError () |
Resets all errors from all ADCs, if any. | |
Public Attributes | |
ADC_Module *const | adc0 = &adc0_obj |
Object to control the ADC0. | |
ADC_Module *const | adc1 = &adc1_obj |
Object to control the ADC1. | |
ADC_Module *const | adc [ADC_NUM_ADCS] = {adc0, adc1} |
Static Public Attributes | |
static const uint8_t | channel2sc1aADC0 [ADC_MAX_PIN+1] |
Translate pin number to SC1A nomenclature. More... | |
static const uint8_t | channel2sc1aADC1 [ADC_MAX_PIN+1] |
Translate pin number to SC1A nomenclature. More... | |
static const uint8_t | sc1a2channelADC0 [ADC_MAX_PIN+1] |
Translate pin number to SC1A nomenclature for differential pins. More... | |
static const uint8_t | sc1a2channelADC1 [ADC_MAX_PIN+1] |
Translate pin number to SC1A nomenclature for differential pins. More... | |
static const ADC_Module::ADC_NLIST | diff_table_ADC0 [ADC_DIFF_PAIRS] |
Translate differential pin number to SC1A nomenclature. More... | |
static const ADC_Module::ADC_NLIST | diff_table_ADC1 [ADC_DIFF_PAIRS] |
Translate differential pin number to SC1A nomenclature. More... | |
ADC::ADC | ( | ) |
Default constructor
int ADC::analogRead | ( | uint8_t | pin, |
int8_t | adc_num = -1 |
||
) |
Returns the analog value of the pin.
It waits until the value is read and then returns the result. If a comparison has been set up and fails, it will return ADC_ERROR_VALUE. This function is interrupt safe, so it will restore the adc to the state it was before being called If more than one ADC exists, it will select the module with less workload, you can force a selection using adc_num. If you select ADC1 in Teensy 3.0 it will return ADC_ERROR_VALUE.
pin | can be any of the analog pins |
adc_num | ADC_X ADC module |
|
inline |
Returns the analog value of the special internal source, such as the temperature sensor.
It calls analogRead(uint8_t pin) internally, with the correct value for the pin for all boards. Possible values: TEMP_SENSOR, Temperature sensor. VREF_OUT, 1.2 V reference (switch on first using VREF.h). BANDGAP, BANDGAP (switch on first using VREF.h). VREFH, High VREF. VREFL, Low VREF.
pin | ADC_INTERNAL_SOURCE to read. |
adc_num | ADC_X ADC module |
int ADC::analogReadContinuous | ( | int8_t | adc_num = -1 | ) |
Reads the analog value of a continuous conversion.
Set the continuous conversion with with analogStartContinuous(pin) or startContinuousDifferential(pinP, pinN). If single-ended and 16 bits it's necessary to typecast it to an unsigned type (like uint16_t), otherwise values larger than 3.3/2 V are interpreted as negative!
adc_num | ADC_X ADC module |
Set the continuous conversion with with analogStartContinuous(pin) or startContinuousDifferential(pinP, pinN).
int ADC::analogReadDifferential | ( | uint8_t | pinP, |
uint8_t | pinN, | ||
int8_t | adc_num = -1 |
||
) |
Reads the differential analog value of two pins (pinP - pinN).
It waits until the value is read and then returns the result. This function is interrupt safe, so it will restore the adc to the state it was before being called If more than one ADC exists, it will select the module with less workload, you can force a selection using adc_num
pinP | must be A10 or A12. |
pinN | must be A11 (if pinP=A10) or A13 (if pinP=A12). |
adc_num | ADC_X ADC module |
ADC::Sync_result ADC::analogSynchronizedRead | ( | uint8_t | pin0, |
uint8_t | pin1 | ||
) |
Returns the analog values of both pins, measured at the same time by the two ADC modules.
It waits until the values are read and then returns the result as a struct Sync_result, use Sync_result.result_adc0 and Sync_result.result_adc1. If a comparison has been set up and fails, it will return ADC_ERROR_VALUE in both fields of the struct. This function is interrupt safe, so it will restore the adc to the state it was before being called
pin0 | pin in ADC0 |
pin1 | pin in ADC1 |
ADC::Sync_result ADC::analogSynchronizedReadDifferential | ( | uint8_t | pin0P, |
uint8_t | pin0N, | ||
uint8_t | pin1P, | ||
uint8_t | pin1N | ||
) |
Returns the differential analog values of both sets of pins, measured at the same time by the two ADC modules.
It waits until the values are read and then returns the result as a struct Sync_result, use Sync_result.result_adc0 and Sync_result.result_adc1. If a comparison has been set up and fails, it will return ADC_ERROR_VALUE in both fields of the struct. This function is interrupt safe, so it will restore the adc to the state it was before being called
pin0P | positive pin in ADC0 |
pin0N | negative pin in ADC0 |
pin1P | positive pin in ADC1 |
pin1N | negative pin in ADC1 |
|
inline |
Same as analogSynchronizedRead.
pin0 | pin in ADC0 |
pin1 | pin in ADC1 |
|
inline |
Same as analogSynchronizedReadDifferential.
pin0P | positive pin in ADC0 |
pin0N | negative pin in ADC0 |
pin1P | positive pin in ADC1 |
pin1N | negative pin in ADC1 |
void ADC::disableCompare | ( | int8_t | adc_num = -1 | ) |
Disable the compare function.
adc_num | ADC number to change. |
void ADC::disableDMA | ( | int8_t | adc_num = -1 | ) |
void ADC::disableInterrupts | ( | int8_t | adc_num = -1 | ) |
Disable interrupts.
adc_num | ADC number to change. |
void ADC::disablePGA | ( | int8_t | adc_num = -1 | ) |
Disable PGA.
adc_num | ADC number to query |
void ADC::enableCompare | ( | int16_t | compValue, |
bool | greaterThan, | ||
int8_t | adc_num = -1 |
||
) |
Enable the compare function to a single value.
A conversion will be completed only when the ADC value is >= compValue (greaterThan=1) or < compValue (greaterThan=0) Call it after changing the resolution Use with interrupts or poll conversion completion with isComplete()
compValue | value to compare |
greaterThan | true or false |
adc_num | ADC number to change. |
void ADC::enableCompareRange | ( | int16_t | lowerLimit, |
int16_t | upperLimit, | ||
bool | insideRange, | ||
bool | inclusive, | ||
int8_t | adc_num = -1 |
||
) |
Enable the compare function to a range.
A conversion will be completed only when the ADC value is inside (insideRange=1) or outside (=0) the range given by (lowerLimit, upperLimit),including (inclusive=1) the limits or not (inclusive=0). See Table 31-78, p. 617 of the freescale manual. Call it after changing the resolution Use with interrupts or poll conversion completion with isComplete()
lowerLimit | lower value to compare |
upperLimit | upper value to compare |
insideRange | true or false |
inclusive | true or false |
adc_num | ADC number to change. |
void ADC::enableDMA | ( | int8_t | adc_num = -1 | ) |
void ADC::enableInterrupts | ( | int8_t | adc_num = -1 | ) |
Enable interrupts.
An IRQ_ADCx Interrupt will be raised when the conversion is completed (including hardware averages and if the comparison (if any) is true).
adc_num | ADC number to change. |
void ADC::enablePGA | ( | uint8_t | gain, |
int8_t | adc_num = -1 |
||
) |
Enable and set PGA.
Enables the PGA and sets the gain Use only for signals lower than 1.2 V and only in differential mode
gain | can be 1, 2, 4, 8, 16, 32 or 64 |
adc_num | ADC number to change. |
uint32_t ADC::getMaxValue | ( | int8_t | adc_num = -1 | ) |
uint8_t ADC::getPGA | ( | int8_t | adc_num = -1 | ) |
Returns the PGA level.
PGA level = from 1 to 64
adc_num | ADC number to query. |
PGA level = 2^gain, from 0 to 64
uint8_t ADC::getResolution | ( | int8_t | adc_num = -1 | ) |
Returns the resolution of the ADC_Module.
adc_num | ADC number to query. |
bool ADC::isComplete | ( | int8_t | adc_num = -1 | ) |
bool ADC::isContinuous | ( | int8_t | adc_num = -1 | ) |
bool ADC::isConverting | ( | int8_t | adc_num = -1 | ) |
bool ADC::isDifferential | ( | int8_t | adc_num = -1 | ) |
|
inline |
ERROR PRINTING ///// Prints the human-readable error from all ADC, if any.
int ADC::readSingle | ( | int8_t | adc_num = -1 | ) |
Reads the analog value of a single conversion.
Set the conversion with with startSingleRead(pin) or startSingleDifferential(pinP, pinN).
adc_num | ADC_X ADC module |
ADC::Sync_result ADC::readSynchronizedContinuous | ( | ) |
Returns the values of both ADCs.
ADC::Sync_result ADC::readSynchronizedSingle | ( | ) |
Reads the analog value of a single conversion.
void ADC::setAveraging | ( | uint8_t | num, |
int8_t | adc_num = -1 |
||
) |
Set the number of averages.
num | can be 0, 4, 8, 16 or 32. |
adc_num | ADC number to change. |
void ADC::setConversionSpeed | ( | ADC_CONVERSION_SPEED | speed, |
int8_t | adc_num = -1 |
||
) |
Sets the conversion speed (changes the ADC clock, ADCK)
speed | can be any from the ADC_CONVERSION_SPEED enum: VERY_LOW_SPEED, LOW_SPEED, MED_SPEED, HIGH_SPEED_16BITS, HIGH_SPEED, VERY_HIGH_SPEED, ADACK_2_4, ADACK_4_0, ADACK_5_2 or ADACK_6_2. |
VERY_LOW_SPEED is guaranteed to be the lowest possible speed within specs for resolutions less than 16 bits (higher than 1 MHz), it's different from LOW_SPEED only for 24, 4 or 2 MHz bus frequency. LOW_SPEED is guaranteed to be the lowest possible speed within specs for all resolutions (higher than 2 MHz). MED_SPEED is always >= LOW_SPEED and <= HIGH_SPEED. HIGH_SPEED_16BITS is guaranteed to be the highest possible speed within specs for all resolutions (lower or eq than 12 MHz). HIGH_SPEED is guaranteed to be the highest possible speed within specs for resolutions less than 16 bits (lower or eq than 18 MHz). VERY_HIGH_SPEED may be out of specs, it's different from HIGH_SPEED only for 48, 40 or 24 MHz bus frequency.
Additionally the conversion speed can also be ADACK_2_4, ADACK_4_0, ADACK_5_2 and ADACK_6_2, where the numbers are the frequency of the ADC clock (ADCK) in MHz and are independent on the bus speed. This is useful if you are using the Teensy at a very low clock frequency but want faster conversions, but if F_BUS<F_ADCK, you can't use VERY_HIGH_SPEED for sampling speed.
adc_num | ADC number to change. |
void ADC::setReference | ( | ADC_REFERENCE | type, |
int8_t | adc_num = -1 |
||
) |
Set the voltage reference you prefer, default is vcc.
It recalibrates at the end.
type | can be ADC_REFERENCE::REF_3V3, ADC_REFERENCE::REF_1V2 (not for Teensy LC) or ADC_REFERENCE::REF_EXT |
adc_num | ADC number to change. |
void ADC::setResolution | ( | uint8_t | bits, |
int8_t | adc_num = -1 |
||
) |
Change the resolution of the measurement.
bits | is the number of bits of resolution. For single-ended measurements: 8, 10, 12 or 16 bits. For differential measurements: 9, 11, 13 or 16 bits. If you want something in between (11 bits single-ended for example) select the immediate higher and shift the result one to the right. Whenever you change the resolution, change also the comparison values (if you use them). |
adc_num | ADC number to change. |
void ADC::setSamplingSpeed | ( | ADC_SAMPLING_SPEED | speed, |
int8_t | adc_num = -1 |
||
) |
Sets the sampling speed.
Increase the sampling speed for low impedance sources, decrease it for higher impedance ones.
speed | can be any of the ADC_SAMPLING_SPEED enum: VERY_LOW_SPEED, LOW_SPEED, MED_SPEED, HIGH_SPEED or VERY_HIGH_SPEED. |
VERY_LOW_SPEED is the lowest possible sampling speed (+24 ADCK). LOW_SPEED adds +16 ADCK. MED_SPEED adds +10 ADCK. HIGH_SPEED adds +6 ADCK. VERY_HIGH_SPEED is the highest possible sampling speed (0 ADCK added).
adc_num | ADC number to change. |
bool ADC::startContinuous | ( | uint8_t | pin, |
int8_t | adc_num = -1 |
||
) |
Starts continuous conversion on the pin.
It returns as soon as the ADC is set, use analogReadContinuous() to read the value.
pin | can be any of the analog pins |
adc_num | ADC_X ADC module |
bool ADC::startContinuousDifferential | ( | uint8_t | pinP, |
uint8_t | pinN, | ||
int8_t | adc_num = -1 |
||
) |
Starts continuous conversion between the pins (pinP-pinN).
It returns as soon as the ADC is set, use analogReadContinuous() to read the value.
pinP | must be A10 or A12. |
pinN | must be A11 (if pinP=A10) or A13 (if pinP=A12). |
adc_num | ADC_X ADC module |
bool ADC::startSingleDifferential | ( | uint8_t | pinP, |
uint8_t | pinN, | ||
int8_t | adc_num = -1 |
||
) |
Start a differential conversion between two pins (pinP - pinN) and enables interrupts.
It returns immediately, get value with readSingle(). If this function interrupts a measurement, it stores the settings in adc_config
pinP | must be A10 or A12. |
pinN | must be A11 (if pinP=A10) or A13 (if pinP=A12). |
adc_num | ADC_X ADC module |
bool ADC::startSingleRead | ( | uint8_t | pin, |
int8_t | adc_num = -1 |
||
) |
Starts an analog measurement on the pin and enables interrupts.
It returns immediately, get value with readSingle(). If this function interrupts a measurement, it stores the settings in adc_config
pin | can be any of the analog pins |
adc_num | ADC_X ADC module |
bool ADC::startSynchronizedContinuous | ( | uint8_t | pin0, |
uint8_t | pin1 | ||
) |
Starts a continuous conversion in both ADCs simultaneously.
Use readSynchronizedContinuous to get the values
pin0 | pin in ADC0 |
pin1 | pin in ADC1 |
Use readSynchronizedContinuous to get the values
bool ADC::startSynchronizedContinuousDifferential | ( | uint8_t | pin0P, |
uint8_t | pin0N, | ||
uint8_t | pin1P, | ||
uint8_t | pin1N | ||
) |
Starts a continuous differential conversion in both ADCs simultaneously.
Use readSynchronizedContinuous to get the values
pin0P | positive pin in ADC0 |
pin0N | negative pin in ADC0 |
pin1P | positive pin in ADC1 |
pin1N | negative pin in ADC1 |
Use readSynchronizedContinuous to get the values
bool ADC::startSynchronizedSingleDifferential | ( | uint8_t | pin0P, |
uint8_t | pin0N, | ||
uint8_t | pin1P, | ||
uint8_t | pin1N | ||
) |
Start a differential conversion between two pins (pin0P - pin0N) and (pin1P - pin1N)
It returns immediately, get value with readSynchronizedSingle(). If this function interrupts a measurement, it stores the settings in adc_config
pin0P | positive pin in ADC0 |
pin0N | negative pin in ADC0 |
pin1P | positive pin in ADC1 |
pin1N | negative pin in ADC1 |
bool ADC::startSynchronizedSingleRead | ( | uint8_t | pin0, |
uint8_t | pin1 | ||
) |
Starts an analog measurement at the same time on the two ADC modules.
It returns immediately, get value with readSynchronizedSingle(). If this function interrupts a measurement, it stores the settings in adc_config
pin0 | pin in ADC0 |
pin1 | pin in ADC1 |
void ADC::stopContinuous | ( | int8_t | adc_num = -1 | ) |
Stops continuous conversion.
adc_num | ADC_X ADC module |
|
static |
Translate pin number to SC1A nomenclature.
|
static |
Translate pin number to SC1A nomenclature.
|
static |
Translate differential pin number to SC1A nomenclature.
|
static |
Translate differential pin number to SC1A nomenclature.
|
static |
Translate pin number to SC1A nomenclature for differential pins.
|
static |
Translate pin number to SC1A nomenclature for differential pins.