AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
adc_sensor.h
1 
21 #ifndef _AVRIO_ADC_SENSOR_H_
22 #define _AVRIO_ADC_SENSOR_H_
23 #include <avrio/defs.h>
24 
25 __BEGIN_C_DECLS
26 /* ========================================================================== */
27 #include <avrio/adc.h>
64 /* macros =================================================================== */
70 #define ADC_SENSOR_SETTING_LINEAR(_vmin,_vmax,_rmin,_rmax) { \
71  .xLin.dValueMin=(_vmin), \
72  .xLin.dValueMax=(_vmax), \
73  .xLin.dRawMin=(_rmin), \
74  .xLin.dRawMax=(_rmax) }
75 
81 #define ADC_SENSOR_SETTING_NLINEAR(_coeff, _f) { \
82  .xNlin.dRawToValue=(_f), \
83  .xNlin.dCoeff = _coeff }
84 
85 /* types ==================================================================== */
86 struct xAdcSensor;
87 
91 typedef enum {
92 
96 
100 typedef double (*dAdcSensorConvert) (struct xAdcSensor *, uint16_t);
101 
102 /* structures =============================================================== */
106 typedef struct xAdcSensorLinearSetting {
107 
108  double dValueMin;
109  double dValueMax;
110  double dRawMin;
111  double dRawMax;
113 
117 typedef struct xAdcSensorNlinearSetting {
118 
119  double * dCoeff;
122 
126 typedef union xAdcSensorSetting {
127 
131 
137 typedef struct xAdcSensor {
138 
140  uint8_t ucAdcChan;
141  uint8_t ucAdcScale;
142  uint8_t ucTerms;
145 } xAdcSensor;
146 
147 /* internal public functions ================================================ */
157 uint16_t usAdcSensorGetRaw (xAdcSensor *pSensor);
158 
166 double dAdcSensorRawToValue (xAdcSensor *pSensor, uint16_t usRaw);
167 
168 # if defined(__DOXYGEN__)
169 /*
170  * __DOXYGEN__ defined
171  * Partie documentation ne devant pas être compilée.
172  * =============================================================================
173  */
187 void vAdcSensorInit (xAdcSensor *pSensor, xAdcSensorSetting *pSetting,
188  eAdcSensorType eType,
189  uint8_t ucAdcChan, uint8_t ucTerms);
190 
200 double dAdcSensorGetValue (xAdcSensor *pSensor);
201 
206 # else
207 /*
208  * __DOXYGEN__ not defined
209  * Partie ne devant pas être documentée.
210  * =============================================================================
211  */
212 #include "avrio-board-adc-sensor.h"
213 /* internal inline functions ================================================ */
214 
215 // -----------------------------------------------------------------------------
216 INLINE void
217 vAdcSensorInit (xAdcSensor *pSensor, xAdcSensorSetting *pSetting,
218  eAdcSensorType eType, uint8_t ucAdcChan, uint8_t ucTerms) {
219 
220  pSensor->pSetting = pSetting;
221  pSensor->ucAdcChan = ucAdcChan;
222  pSensor->eType = eType;
223  pSensor->ucTerms = ucTerms;
224  pSensor->eFilter = (ucTerms > 1 ? eAdcAverage : eAdcRaw);
225 }
226 
227 // -----------------------------------------------------------------------------
228 INLINE double
229 dAdcSensorGetValue (xAdcSensor *pSensor) {
230 
231  return dAdcSensorRawToValue (pSensor, usAdcSensorGetRaw (pSensor));
232 }
233 
234 # endif /* __DOXYGEN__ not defined */
235 
236 
237 /* ========================================================================== */
238 __END_C_DECLS
239 #endif /* _AVRIO_ADC_SENSOR_H_ not defined */
double dAdcSensorRawToValue(xAdcSensor *pSensor, uint16_t usRaw)
Convertit une valeur ADC en grandeur capteur.
struct xAdcSensor xAdcSensor
Capteur.
Capteur.
Definition: adc_sensor.h:137
struct xAdcSensorLinearSetting xAdcSensorLinearSetting
double dRawMax
Valeur en sortie de l&#39;ADC associée à dValueMax.
Definition: adc_sensor.h:111
uint16_t usAdcSensorGetRaw(xAdcSensor *pSensor)
Lecture valeur brute ADC.
uint8_t ucAdcScale
Echelle de la dernière mesure.
Definition: adc_sensor.h:141
uint8_t ucTerms
Nombre de mesure pour le filtrage.
Definition: adc_sensor.h:142
double dValueMin
Grandeur minimale en sortie du capteur.
Definition: adc_sensor.h:108
eAdcSensorType
Definition: adc_sensor.h:91
double(* dAdcSensorConvert)(struct xAdcSensor *, uint16_t)
Definition: adc_sensor.h:100
union xAdcSensorSetting xAdcSensorSetting
uint8_t ucAdcChan
Voie ADC du capteur.
Definition: adc_sensor.h:140
xAdcSensorSetting * pSetting
Repère d&#39;étalonnage.
Definition: adc_sensor.h:139
Capteur non linéaire.
Definition: adc_sensor.h:94
eAdcSensorType eType
Type de capteur.
Definition: adc_sensor.h:143
eAdcFilter
Type de filtrage de la mesure.
Definition: adc.h:64
struct xAdcSensorNlinearSetting xAdcSensorNlinearSetting
double dValueMax
Grandeur maximale en sortie du capteur.
Definition: adc_sensor.h:109
Mesure avec moyennage.
Definition: adc.h:66
void vAdcSensorInit(xAdcSensor *pSensor, xAdcSensorSetting *pSetting, eAdcSensorType eType, uint8_t ucAdcChan, uint8_t ucTerms)
Initialisation capteur.
double * dCoeff
Tableau de coefficients pour la conversion.
Definition: adc_sensor.h:119
double dRawMin
Valeur en sortie de l&#39;ADC associée à dValueMin.
Definition: adc_sensor.h:110
eAdcFilter eFilter
Type de filtrage (Moyennage par défaut)
Definition: adc_sensor.h:144
Capteur linéaire.
Definition: adc_sensor.h:93
Mesure directe de l&#39;ADC.
Definition: adc.h:65
double dAdcSensorGetValue(xAdcSensor *pSensor)
Lecture grandeur capteur.
dAdcSensorConvert dRawToValue
Fonction de conversion non linéaire.
Definition: adc_sensor.h:120