?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 6

Line No. Rev Author Line
1 6 kaklik /*! \file ds1631.c \brief Dallas DS1631 Temperature Sensor Driver Library. */
2 //*****************************************************************************
3 //
4 // File Name : 'ds1631.c'
5 // Title : Dallas DS1631 Temperature Sensor Driver Library
6 // Author : Pascal Stang - Copyright (C) 2004
7 // Created : 2004.02.10
8 // Revised : 2004.02.19
9 // Version : 0.1
10 // Target MCU : Atmel AVR Series
11 // Editor Tabs : 4
12 //
13 // NOTE: This code is currently below version 1.0, and therefore is considered
14 // to be lacking in some functionality or documentation, or may not be fully
15 // tested. Nonetheless, you can expect most functions to work.
16 //
17 // This code is distributed under the GNU Public License
18 // which can be found at http://www.gnu.org/licenses/gpl.txt
19 //
20 //*****************************************************************************
21  
22 #include <avr/io.h>
23 #include <avr/interrupt.h>
24  
25 #include "global.h"
26 #include "timer.h"
27 #include "i2c.h"
28 #include "ds1631.h"
29  
30 // global variables
31  
32 // Functions
33 u08 ds1631Init(u08 i2cAddr)
34 {
35 u08 chip_ok;
36 // issue a reset
37 if(ds1631Reset(i2cAddr) == I2C_OK)
38 chip_ok = TRUE;
39 else
40 chip_ok = FALSE;
41 // set a default configuration
42 // (1-shot mode, T_OUT active high, and 12-bit conversion)
43 ds1631SetConfig(i2cAddr,
44 DS1631_CONFIG_1SHOT | DS1631_CONFIG_POL |
45 DS1631_CONFIG_R0 | DS1631_CONFIG_R1);
46 return chip_ok;
47 }
48  
49 u08 ds1631Reset(u08 i2cAddr)
50 {
51 u08 buffer[1];
52 // return the DS1631 to power-on reset defaults
53 buffer[0] = DS1631_CMD_SWPOR;
54 return i2cMasterSendNI(i2cAddr, 1, buffer);
55 }
56  
57 void ds1631SetConfig(u08 i2cAddr, u08 config)
58 {
59 u08 buffer[2];
60 // write the DS1631 configuration byte
61 buffer[0] = DS1631_CMD_ACCESSCONFIG;
62 buffer[1] = config;
63 i2cMasterSendNI(i2cAddr, 2, buffer);
64 }
65  
66 u08 ds1631GetConfig(u08 i2cAddr)
67 {
68 u08 buffer[1];
69 // write the DS1631 configuration byte
70 buffer[0] = DS1631_CMD_ACCESSCONFIG;
71 i2cMasterSendNI(i2cAddr, 2, buffer);
72 i2cMasterReceiveNI(i2cAddr, 2, buffer);
73 return buffer[0];
74 }
75  
76 void ds1631StartConvert(u08 i2cAddr)
77 {
78 u08 buffer[1];
79 // send the DS1631 Start Convert command
80 buffer[0] = DS1631_CMD_STARTCONV;
81 i2cMasterSendNI(i2cAddr, 1, buffer);
82 }
83  
84 void ds1631StopConvert(u08 i2cAddr)
85 {
86 u08 buffer[1];
87 // send the DS1631 Stop Convert command
88 buffer[0] = DS1631_CMD_STOPCONV;
89 i2cMasterSendNI(i2cAddr, 1, buffer);
90 }
91  
92 s16 ds1631ReadTemp(u08 i2cAddr)
93 {
94 // read the Temperature register and return the result
95 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_READTEMP);
96 }
97  
98 void ds1631SetTH(u08 i2cAddr, s16 value)
99 {
100 // write the TH register
101 ds1631WriteTempReg(i2cAddr, DS1631_CMD_ACCESSTH, value);
102 }
103  
104 void ds1631SetTL(u08 i2cAddr, s16 value)
105 {
106 // write the TL register
107 ds1631WriteTempReg(i2cAddr, DS1631_CMD_ACCESSTL, value);
108 }
109  
110 s16 ds1631GetTH(u08 i2cAddr)
111 {
112 // read the TH register and return the result
113 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_ACCESSTH);
114 }
115  
116 s16 ds1631GetTL(u08 i2cAddr)
117 {
118 // read the TL register and return the result
119 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_ACCESSTL);
120 }
121  
122  
123 s16 ds1631ReadTempReg(u08 i2cAddr, u08 cmd)
124 {
125 u08 buffer[2];
126 s16 T;
127  
128 // read the temperature value from the requested register
129 i2cMasterSendNI(i2cAddr, 1, &cmd);
130 i2cMasterReceiveNI(i2cAddr, 2, buffer);
131 // pack bytes
132 T = (s16)((buffer[0]<<8) | buffer[1]);
133 // return result
134 return T;
135 }
136  
137 void ds1631WriteTempReg(u08 i2cAddr, u08 cmd, s16 value)
138 {
139 u08 buffer[3];
140  
141 // write the requested register with a temperature value
142 buffer[0] = cmd;
143 buffer[1] = value>>8;
144 buffer[2] = value;
145 i2cMasterSendNI(i2cAddr, 3, buffer);
146 }
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3