Example of using the DS271 battery monitor on the ESP motor driver board using PC_12 as the OneWire interface (Any other GPIO can be used)

Dependencies:   mbed

Committer:
EmbeddedSam
Date:
Mon Mar 04 14:48:45 2019 +0000
Revision:
0:de50f9a71c22
Initial Commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EmbeddedSam 0:de50f9a71c22 1 #include "ds2781.h"
EmbeddedSam 0:de50f9a71c22 2 #include "OneWire_Methods.h"
EmbeddedSam 0:de50f9a71c22 3
EmbeddedSam 0:de50f9a71c22 4 /* --------------------------------------------------------------------------
EmbeddedSam 0:de50f9a71c22 5 This file includes the functions needed to access and modify the registers
EmbeddedSam 0:de50f9a71c22 6 in a DS2781 using the 1-Wire protocol. The DS2781 is an IC that measures
EmbeddedSam 0:de50f9a71c22 7 voltage, current, accumulated current and temperature. It implements
EmbeddedSam 0:de50f9a71c22 8 capacity estimation algorithms for rechargeable batteries. However, this
EmbeddedSam 0:de50f9a71c22 9 file only includes routines to access the electrical parameters and not
EmbeddedSam 0:de50f9a71c22 10 the age-estimation registers.
EmbeddedSam 0:de50f9a71c22 11 --------------------------------------------------------------------------
EmbeddedSam 0:de50f9a71c22 12 ----------------------
EmbeddedSam 0:de50f9a71c22 13 NOTE_1: The functions that return parameters, do so in the units reported
EmbeddedSam 0:de50f9a71c22 14 in the description of each function. The user should implement the scaling
EmbeddedSam 0:de50f9a71c22 15 on his/her own.
EmbeddedSam 0:de50f9a71c22 16 -------------------------------------------------------------------------- */
EmbeddedSam 0:de50f9a71c22 17
EmbeddedSam 0:de50f9a71c22 18 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 19 * Function name : ReadVoltage *
EmbeddedSam 0:de50f9a71c22 20 * Overview : Returns the voltage measured at the VIN input of the DS2781 *
EmbeddedSam 0:de50f9a71c22 21 * in units of 9.76mV *
EmbeddedSam 0:de50f9a71c22 22 * Return type : 16-bit unsigned int *
EmbeddedSam 0:de50f9a71c22 23 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 24 * Time : < 4.3ms *
EmbeddedSam 0:de50f9a71c22 25 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 26
EmbeddedSam 0:de50f9a71c22 27 int ReadVoltage (void)
EmbeddedSam 0:de50f9a71c22 28 {
EmbeddedSam 0:de50f9a71c22 29 uint16_t result = 0;
EmbeddedSam 0:de50f9a71c22 30 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 31 {
EmbeddedSam 0:de50f9a71c22 32 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 33 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 34 OneWire_WriteByte( 0x0C ); //Register Address
EmbeddedSam 0:de50f9a71c22 35 result = OneWire_ReadByte() << 8; //MSB
EmbeddedSam 0:de50f9a71c22 36 result |= OneWire_ReadByte() ; //LSB
EmbeddedSam 0:de50f9a71c22 37 }
EmbeddedSam 0:de50f9a71c22 38 return (result >> 5);
EmbeddedSam 0:de50f9a71c22 39 }
EmbeddedSam 0:de50f9a71c22 40
EmbeddedSam 0:de50f9a71c22 41 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 42 * Function name : ReadCurrent *
EmbeddedSam 0:de50f9a71c22 43 * Overview : Returns the current measured through Rsns external to DS2781 in *
EmbeddedSam 0:de50f9a71c22 44 * units of 1.5625uV/Rsns. Positive current indicates discharge *
EmbeddedSam 0:de50f9a71c22 45 * Return type : 16-bit unsigned int *
EmbeddedSam 0:de50f9a71c22 46 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 47 * Time : < 4.3ms *
EmbeddedSam 0:de50f9a71c22 48 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 49
EmbeddedSam 0:de50f9a71c22 50 uint16_t ReadCurrent (void)
EmbeddedSam 0:de50f9a71c22 51 {
EmbeddedSam 0:de50f9a71c22 52 uint16_t result = 0;
EmbeddedSam 0:de50f9a71c22 53 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 54 {
EmbeddedSam 0:de50f9a71c22 55 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 56 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 57 OneWire_WriteByte( 0x0E ); //Register Address
EmbeddedSam 0:de50f9a71c22 58 result = ((uint16_t)OneWire_ReadByte() ) << 8; //MSB
EmbeddedSam 0:de50f9a71c22 59 result |= ((uint16_t)OneWire_ReadByte() ); //LSB
EmbeddedSam 0:de50f9a71c22 60 }
EmbeddedSam 0:de50f9a71c22 61 return result;
EmbeddedSam 0:de50f9a71c22 62 }
EmbeddedSam 0:de50f9a71c22 63
EmbeddedSam 0:de50f9a71c22 64 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 65 * Function name : ReadAccumulatedCurrent *
EmbeddedSam 0:de50f9a71c22 66 * Overview : Returns the accumulated current at the DS2781 in units of *
EmbeddedSam 0:de50f9a71c22 67 * 1.526nVhr/Rsns *
EmbeddedSam 0:de50f9a71c22 68 * Return type : 32-bit unsigned long *
EmbeddedSam 0:de50f9a71c22 69 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 70 * Time : < 5.8ms *
EmbeddedSam 0:de50f9a71c22 71 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 72
EmbeddedSam 0:de50f9a71c22 73 uint32_t ReadAccumulatedCurrent (void)
EmbeddedSam 0:de50f9a71c22 74 {
EmbeddedSam 0:de50f9a71c22 75 unsigned long result = 0;
EmbeddedSam 0:de50f9a71c22 76 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 77 {
EmbeddedSam 0:de50f9a71c22 78 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 79 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 80 OneWire_WriteByte( 0x10 ); //Register Address
EmbeddedSam 0:de50f9a71c22 81 result = ((unsigned long)OneWire_ReadByte() ) << 24; //MSB
EmbeddedSam 0:de50f9a71c22 82 result |= ((unsigned long)OneWire_ReadByte() ) << 16;
EmbeddedSam 0:de50f9a71c22 83 result |= ((unsigned long)OneWire_ReadByte() ) << 8;
EmbeddedSam 0:de50f9a71c22 84 result |= ((unsigned long)OneWire_ReadByte() ); //LSB
EmbeddedSam 0:de50f9a71c22 85 }
EmbeddedSam 0:de50f9a71c22 86 return (result >> 4);
EmbeddedSam 0:de50f9a71c22 87 }
EmbeddedSam 0:de50f9a71c22 88
EmbeddedSam 0:de50f9a71c22 89 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 90 * Function name : ResetAccumulatedCurrent *
EmbeddedSam 0:de50f9a71c22 91 * Overview : Resets the accumulated current register at the DS2781 *
EmbeddedSam 0:de50f9a71c22 92 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 93 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 94 * Time : < 4.2ms *
EmbeddedSam 0:de50f9a71c22 95 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 96
EmbeddedSam 0:de50f9a71c22 97 void ResetAccumulatedCurrent (void)
EmbeddedSam 0:de50f9a71c22 98 {
EmbeddedSam 0:de50f9a71c22 99 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 100 {
EmbeddedSam 0:de50f9a71c22 101 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 102 OneWire_WriteByte( WRITE_DATA );
EmbeddedSam 0:de50f9a71c22 103 OneWire_WriteByte( 0x10 ); //Register Address
EmbeddedSam 0:de50f9a71c22 104 OneWire_WriteByte( 0x00 ); //MSB
EmbeddedSam 0:de50f9a71c22 105 OneWire_WriteByte( 0x00 ); //LSB
EmbeddedSam 0:de50f9a71c22 106 }
EmbeddedSam 0:de50f9a71c22 107 }
EmbeddedSam 0:de50f9a71c22 108
EmbeddedSam 0:de50f9a71c22 109 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 110 * Function name : ReadNetAddress *
EmbeddedSam 0:de50f9a71c22 111 * Overview : Returns the net address of the DS2781 *
EmbeddedSam 0:de50f9a71c22 112 * Return type : 64-bit unsigned long long *
EmbeddedSam 0:de50f9a71c22 113 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 114 * Time : < 7.3ms *
EmbeddedSam 0:de50f9a71c22 115 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 116
EmbeddedSam 0:de50f9a71c22 117 uint32_t ReadNetAddress (void)
EmbeddedSam 0:de50f9a71c22 118 {
EmbeddedSam 0:de50f9a71c22 119 uint16_t result = 0;
EmbeddedSam 0:de50f9a71c22 120 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 121 {
EmbeddedSam 0:de50f9a71c22 122 OneWire_WriteByte( READ_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 123 //result = ((Quint16_t)OneWire_ReadByte() ); //MSB
EmbeddedSam 0:de50f9a71c22 124 //result |= ((Quint16_t)OneWire_ReadByte() ) << 8;
EmbeddedSam 0:de50f9a71c22 125 //result |= ((Quint16_t)OneWire_ReadByte() ) << 16;
EmbeddedSam 0:de50f9a71c22 126 //result |= ((Quint16_t)OneWire_ReadByte() ) << 24;
EmbeddedSam 0:de50f9a71c22 127 //result |= ((Quint16_t)OneWire_ReadByte() ) << 32;
EmbeddedSam 0:de50f9a71c22 128 //result |= ((Quint16_t)OneWire_ReadByte() ) << 40;
EmbeddedSam 0:de50f9a71c22 129 //result |= ((Quint16_t)OneWire_ReadByte() ) << 48;
EmbeddedSam 0:de50f9a71c22 130 //result |= ((Quint16_t)OneWire_ReadByte() ) <<56; //LSB
EmbeddedSam 0:de50f9a71c22 131 }
EmbeddedSam 0:de50f9a71c22 132 return result;
EmbeddedSam 0:de50f9a71c22 133 }
EmbeddedSam 0:de50f9a71c22 134
EmbeddedSam 0:de50f9a71c22 135 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 136 * Function name : ReadTemperature *
EmbeddedSam 0:de50f9a71c22 137 * Overview : Returns the temperature measured by the DS2781 in units of *
EmbeddedSam 0:de50f9a71c22 138 * 0.125°C *
EmbeddedSam 0:de50f9a71c22 139 * Return type : 16-bit unsigned int *
EmbeddedSam 0:de50f9a71c22 140 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 141 * Time : < 4.3ms *
EmbeddedSam 0:de50f9a71c22 142 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 143
EmbeddedSam 0:de50f9a71c22 144 uint16_t ReadTemperature (void)
EmbeddedSam 0:de50f9a71c22 145 {
EmbeddedSam 0:de50f9a71c22 146 uint16_t result = 0;
EmbeddedSam 0:de50f9a71c22 147 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 148 {
EmbeddedSam 0:de50f9a71c22 149 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 150 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 151 OneWire_WriteByte( 0x0A ); //Register Address
EmbeddedSam 0:de50f9a71c22 152 result = ((uint16_t)OneWire_ReadByte() ) << 8; //MSB
EmbeddedSam 0:de50f9a71c22 153 result |= ((uint16_t)OneWire_ReadByte() ); //LSB
EmbeddedSam 0:de50f9a71c22 154 }
EmbeddedSam 0:de50f9a71c22 155 return (result >> 5);
EmbeddedSam 0:de50f9a71c22 156 }
EmbeddedSam 0:de50f9a71c22 157
EmbeddedSam 0:de50f9a71c22 158 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 159 * Function name : ReadCurrentOffset *
EmbeddedSam 0:de50f9a71c22 160 * Overview : Returns the value of the current offset register of the DS2781 *
EmbeddedSam 0:de50f9a71c22 161 * in units of 1.56uV/Rsns *
EmbeddedSam 0:de50f9a71c22 162 * Return type : 8-bit uint8_t *
EmbeddedSam 0:de50f9a71c22 163 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 164 * Time : < 3.6ms *
EmbeddedSam 0:de50f9a71c22 165 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 166
EmbeddedSam 0:de50f9a71c22 167 uint8_t ReadCurrentOffset (void)
EmbeddedSam 0:de50f9a71c22 168 {
EmbeddedSam 0:de50f9a71c22 169 uint8_t result = 0;
EmbeddedSam 0:de50f9a71c22 170 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 171 {
EmbeddedSam 0:de50f9a71c22 172 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 173 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 174 OneWire_WriteByte( 0x7B ); //Register Address
EmbeddedSam 0:de50f9a71c22 175 result = OneWire_ReadByte();
EmbeddedSam 0:de50f9a71c22 176 }
EmbeddedSam 0:de50f9a71c22 177 return result;
EmbeddedSam 0:de50f9a71c22 178 }
EmbeddedSam 0:de50f9a71c22 179
EmbeddedSam 0:de50f9a71c22 180 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 181 * Function name : WriteCurrentOffset *
EmbeddedSam 0:de50f9a71c22 182 * Overview : Writes to the current offset register of the DS2781 in units of *
EmbeddedSam 0:de50f9a71c22 183 * 1.56uV/Rsns *
EmbeddedSam 0:de50f9a71c22 184 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 185 * Parameters : Byte to be written to the register in 2's complement *
EmbeddedSam 0:de50f9a71c22 186 * Time : < 3.6ms *
EmbeddedSam 0:de50f9a71c22 187 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 188
EmbeddedSam 0:de50f9a71c22 189 void WriteCurrentOffset (uint8_t offset)
EmbeddedSam 0:de50f9a71c22 190 {
EmbeddedSam 0:de50f9a71c22 191 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 192 {
EmbeddedSam 0:de50f9a71c22 193 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 194 OneWire_WriteByte( WRITE_DATA );
EmbeddedSam 0:de50f9a71c22 195 OneWire_WriteByte( 0x7B ); //Register Address
EmbeddedSam 0:de50f9a71c22 196 OneWire_WriteByte( offset );
EmbeddedSam 0:de50f9a71c22 197 }
EmbeddedSam 0:de50f9a71c22 198 }
EmbeddedSam 0:de50f9a71c22 199
EmbeddedSam 0:de50f9a71c22 200 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 201 * Function name : AdjustCurrentOffset *
EmbeddedSam 0:de50f9a71c22 202 * Overview : Adjusts the value of the current offset register of the DS2781 *
EmbeddedSam 0:de50f9a71c22 203 * by taking into account the offset at no current. Should only *
EmbeddedSam 0:de50f9a71c22 204 * be called when the battery is supplying no current *
EmbeddedSam 0:de50f9a71c22 205 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 206 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 207 * Time : < 3.62s *
EmbeddedSam 0:de50f9a71c22 208 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 209
EmbeddedSam 0:de50f9a71c22 210 void AdjustCurrentOffset (void)
EmbeddedSam 0:de50f9a71c22 211 {
EmbeddedSam 0:de50f9a71c22 212 char offset = 0;
EmbeddedSam 0:de50f9a71c22 213
EmbeddedSam 0:de50f9a71c22 214 WriteCurrentOffset ( 0x0 ); //Reset Current Offset Register
EmbeddedSam 0:de50f9a71c22 215
EmbeddedSam 0:de50f9a71c22 216 //Delay100MSx(36); //Wait 3.6s for current register to update
EmbeddedSam 0:de50f9a71c22 217
EmbeddedSam 0:de50f9a71c22 218 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 219 {
EmbeddedSam 0:de50f9a71c22 220 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 221 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 222 OneWire_WriteByte( 0x0F ); //Current Register LSB
EmbeddedSam 0:de50f9a71c22 223 offset = OneWire_ReadByte();
EmbeddedSam 0:de50f9a71c22 224 }
EmbeddedSam 0:de50f9a71c22 225
EmbeddedSam 0:de50f9a71c22 226 offset = 256 - offset; //2's complement Negating
EmbeddedSam 0:de50f9a71c22 227
EmbeddedSam 0:de50f9a71c22 228 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 229 {
EmbeddedSam 0:de50f9a71c22 230 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 231 OneWire_WriteByte( WRITE_DATA );
EmbeddedSam 0:de50f9a71c22 232 OneWire_WriteByte( 0x7B ); //Current Offset Register
EmbeddedSam 0:de50f9a71c22 233 OneWire_WriteByte( offset );
EmbeddedSam 0:de50f9a71c22 234 }
EmbeddedSam 0:de50f9a71c22 235 }
EmbeddedSam 0:de50f9a71c22 236
EmbeddedSam 0:de50f9a71c22 237 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 238 * Function name : UpdateControlRegister *
EmbeddedSam 0:de50f9a71c22 239 * Overview : Writes to the Control register of the DS2781 using the values *
EmbeddedSam 0:de50f9a71c22 240 * supplied as a byte parameter. Writes to EEPROM addresses are *
EmbeddedSam 0:de50f9a71c22 241 * ignored for up to 15ms after this function is called. *
EmbeddedSam 0:de50f9a71c22 242 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 243 * Parameters : None *
EmbeddedSam 0:de50f9a71c22 244 * Time : < 6.4ms *
EmbeddedSam 0:de50f9a71c22 245 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 246
EmbeddedSam 0:de50f9a71c22 247 void UpdateControlRegister (uint8_t control)
EmbeddedSam 0:de50f9a71c22 248 {
EmbeddedSam 0:de50f9a71c22 249 if( OneWire_Reset() == true )
EmbeddedSam 0:de50f9a71c22 250 {
EmbeddedSam 0:de50f9a71c22 251 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 252 OneWire_WriteByte( WRITE_DATA );
EmbeddedSam 0:de50f9a71c22 253 OneWire_WriteByte( 0x60 ); //Register Address
EmbeddedSam 0:de50f9a71c22 254 OneWire_WriteByte( control );
EmbeddedSam 0:de50f9a71c22 255 }
EmbeddedSam 0:de50f9a71c22 256
EmbeddedSam 0:de50f9a71c22 257 if( OneWire_Reset() == true )
EmbeddedSam 0:de50f9a71c22 258 {
EmbeddedSam 0:de50f9a71c22 259 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 260 OneWire_WriteByte( COPY_DATA );
EmbeddedSam 0:de50f9a71c22 261 OneWire_WriteByte( 0x60 ); //Register Address
EmbeddedSam 0:de50f9a71c22 262 }
EmbeddedSam 0:de50f9a71c22 263 }
EmbeddedSam 0:de50f9a71c22 264
EmbeddedSam 0:de50f9a71c22 265 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 266 * Function name : ReadRAM *
EmbeddedSam 0:de50f9a71c22 267 * Overview : Reads a byte from the shadow RAM of the DS2781 at the given *
EmbeddedSam 0:de50f9a71c22 268 * memory address *
EmbeddedSam 0:de50f9a71c22 269 * Return type : 8-bit uint8_t *
EmbeddedSam 0:de50f9a71c22 270 * Parameters : Address of register to be read *
EmbeddedSam 0:de50f9a71c22 271 * Time : < 3.6ms *
EmbeddedSam 0:de50f9a71c22 272 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 273
EmbeddedSam 0:de50f9a71c22 274 uint8_t ReadRAM (uint8_t addr)
EmbeddedSam 0:de50f9a71c22 275 {
EmbeddedSam 0:de50f9a71c22 276 uint8_t result = 0;
EmbeddedSam 0:de50f9a71c22 277 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 278 {
EmbeddedSam 0:de50f9a71c22 279 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 280 OneWire_WriteByte( READ_DATA );
EmbeddedSam 0:de50f9a71c22 281 OneWire_WriteByte( addr ); //Register Address
EmbeddedSam 0:de50f9a71c22 282 result = OneWire_ReadByte();
EmbeddedSam 0:de50f9a71c22 283 }
EmbeddedSam 0:de50f9a71c22 284 return result;
EmbeddedSam 0:de50f9a71c22 285 }
EmbeddedSam 0:de50f9a71c22 286
EmbeddedSam 0:de50f9a71c22 287 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 288 * Function name : WriteRAM *
EmbeddedSam 0:de50f9a71c22 289 * Overview : Writes the given byte to the shadow RAM of the DS2781 at the *
EmbeddedSam 0:de50f9a71c22 290 * given memory address *
EmbeddedSam 0:de50f9a71c22 291 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 292 * Parameters : Byte to be written, address of register *
EmbeddedSam 0:de50f9a71c22 293 * Time : < 3.6ms *
EmbeddedSam 0:de50f9a71c22 294 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 295
EmbeddedSam 0:de50f9a71c22 296 void WriteRAM (uint8_t byte, uint8_t addr)
EmbeddedSam 0:de50f9a71c22 297 {
EmbeddedSam 0:de50f9a71c22 298 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 299 {
EmbeddedSam 0:de50f9a71c22 300 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 301 OneWire_WriteByte( WRITE_DATA );
EmbeddedSam 0:de50f9a71c22 302 OneWire_WriteByte( addr ); //Register Address
EmbeddedSam 0:de50f9a71c22 303 OneWire_WriteByte( byte );
EmbeddedSam 0:de50f9a71c22 304 }
EmbeddedSam 0:de50f9a71c22 305 }
EmbeddedSam 0:de50f9a71c22 306
EmbeddedSam 0:de50f9a71c22 307 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 308 * Function name : CopyEEPROM *
EmbeddedSam 0:de50f9a71c22 309 * Overview : This function copies the contents of the EEPROM shadow RAM to *
EmbeddedSam 0:de50f9a71c22 310 * EEPROM cells for the EEPROM block containing thr given address. *
EmbeddedSam 0:de50f9a71c22 311 * Writes to EEPROM addresses are ignored for up to 15ms after this *
EmbeddedSam 0:de50f9a71c22 312 * function is called. *
EmbeddedSam 0:de50f9a71c22 313 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 314 * Parameters : Memory address of shadow RAM to be copied *
EmbeddedSam 0:de50f9a71c22 315 * Time : < 2.9ms *
EmbeddedSam 0:de50f9a71c22 316 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 317
EmbeddedSam 0:de50f9a71c22 318 void CopyEEPROM (uint8_t addr)
EmbeddedSam 0:de50f9a71c22 319 {
EmbeddedSam 0:de50f9a71c22 320 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 321 {
EmbeddedSam 0:de50f9a71c22 322 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 323 OneWire_WriteByte( COPY_DATA );
EmbeddedSam 0:de50f9a71c22 324 OneWire_WriteByte( addr );
EmbeddedSam 0:de50f9a71c22 325 }
EmbeddedSam 0:de50f9a71c22 326 }
EmbeddedSam 0:de50f9a71c22 327
EmbeddedSam 0:de50f9a71c22 328 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
EmbeddedSam 0:de50f9a71c22 329 * Function name : RecallEEPROM *
EmbeddedSam 0:de50f9a71c22 330 * Overview : This function copies the contents of the EEPROM cells to the *
EmbeddedSam 0:de50f9a71c22 331 * shadow RAM for the EEPROM block containing the given address. * *
EmbeddedSam 0:de50f9a71c22 332 * Return type : Void *
EmbeddedSam 0:de50f9a71c22 333 * Parameters : Memory address of EEPROM to be copied *
EmbeddedSam 0:de50f9a71c22 334 * Time : < 2.9ms *
EmbeddedSam 0:de50f9a71c22 335 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
EmbeddedSam 0:de50f9a71c22 336
EmbeddedSam 0:de50f9a71c22 337 void RecallEEPROM (uint8_t addr)
EmbeddedSam 0:de50f9a71c22 338 {
EmbeddedSam 0:de50f9a71c22 339 if( OneWire_Reset() == true)
EmbeddedSam 0:de50f9a71c22 340 {
EmbeddedSam 0:de50f9a71c22 341 OneWire_WriteByte( SKIP_NETADDRESS );
EmbeddedSam 0:de50f9a71c22 342 OneWire_WriteByte( RECALL_DATA );
EmbeddedSam 0:de50f9a71c22 343 OneWire_WriteByte( addr );
EmbeddedSam 0:de50f9a71c22 344 }
EmbeddedSam 0:de50f9a71c22 345 }
EmbeddedSam 0:de50f9a71c22 346 /* EOF */