00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <avr/io.h>
00023 #include <avr/signal.h>
00024 #include <avr/interrupt.h>
00025
00026 #include "global.h"
00027 #include "timer.h"
00028 #include "i2c.h"
00029 #include "ds1631.h"
00030
00031
00032
00033
00034 u08 ds1631Init(u08 i2cAddr)
00035 {
00036 u08 chip_ok;
00037
00038 if(ds1631Reset(i2cAddr) == I2C_OK)
00039 chip_ok = TRUE;
00040 else
00041 chip_ok = FALSE;
00042
00043
00044 ds1631SetConfig(i2cAddr,
00045 DS1631_CONFIG_1SHOT | DS1631_CONFIG_POL |
00046 DS1631_CONFIG_R0 | DS1631_CONFIG_R1);
00047 return chip_ok;
00048 }
00049
00050 u08 ds1631Reset(u08 i2cAddr)
00051 {
00052 u08 buffer[1];
00053
00054 buffer[0] = DS1631_CMD_SWPOR;
00055 return i2cMasterSendNI(i2cAddr, 1, buffer);
00056 }
00057
00058 void ds1631SetConfig(u08 i2cAddr, u08 config)
00059 {
00060 u08 buffer[2];
00061
00062 buffer[0] = DS1631_CMD_ACCESSCONFIG;
00063 buffer[1] = config;
00064 i2cMasterSendNI(i2cAddr, 2, buffer);
00065 }
00066
00067 u08 ds1631GetConfig(u08 i2cAddr)
00068 {
00069 u08 buffer[1];
00070
00071 buffer[0] = DS1631_CMD_ACCESSCONFIG;
00072 i2cMasterSendNI(i2cAddr, 2, buffer);
00073 i2cMasterReceiveNI(i2cAddr, 2, buffer);
00074 return buffer[0];
00075 }
00076
00077 void ds1631StartConvert(u08 i2cAddr)
00078 {
00079 u08 buffer[1];
00080
00081 buffer[0] = DS1631_CMD_STARTCONV;
00082 i2cMasterSendNI(i2cAddr, 1, buffer);
00083 }
00084
00085 void ds1631StopConvert(u08 i2cAddr)
00086 {
00087 u08 buffer[1];
00088
00089 buffer[0] = DS1631_CMD_STOPCONV;
00090 i2cMasterSendNI(i2cAddr, 1, buffer);
00091 }
00092
00093 s16 ds1631ReadTemp(u08 i2cAddr)
00094 {
00095
00096 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_READTEMP);
00097 }
00098
00099 void ds1631SetTH(u08 i2cAddr, s16 value)
00100 {
00101
00102 ds1631WriteTempReg(i2cAddr, DS1631_CMD_ACCESSTH, value);
00103 }
00104
00105 void ds1631SetTL(u08 i2cAddr, s16 value)
00106 {
00107
00108 ds1631WriteTempReg(i2cAddr, DS1631_CMD_ACCESSTL, value);
00109 }
00110
00111 s16 ds1631GetTH(u08 i2cAddr)
00112 {
00113
00114 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_ACCESSTH);
00115 }
00116
00117 s16 ds1631GetTL(u08 i2cAddr)
00118 {
00119
00120 return ds1631ReadTempReg(i2cAddr, DS1631_CMD_ACCESSTL);
00121 }
00122
00123
00124 s16 ds1631ReadTempReg(u08 i2cAddr, u08 cmd)
00125 {
00126 u08 buffer[2];
00127 s16 T;
00128
00129
00130 i2cMasterSendNI(i2cAddr, 1, &cmd);
00131 i2cMasterReceiveNI(i2cAddr, 2, buffer);
00132
00133 T = (s16)((buffer[0]<<8) | buffer[1]);
00134
00135 return T;
00136 }
00137
00138 void ds1631WriteTempReg(u08 i2cAddr, u08 cmd, s16 value)
00139 {
00140 u08 buffer[3];
00141
00142
00143 buffer[0] = cmd;
00144 buffer[1] = value>>8;
00145 buffer[2] = value;
00146 i2cMasterSendNI(i2cAddr, 3, buffer);
00147 }