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.
ds2482.h
00001 #include "i2c_api.h" 00002 #include "wait_api.h" 00003 00004 /* Driver Object Definition */ 00005 struct sDS2482_t 00006 { 00007 uint32_t u32Flags; 00008 uint8_t u8Addr; 00009 00010 uint8_t u8RomNr[8]; 00011 int16_t i16LastDiscrepancy; 00012 int16_t i16LastFamilyDiscrepancy; 00013 int16_t i16LastDeviceFlag; 00014 uint8_t u8CRC8; 00015 } ; 00016 00017 /* DS2482 Low-Level-Interface */ 00018 int8_t i8DS2482Reset (struct sDS2482_t *dev); 00019 int16_t i16DS2482GetStatus (struct sDS2482_t *dev); 00020 int8_t i8DS2482SetControlBits (struct sDS2482_t *dev, uint8_t u8Flags); 00021 // TODO: extract basic write/read function from higher-level functions below 00022 00023 /* 1Wire Interface Functions */ 00024 int8_t i8DS2482_OWWait (struct sDS2482_t *dev); 00025 int8_t i8DS2482_OWReset (struct sDS2482_t *dev); 00026 int8_t i8DS2482_OWTouchBit (struct sDS2482_t *dev, uint8_t sendbit); 00027 int8_t i8DS2482_OWReadBit (struct sDS2482_t *dev); 00028 int8_t i8DS2482_OWWriteBit (struct sDS2482_t *dev, uint8_t sendbit); 00029 int8_t i8DS2482_OWWriteByte (struct sDS2482_t *dev, uint8_t sendbyte); 00030 int16_t i16DS2482_OWReadByte (struct sDS2482_t *dev); 00031 int8_t i8DS2482_OWBlock (struct sDS2482_t *dev, uint8_t *tran_buf, uint8_t tran_len); 00032 int16_t i16DS2482_OWTouchByte (struct sDS2482_t *dev, uint8_t sendbyte); 00033 int16_t i16DS2482_OWFirst (struct sDS2482_t *dev); 00034 int16_t i16DS2482_OWNext (struct sDS2482_t *dev); 00035 int16_t i16DS2482_OWSearch (struct sDS2482_t *dev); 00036 int16_t i16DS2482_search_triplet (struct sDS2482_t *dev, int search_direction); 00037 int8_t i8DS2482_OWSelectDevice (struct sDS2482_t *dev, uint8_t *u8SN); 00038 int8_t i8DS2482_OWCheckDeviceReady (struct sDS2482_t *dev); 00039 00040 /* DS1820-Specific High-Level-Functions */ 00041 int8_t i8DS2482_OWStartAllDS1820 (struct sDS2482_t *dev, uint8_t u8WaitForCompletion); 00042 int16_t i16DS2482_OWReadDS1820 (struct sDS2482_t *dev, uint8_t *u8SN, uint8_t u8ManualStart); 00043 int8_t i8DS2482_OWReadDS1820Precise(struct sDS2482_t *dev, uint8_t *u8SN, uint8_t u8ManualStart, int16_t *i16Temperature); 00044 00045 /* Helper Function */ 00046 uint8_t calc_crc8 (uint8_t *data_in, int number_of_bytes_to_read); 00047 00048 /* =============== USAGE EXAMPLE =============== 00049 #include "mbed.h" 00050 #include "ds2482.h" 00051 00052 #define MAX_TEMP_SENSORS 16 00053 #define CONNECTED_DS2482_HUBS 2 00054 00055 struct sDS1820_t 00056 { 00057 struct sDS2482_t *hub; 00058 uint8_t u8RomNr[8]; 00059 }; 00060 00061 struct sDS1820_t sDS1820[MAX_TEMP_SENSORS]; 00062 struct sDS2482_t sDS2482[CONNECTED_DS2482_HUBS]; 00063 00064 Serial console(USBTX, USBRX); 00065 I2C i2c (p9, p10); 00066 00067 int8_t i8SetupTempSensors(void) 00068 { 00069 int x=0; 00070 00071 sDS2482[0].u8Addr = DS2482_ADDR1; 00072 sDS2482[1].u8Addr = DS2482_ADDR2; 00073 00074 for(int loop=0; loop<2; loop++) 00075 { 00076 int8_t i8Tmp = i8DS2482Reset(&sDS2482[loop]); 00077 if(i8Tmp) 00078 return i8Tmp; 00079 00080 i8Tmp = i8DS2482SetControlBits(&sDS2482[loop], APU | SPU ); 00081 if(i8Tmp) 00082 return i8Tmp; 00083 00084 i8Tmp = i8DS2482_OWReset(&sDS2482[loop]); 00085 if(i8Tmp) 00086 return i8Tmp; 00087 00088 while(i16DS2482_OWSearch(&sDS2482[loop]) > 0) 00089 { 00090 sDS1820[x].hub = &sDS2482[loop]; 00091 for(int z=0; z<8; z++) 00092 sDS1820[x].u8RomNr[z] = sDS2482[loop].u8RomNr[z]; 00093 x++; 00094 } 00095 } 00096 return x; 00097 } 00098 00099 int main(void) 00100 { 00101 uint8_t u8SensorCount; 00102 00103 mbed_i2c = &i2c; 00104 00105 console.baud(115200); 00106 00107 int8_t i8Ret = i8SetupTempSensors(); 00108 00109 if(i8Ret < 0) 00110 { 00111 console.printf("Error -i8Ret\n"); 00112 while(1); // error occured 00113 } 00114 00115 u8SensorCount = i8Ret; 00116 00117 while(1) 00118 { 00119 // Start Temperature Conversion on all DS1820 00120 for(uint8_t loop = 0; loop < CONNECTED_DS2482_HUBS; loop++) 00121 { 00122 i8Ret = i8DS2482_OWStartAllDS1820(&sDS2482[loop], 0); 00123 if(i8Ret) 00124 { 00125 console.printf("Error %i\n", -i8Ret); 00126 while(1); // error! 00127 } 00128 } 00129 00130 // Wait until all DS1820 have completed the conversion 00131 for(uint8_t loop = 0; loop < CONNECTED_DS2482_HUBS; loop++) 00132 while(!i8DS2482_OWCheckDeviceReady(&sDS2482[loop])); 00133 00134 // Get temperature values and display them 00135 for(uint8_t z=0; z<u8SensorCount; z++) 00136 { 00137 int16_t i16Tmp = i16DS2482_OWReadDS1820(sDS1820[z].hub, sDS1820[z].u8RomNr, 0); 00138 if(i16Tmp < 0) 00139 { 00140 console.printf("Error %i\n", -i16Tmp); 00141 while(1); // error 00142 } 00143 else 00144 { 00145 uint8_t u8Tmp = (i16Tmp-109)/2; 00146 uint8_t u8Tmp2; 00147 if((int16_t)u8Tmp*2+109 != i16Tmp) 00148 u8Tmp2=5; 00149 else 00150 u8Tmp2=0; 00151 console.printf("[%02i] %02i", z+1, u8Tmp); 00152 console.printf(",%iC | ", u8Tmp2); 00153 } 00154 if((z+1)%8==0) 00155 console.printf("\n"); 00156 } 00157 } 00158 } 00159 */ 00160 00161 /* HW Setup */ 00162 #define DS2482_ADDR1 0x30 00163 #define DS2482_ADDR2 0x32 00164 00165 #define POLL_LIMIT 50 00166 00167 #define ACK 1 00168 #define NAK 0 00169 00170 /* DS2482 Status Register Bit Definitions */ 00171 #define STATUS_1WB (1<<0) 00172 #define STATUS_PPD (1<<1) 00173 #define STATUS_SD (1<<2) 00174 #define STATUS_LL (1<<3) 00175 #define STATUS_RST (1<<4) 00176 #define STATUS_SBR (1<<5) 00177 #define STATUS_TSB (1<<6) 00178 #define STATUS_DIR (1<<7) 00179 00180 /* DS2482 Config Register Definitions */ 00181 #define APU 0x1 // active pullup 00182 #define SPU 0x4 // strong pullup 00183 #define OWS 0x8 // 1wire speed 00184 00185 /* Flag Definition */ 00186 #define FLAG_SHORT 0x00000001 00187 00188 /* Error Codes */ 00189 #define DS2482_ERR_NOPRESENCE 2 00190 #define DS2482_ERR_TIMEOUT 3 00191 #define DS2482_ERR_I2CWRITE 4 00192 #define DS2482_ERR_I2CREAD 5 00193 #define DS2482_ERR_CONFIGMISSMATCH 6 00194 #define DS2482_ERR_CHECKSUM 7 00195 00196 /* DS2482 Commands */ 00197 #define DRST 0xF0 00198 #define SRP 0xE1 00199 #define WCFG 0xD2 00200 #define OWRS 0xB4 00201 #define OWSB 0x87 00202 #define OWWB 0xA5 00203 #define OWRB 0x96 00204 #define OWT 0x78 00205 00206 /* 1Wire CRC Definitions */ 00207 #define CRC8INIT 0x00 00208 #define CRC8POLY 0x18 00209
Generated on Sun Jul 17 2022 22:35:34 by
1.7.2