Interface: tos.chips.atm128.adc.Atm128AdcMultiple
interface Atm128AdcMultiple
Hardware Abstraction Layer interface of Atmega128 for acquiring data
from multiple channels using the ATmega128's free-running mode.
Because of the possibility that samples may be imprecise after
switching channels and/or reference voltages, and because there
is a one sample delay on swithcing channels and reference voltages,
Atm128ADCMultiple is complex. Two straightforward uses are:
- Acquire N samples from channel C:
- call getData to start sampling on channel C at the desired rate
(note that the choice of prescalers is very limited, so you
don't have many choices for sampling rate)
- ignore the first dataReady event
- use the results of the next N dataReady() events, return FALSE
on the last one
- Acquire one sample each from channels C1, ..., Cn (this pseudocode
assumes that none of these channels are differential)
- call getData to start sampling on channel C1
- on the ith dataReady event switch to channel Ci+1 by changing
*newChannel
- the data passed to the ith dataReady event is for channel Ci-1
(the data from the first dataReady event is ignored)
- Author:
-
Hu Siquan <husq@xbow.com>
-
David Gay
Commands
command bool getData(uint8_t channel, uint8_t refVoltage, bool leftJustify, uint8_t prescaler)
Events
event bool dataReady(uint16_t data, bool precise, uint8_t channel, uint8_t *newChannel, uint8_t *newRefVoltage)
Commands - Details
getData
command bool getData(uint8_t channel, uint8_t refVoltage, bool leftJustify, uint8_t prescaler)
- Parameters:
-
channel - Initial A/D conversion channel. The channel can
be changed in the dataReady event, though these changes happen
with a one-sample delay (this is a hardware restriction).
-
refVoltage - Initial A/D reference voltage. See the
ATM128_ADC_VREF_xxx constants in Atm128ADC.h. Like the channel,
the reference voltage can be changed in the dataReady event with
a one-sample delay.
-
leftJustify - TRUE to place A/D result in high-order bits
(i.e., shifted left by 6 bits), low to place it in the low-order bits
-
prescaler - Prescaler value for the A/D conversion clock. If you
specify ATM128_ADC_PRESCALE, a prescaler will be chosen that guarantees
full precision. Other prescalers can be used to get faster conversions.
See the ATmega128 manual for details.
- Returns:
-
TRUE if the conversion will be precise, FALSE if it will be
imprecise (due to a change in reference voltage, or switching to a
differential input channel)
Events - Details
dataReady
event bool dataReady(uint16_t data, bool precise, uint8_t channel, uint8_t *newChannel, uint8_t *newRefVoltage)
- Parameters:
-
data - a 2 byte unsigned data value sampled by the ADC.
-
precise - if this conversion was precise, FALSE if it wasn't
(we assume that the second conversion after a change of reference
voltage or after switching to a differential channel is precise)
-
channel - Channel this sample was from.
-
newChannel - Change this parameter to switch to a new channel
for the second next sample.
-
newRefVoltage - Change this parameter to change the reference
voltage for the second next sample.
- Returns:
-
TRUE to continue sampling, FALSE to stop.