24 #include <avrio/defs.h> 146 # if defined(__DOXYGEN__) 166 static inline uint16_t
usAdcReadAverage (uint8_t ucChannel, uint8_t ucTerms);
175 static inline void vAdcSetRef (uint8_t ucRef);
184 static inline uint8_t eAdcGetRef (
void)
195 #define ADC_VALUE(_MEASUREMENT,_FULL_SCALE) 204 #define ADC_MEASUREMENT(_VALUE,_FULL_SCALE) 216 #include "avrio-config.h" 217 #ifdef AVRIO_ADC_ENABLE 218 #include "avrio-board-adc.h" 220 #include <avrio/delay.h> 223 #if defined(REFS2) && defined(REFS1) && defined(REFS0) 224 #define ADCREF_MASK (_BV(REFS2)|_BV(REFS1)|_BV(REFS0)) 225 #elif defined(REFS1) && defined(REFS0) 226 #define ADCREF_MASK (_BV(REFS1)|_BV(REFS0)) 228 #define ADCREF_MASK (_BV(REFS0)) 231 #if !defined(ADMUX) && defined(ADMUXB) 257 ADMUX = (ADMUX & ~ADCREF_MASK) | (eRef << REFS0);
261 INLINE
eAdcRef eAdcGetRef (
void) {
263 return (ADMUX & ADCREF_MASK) >> REFS0;
271 #if defined(ADC_SCALE_ENABLE) 292 void vAdcSetScale (uint8_t ucChannel, uint8_t ucScale);
293 uint8_t ucAdcGetScale (uint8_t ucChannel);
294 uint8_t ucAdcGetScaleMax (uint8_t ucChannel);
296 INLINE
void vAdcSetScale (uint8_t ucChannel, uint8_t ucScale) {
299 INLINE uint8_t ucAdcGetScale (uint8_t ucChannel) {
303 INLINE uint8_t ucAdcGetScaleMax (uint8_t ucChannel) {
309 #if defined(ADC_AUTOSCALE_ENABLE) 310 extern uint16_t usAdcAutoScaleFlag;
312 INLINE
void vAdcSetAutoscale (uint8_t ucChannel) {
314 usAdcAutoScaleFlag =
_BV(ucChannel);
317 INLINE
void vAdcClearAutoscale (uint8_t ucChannel) {
319 usAdcAutoScaleFlag = 0;
322 INLINE
void vAdcSetAutoscale (uint8_t ucChannel) {
326 INLINE
void vAdcClearAutoscale (uint8_t ucChannel) {
332 #define ADC_VALUE(_MEASUREMENT,_FULL_SCALE) \ 333 ((uint16_t)(((_MEASUREMENT)*1024.0)/(_FULL_SCALE))) 335 #define ADC_MEASUREMENT(_VALUE,_FULL_SCALE) \ 336 ((((double)(_VALUE))*((double)(_FULL_SCALE)))/1024.0) eAdcRef
Tension de référence.
#define delay_ms(__ms)
Temporisation en millisecondes.
static void vAdcSetChannel(uint8_t ucChan)
Modifie la voie du multiplexeur.
uint8_t ucAdcGetDiv(void)
Renvoie le facteur de division de l'horloge de l'ADC.
uint16_t usAdcRead(uint8_t ucChannel)
Lecture de l'ADC.
void vAdcEnable(void)
Valide l'ADC.
Référence interne supplémentaire (REFS = 10, seuleument sur certains MCU)
void vAdcSetDiv(uint8_t ucDiv)
Modifie le facteur de division de l'horloge de l'ADC.
eAdcFilter
Type de filtrage de la mesure.
void vAdcInit(void)
Initialise et valide l'ADC pour l'utilisation.
void vAdcDisable(void)
Dévalide l'ADC.
Référence interne (sur tous les MCU AVR8 disposant d'un ADC)
#define _BV(n)
Renvoie un masque avec le bit de rang n à 1.
uint16_t usAdcReadFilter(uint8_t ucChannel, uint8_t ucTerms, eAdcFilter eFilter)
Lecture de l'ADC avec filtrage.
Mesure directe de l'ADC.
Tension AVCC avec un condensateur sur AREF.
static uint16_t usAdcReadAverage(uint8_t ucChannel, uint8_t ucTerms)
Lecture de l'ADC avec moyennage.
static void vAdcSetRef(uint8_t ucRef)
Modifie la tension de référence.