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)
ds2781.cpp@0:de50f9a71c22, 2019-03-04 (annotated)
- Committer:
- EmbeddedSam
- Date:
- Mon Mar 04 14:48:45 2019 +0000
- Revision:
- 0:de50f9a71c22
Initial Commit;
Who changed what in which revision?
User | Revision | Line number | New 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 */ |