AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
ds1621.h
1 
21 #ifndef _AVRIO_DS1621_H_
22 #define _AVRIO_DS1621_H_
23 
24 #include <avrio/twi.h>
25 
26 __BEGIN_C_DECLS
27  /* ======================================================================== */
37 /* macros =================================================================== */
38 /* constants ================================================================ */
39 #define DS1621_BASE 0x90
40 #define DS1621_TEMP_ERROR -32768
41 
42 typedef enum {
43  DONE = _BV(7),
44  THF = _BV(6),
45  TLF = _BV(5),
46  NVB = _BV(4),
47  POL = _BV(1),
48  ONESHOT = _BV(0),
50  TAF = THF | TLF,
52 } eDs1621Cmd;
53 
54 /* internal public functions ================================================ */
55 
56 #if defined(__DOXYGEN__)
57 /*
58  * __DOXYGEN__ defined
59  * Partie documentation ne devant pas être compilée.
60  * =============================================================================
61  */
68 void vDs1621Init (xTwiDeviceAddr xDeviceAddr, uint8_t ucConfig);
69 
77 inline void vDs1621Start (xTwiDeviceAddr xDeviceAddr);
78 
85 inline void vDs1621Stop (xTwiDeviceAddr xDeviceAddr);
86 
91 inline eTwiStatus eDs1621LastError (void);
92 
99 inline int16_t iDs1621Temp (xTwiDeviceAddr xDeviceAddr);
100 
106 inline int16_t iDs1621RawTemp(xTwiDeviceAddr xDeviceAddr);
107 
113 double dDs1621HiResTemp (xTwiDeviceAddr xDeviceAddr);
114 
120 inline bool xDs1621IsDone (xTwiDeviceAddr xDeviceAddr);
121 
127 inline bool xDs1621MemIsBusy (xTwiDeviceAddr xDeviceAddr);
128 
135 void vDs1621SetTh (xTwiDeviceAddr xDeviceAddr, int16_t iTh);
136 
142 inline int16_t iDs1621Th (xTwiDeviceAddr xDeviceAddr);
143 
149 inline int16_t iDs1621RawTh(xTwiDeviceAddr xDeviceAddr);
150 
157 void vDs1621SetTl (xTwiDeviceAddr xDeviceAddr, int16_t iTl);
158 
164 inline int16_t iDs1621Tl (xTwiDeviceAddr xDeviceAddr);
165 
171 inline int16_t iDs1621RawTl(xTwiDeviceAddr xDeviceAddr);
172 
178 inline uint8_t ucDs1621Status (xTwiDeviceAddr xDeviceAddr);
179 
185 void vDs1621ClrFlags (xTwiDeviceAddr xDeviceAddr, uint8_t ucFlags);
186 
194 inline uint8_t ucDs1621Counter (xTwiDeviceAddr xDeviceAddr);
195 
203 inline uint8_t ucDs1621Slope (xTwiDeviceAddr xDeviceAddr);
204 
209 #else
210 /*
211  * __DOXYGEN__ not defined
212  * Partie ne devant pas être documentée.
213  * =============================================================================
214  */
215 /* macros =================================================================== */
216 /* Commandes DS1621 */
217 #define DS1621_RDTEMP 0xAA
218 #define DS1621_RWTH 0xA1
219 #define DS1621_RWTL 0xA2
220 #define DS1621_RWCONF 0xAC
221 #define DS1621_RDCNT 0xA8
222 #define DS1621_RDSLOP 0xA9
223 #define DS1621_STARTC 0xEE
224 #define DS1621_STOPC 0x22
225 
226 /* internal public functions ================================================ */
227 /* Fonctions de haut niveau */
228 void vDs1621Init (xTwiDeviceAddr xDeviceAddr, uint8_t ucConfig);
229 void vDs1621SetTh (xTwiDeviceAddr xDeviceAddr, int16_t iTh);
230 void vDs1621SetTl (xTwiDeviceAddr xDeviceAddr, int16_t iTl);
231 void vDs1621ClrFlags (xTwiDeviceAddr xDeviceAddr, uint8_t ucFlags);
232 double dDs1621HiResTemp (xTwiDeviceAddr xDeviceAddr);
233 
234 /* Fonctions de bas niveau */
235 int16_t iDs1621ReadTemp (xTwiDeviceAddr xDeviceAddr, uint8_t ucCmd);
236 int16_t iDs1621ReadRawTemp (xTwiDeviceAddr xDeviceAddr, uint8_t ucCmd);
237 void vDs1621WriteTemp (xTwiDeviceAddr xDeviceAddr, uint8_t ucCmd, int16_t iTemp);
238 uint8_t ucDs1621ReadByte(xTwiDeviceAddr xDeviceAddr, uint8_t ucCmd);
239 void vDs1621SendCmd (xTwiDeviceAddr xDeviceAddr, uint8_t ucCmd);
240 
241 /* public variables ========================================================= */
242 extern eTwiStatus eDs1621LastErrorValue;
243 
244 /* inline public functions ================================================== */
245 // -----------------------------------------------------------------------------
246 INLINE uint8_t
247 ucDs1621Status(xTwiDeviceAddr xDeviceAddr) {
248 
249  return ucDs1621ReadByte(xDeviceAddr, DS1621_RWCONF);
250 }
251 
252 // -----------------------------------------------------------------------------
253 INLINE bool
254 xDs1621IsDone (xTwiDeviceAddr xDeviceAddr) {
255 
256  return ((ucDs1621Status (xDeviceAddr) & DONE) != 0);
257 }
258 
259 // -----------------------------------------------------------------------------
260 INLINE bool
261 xDs1621MemIsBusy (xTwiDeviceAddr xDeviceAddr) {
262 
263  return ((ucDs1621Status (xDeviceAddr) & NVB) != 0);
264 }
265 
266 // -----------------------------------------------------------------------------
267 INLINE void
268 vDs1621Start(xTwiDeviceAddr xDeviceAddr) {
269 
270  vDs1621SendCmd (xDeviceAddr, DS1621_STARTC);
271 }
272 
273 // -----------------------------------------------------------------------------
274 INLINE void
275 vDs1621Stop(xTwiDeviceAddr xDeviceAddr) {
276 
277  vDs1621SendCmd (xDeviceAddr, DS1621_STOPC);
278 }
279 
280 // -----------------------------------------------------------------------------
281 INLINE int16_t
282 iDs1621Temp(xTwiDeviceAddr xDeviceAddr) {
283 
284  return iDs1621ReadTemp(xDeviceAddr, DS1621_RDTEMP);
285 }
286 
287 // -----------------------------------------------------------------------------
288 INLINE int16_t
289 iDs1621Th(xTwiDeviceAddr xDeviceAddr) {
290 
291  return iDs1621ReadTemp(xDeviceAddr, DS1621_RWTH);
292 }
293 
294 // -----------------------------------------------------------------------------
295 INLINE int16_t
296 iDs1621Tl(xTwiDeviceAddr xDeviceAddr) {
297 
298  return iDs1621ReadTemp(xDeviceAddr, DS1621_RWTL);
299 }
300 
301 // -----------------------------------------------------------------------------
302 INLINE int16_t
303 iDs1621RawTemp(xTwiDeviceAddr xDeviceAddr) {
304 
305  return iDs1621ReadRawTemp(xDeviceAddr, DS1621_RDTEMP);
306 }
307 
308 // -----------------------------------------------------------------------------
309 INLINE int16_t
310 iDs1621RawTh(xTwiDeviceAddr xDeviceAddr) {
311 
312  return iDs1621ReadRawTemp(xDeviceAddr, DS1621_RWTH);
313 }
314 
315 // -----------------------------------------------------------------------------
316 INLINE int16_t
317 iDs1621RawTl(xTwiDeviceAddr xDeviceAddr) {
318 
319  return iDs1621ReadRawTemp(xDeviceAddr, DS1621_RWTL);
320 }
321 
322 // -----------------------------------------------------------------------------
323 INLINE uint8_t
324 ucDs1621Counter(xTwiDeviceAddr xDeviceAddr) {
325 
326  return ucDs1621ReadByte(xDeviceAddr, DS1621_RDCNT);
327 }
328 
329 // -----------------------------------------------------------------------------
330 INLINE uint8_t
331 ucDs1621Slope(xTwiDeviceAddr xDeviceAddr) {
332 
333  return ucDs1621ReadByte(xDeviceAddr, DS1621_RDSLOP);
334 }
335 
336 // -----------------------------------------------------------------------------
337 INLINE eTwiStatus
338 eDs1621LastError (void) {
339 
340  return eDs1621LastErrorValue;
341 }
342 
343 #endif /* __DOXYGEN__ not defined */
344 /* ========================================================================== */
345 __END_C_DECLS
346 #endif /* _AVRIO_DS1621_H_ defined */
eDs1621Cmd
Definition: ds1621.h:42
int16_t iDs1621Th(xTwiDeviceAddr xDeviceAddr)
Lire le registre de seuil haut.
eTwiStatus eDs1621LastError(void)
Lecture de la dernière erreur.
bool xDs1621MemIsBusy(xTwiDeviceAddr xDeviceAddr)
Indique si l&#39;écriture dans les registres TH/TL est possible.
Definition: ds1621.h:47
uint8_t ucDs1621Counter(xTwiDeviceAddr xDeviceAddr)
Lire le registre compteur Fonction utile si une grande précision de mesure est nécessaire. cf la page 4 du datasheet du DS1621 (version 090905).
void vDs1621ClrFlags(xTwiDeviceAddr xDeviceAddr, uint8_t ucFlags)
Remise à zéro des drapeaux THF et/ou TLF.
void vDs1621Init(xTwiDeviceAddr xDeviceAddr, uint8_t ucConfig)
Initialise le circuit DS1621 et démarre la conversion.
int16_t iDs1621Temp(xTwiDeviceAddr xDeviceAddr)
Lecture de la dernière température mesurée.
int16_t iDs1621RawTl(xTwiDeviceAddr xDeviceAddr)
Lire le registre de seuil bas.
uint8_t ucDs1621Status(xTwiDeviceAddr xDeviceAddr)
Lecture du registre d&#39;état et de configuration (AC).
eTwiStatus
Codes d&#39;erreur et d&#39;état.
Definition: twi.h:94
int16_t iDs1621Tl(xTwiDeviceAddr xDeviceAddr)
Lire le registre de seuil bas.
Definition: ds1621.h:50
void vDs1621SetTl(xTwiDeviceAddr xDeviceAddr, int16_t iTl)
Ecrire dans le registre de seuil bas Cette fonction est protégée avec xDs1621MemIsBusy() ...
bool xDs1621IsDone(xTwiDeviceAddr xDeviceAddr)
Indique si la conversion est terminée.
int16_t iDs1621RawTh(xTwiDeviceAddr xDeviceAddr)
Lire le registre de seuil haut.
uint8_t ucDs1621Slope(xTwiDeviceAddr xDeviceAddr)
Lire le registre de pente Fonction utile si une grande précision de mesure est nécessaire. cf la page 4 du datasheet du DS1621 (version 090905).
double dDs1621HiResTemp(xTwiDeviceAddr xDeviceAddr)
Lecture de la dernière température mesurée (haute résolution)
void vDs1621Start(xTwiDeviceAddr xDeviceAddr)
Démarrer la conversion En mode 1SHOT, le circuit retourne en mode sommeil à l&#39;issue de la conversion...
Definition: ds1621.h:45
Definition: ds1621.h:44
Definition: ds1621.h:43
#define _BV(n)
Renvoie un masque avec le bit de rang n à 1.
Definition: defs.h:76
void vDs1621SetTh(xTwiDeviceAddr xDeviceAddr, int16_t iTh)
Ecrire dans le registre de seuil haut Cette fonction est protégée avec xDs1621MemIsBusy() ...
int16_t iDs1621RawTemp(xTwiDeviceAddr xDeviceAddr)
Lecture de la dernière température mesurée.
void vDs1621Stop(xTwiDeviceAddr xDeviceAddr)
Arrêter la conversion La conversion en cours se termine avant l&#39;arrêt. Cette fonction n&#39;est donc util...
Definition: ds1621.h:48
Definition: ds1621.h:46
uint8_t xTwiDeviceAddr
Adresse d&#39;un circuit sur le bus I2C.
Definition: twi.h:126