Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: EXAMPLE_Nucleo_mbed_RTOS_test_code
Fork of DS1620 by
DS1620.h
00001 // Library for the DS1620 digital thermometer 00002 // Copyright (C) <2015> Ryan Bancroft 00003 // 00004 // This program is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // For copy of the GNU General Public License 00015 // see <http://www.gnu.org/licenses/>. 00016 00017 00018 #ifndef DS1620_H 00019 #define DS1620_H 00020 00021 #include "mbed.h" 00022 00023 enum clock_frequencies_t {freq500k = 1, 00024 freq250k = 2, 00025 freq125k = 4, 00026 freq20k = 25, 00027 freq10k = 50, 00028 freq1k = 500}; 00029 00030 #define CLOCK_DELAY freq500k 00031 00032 // Command definitions 00033 #define READ_TEMPERATURE 0xAA 00034 #define WRITE_TH 0x01 00035 #define WRITE_TL 0x02 00036 #define READ_TH 0xA1 00037 #define READ_TL 0xA2 00038 #define READ_COUNTER 0xA0 00039 #define READ_SLOPE 0xA9 00040 #define START_CONVERT 0xEE 00041 #define STOP_CONVERT 0x22 00042 #define WRITE_CONFIG 0x0C 00043 #define READ_CONFIG 0xAC 00044 #define LOAD_SLOPE 0x41 00045 00046 /** 00047 * Example: 00048 * @code 00049 * // Send the temperature to your computer 00050 * #include "mbed.h" 00051 * #include "DS1620.h" 00052 * 00053 * DS1620 temperatureSensor(p11, p12, p13); 00054 * Serial pc(USBTX, USBRX); 00055 * 00056 * int main() { 00057 * //Set mode to CPU & One Shot if it's not already set. 00058 * if((temperatureSensor.readConfig() & 0x03) != 0x03) { 00059 * temperatureSensor.writeConfig(0x03); 00060 * } 00061 * 00062 * float temperature = 0.0; 00063 * while(1) { 00064 * temperatureSensor.startConversion(); 00065 * wait(1.0); //Wait for the temperature conversion to complete. You can also poll the DONE flag in the STATUS REGISTER 00066 * temperature = temperatureSensor.getHighResolutionTemperature(); 00067 * pc.printf("%.2f C\r\n", temperature); 00068 * } 00069 * } 00070 * @endcode 00071 */ 00072 00073 // Class declaration 00074 class DS1620 00075 { 00076 public: 00077 DS1620 (PinName dq, PinName clk, PinName rst); 00078 ~DS1620 (); 00079 00080 00081 /** 00082 * Get the temperature in degrees Celsius 00083 * 00084 * @returns The temperature in Celsius with 0.5 degree resolution as a float 00085 */ 00086 float getTemperature(); 00087 00088 00089 /** 00090 * Get the temperature in degrees Celsius 00091 * 00092 * @returns The temperature in Celsius calculated using the COUNTER and SLOPE REGISTERS as a float 00093 * @note The DS1620 must be in 1SHOT mode for accurate results. 00094 */ 00095 float getHighResolutionTemperature(); 00096 00097 /** 00098 * Read the TEMPERATURE REGISTER 00099 * 00100 * @returns The temperature in Celsius with 0.5 degree resolution as stored in the DS1620 registers 00101 */ 00102 unsigned short readTemperatureRaw(); 00103 00104 /** 00105 * Read the CONFIGURATION/STATUS REGISTER 00106 * 00107 * @returns The value of the CONFIGURATION/STATUS REGISTER 00108 */ 00109 unsigned char readConfig(); 00110 00111 /** 00112 * Write to the CONFIGURATION/STATUS REGISTER 00113 * 00114 * @param config The value to write to the CONFIGURATION/STATUS REGISTER 00115 */ 00116 void writeConfig(unsigned char config); 00117 00118 00119 /** 00120 * Read the TL (Thermostat Low Limit) REGISTER 00121 * 00122 * @returns The value to write to the TL (Thermostat Low Limit) REGISTER in the DS1620 format 00123 */ 00124 unsigned short readTLRaw(); 00125 00126 /** 00127 * Write to the TL (Thermostat Low Limit) REGISTER 00128 * 00129 * @param temperature The value to write to the TL (Thermostat Low Limit) REGISTER in the DS1620 format 00130 */ 00131 void writeTLRaw(unsigned short temperature); 00132 00133 00134 /** 00135 * Read the TH (Thermostat High Limit) REGISTER 00136 * 00137 * @returns The value to write to the TH (Thermostat High Limit) REGISTER in the DS1620 format 00138 */ 00139 unsigned short readTHRaw(); 00140 00141 00142 /** 00143 * Write to the TH (Thermostat High Limit) REGISTER 00144 * 00145 * @param temperature The value to write to the TH (Thermostat High Limit) REGISTER in the DS1620 format 00146 */ 00147 void writeTHRaw(unsigned short temperature); 00148 00149 /** 00150 * Read the COUNTER REGISTER 00151 * 00152 * @returns The COUNTER REGISTER 00153 */ 00154 unsigned short readCounter(); 00155 00156 /** 00157 * Read the SLOPE REGISTER 00158 * 00159 * @returns The SLOPE REGISTER 00160 */ 00161 unsigned short readSlope(); 00162 00163 00164 /** 00165 * Loads the SLOPE REGISTER into the COUNTER REGISTER 00166 */ 00167 void loadSlope(); 00168 00169 00170 /** 00171 * Starts a temperature conversion 00172 */ 00173 void startConversion(); 00174 00175 00176 /** 00177 * Stops a temperature conversion 00178 */ 00179 void stopConversion(); 00180 00181 /** 00182 * Sets the clock frequency for the serial interface 00183 * 00184 * @param frequency (freq500k, freq250k, freq125k, freq20k, freq10k, freq1k) 00185 * @note Defaults to 500KHz (freq500k) 00186 */ 00187 void setSerialClockFrequency(clock_frequencies_t frequency); 00188 00189 00190 private: 00191 void shiftOut(unsigned char data); 00192 unsigned char shiftIn(); 00193 00194 clock_frequencies_t _clockDelay; 00195 00196 DigitalInOut _dq; 00197 DigitalOut _clk; 00198 DigitalOut _rst; 00199 00200 }; 00201 00202 #endif
Generated on Tue Jul 12 2022 16:58:33 by
1.7.2
