TMP175 Temperature Sensor
TMP175.h@0:e177f6671b88, 2011-02-02 (annotated)
- Committer:
- Suky
- Date:
- Wed Feb 02 23:55:19 2011 +0000
- Revision:
- 0:e177f6671b88
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Suky | 0:e177f6671b88 | 1 | /* |
Suky | 0:e177f6671b88 | 2 | \file TMP175.h |
Suky | 0:e177f6671b88 | 3 | \version: 1.0 |
Suky | 0:e177f6671b88 | 4 | |
Suky | 0:e177f6671b88 | 5 | \brief Este fichero contiene funciones para control de TMP175/75 |
Suky | 0:e177f6671b88 | 6 | |
Suky | 0:e177f6671b88 | 7 | \web www.micros-designs.com.ar |
Suky | 0:e177f6671b88 | 8 | \date 02/02/11 |
Suky | 0:e177f6671b88 | 9 | |
Suky | 0:e177f6671b88 | 10 | *- Version Log --------------------------------------------------------------* |
Suky | 0:e177f6671b88 | 11 | * Fecha Autor Comentarios * |
Suky | 0:e177f6671b88 | 12 | *----------------------------------------------------------------------------* |
Suky | 0:e177f6671b88 | 13 | * 02/02/11 Suky Original * |
Suky | 0:e177f6671b88 | 14 | *----------------------------------------------------------------------------*/ |
Suky | 0:e177f6671b88 | 15 | /////////////////////////////////////////////////////////////////////////// |
Suky | 0:e177f6671b88 | 16 | //// //// |
Suky | 0:e177f6671b88 | 17 | //// //// |
Suky | 0:e177f6671b88 | 18 | //// (C) Copyright 2011 www.micros-designs.com.ar //// |
Suky | 0:e177f6671b88 | 19 | //// Este código puede ser usado, modificado y distribuido libremente //// |
Suky | 0:e177f6671b88 | 20 | //// sin eliminar esta cabecera y sin garantía de ningún tipo. //// |
Suky | 0:e177f6671b88 | 21 | //// //// |
Suky | 0:e177f6671b88 | 22 | //// //// |
Suky | 0:e177f6671b88 | 23 | /////////////////////////////////////////////////////////////////////////// |
Suky | 0:e177f6671b88 | 24 | #include "mbed.h" |
Suky | 0:e177f6671b88 | 25 | |
Suky | 0:e177f6671b88 | 26 | |
Suky | 0:e177f6671b88 | 27 | class TMP175{ |
Suky | 0:e177f6671b88 | 28 | public: |
Suky | 0:e177f6671b88 | 29 | #define SHUTDOWN_MODE_OFF 0x00 |
Suky | 0:e177f6671b88 | 30 | #define SHUTDOWN_MODE_ON 0x01 |
Suky | 0:e177f6671b88 | 31 | #define COMPARATOR_MODE 0x00 |
Suky | 0:e177f6671b88 | 32 | #define INTERRUPT_MODE 0x02 |
Suky | 0:e177f6671b88 | 33 | #define POLARITY_0 0x00 |
Suky | 0:e177f6671b88 | 34 | #define POLARITY_1 0x04 |
Suky | 0:e177f6671b88 | 35 | #define FAULT_QUEUE_1 0x00 |
Suky | 0:e177f6671b88 | 36 | #define FAULT_QUEUE_2 0x08 |
Suky | 0:e177f6671b88 | 37 | #define FAULT_QUEUE_4 0x10 |
Suky | 0:e177f6671b88 | 38 | #define FAULT_QUEUE_6 0x18 |
Suky | 0:e177f6671b88 | 39 | #define RESOLUTION_9 0x00 |
Suky | 0:e177f6671b88 | 40 | #define RESOLUTION_10 0x20 |
Suky | 0:e177f6671b88 | 41 | #define RESOLUTION_11 0x40 |
Suky | 0:e177f6671b88 | 42 | #define RESOLUTION_12 0x60 |
Suky | 0:e177f6671b88 | 43 | #define ONE_SHOT 0x80 |
Suky | 0:e177f6671b88 | 44 | TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT=NC); |
Suky | 0:e177f6671b88 | 45 | void vSetConfigurationTMP175(unsigned char Config,unsigned char Address); |
Suky | 0:e177f6671b88 | 46 | void vStartSingleConversionTMP175(void); |
Suky | 0:e177f6671b88 | 47 | float fReadTemperatureTMP175(void); |
Suky | 0:e177f6671b88 | 48 | void vSetTemperatureLowTMP175(float Value); |
Suky | 0:e177f6671b88 | 49 | void vSetTemperatureHighTMP175(float Value); |
Suky | 0:e177f6671b88 | 50 | float fReadTemperatureHighTMP175(void); |
Suky | 0:e177f6671b88 | 51 | float fReadTemperatureLowTMP175(void); |
Suky | 0:e177f6671b88 | 52 | bool bReadPinAlertTMP175(void); |
Suky | 0:e177f6671b88 | 53 | #ifdef MBED_OPERATORS |
Suky | 0:e177f6671b88 | 54 | operator float(); |
Suky | 0:e177f6671b88 | 55 | #endif |
Suky | 0:e177f6671b88 | 56 | protected: |
Suky | 0:e177f6671b88 | 57 | unsigned char _Address, Rotar; |
Suky | 0:e177f6671b88 | 58 | float Factor; |
Suky | 0:e177f6671b88 | 59 | unsigned short Mascara; |
Suky | 0:e177f6671b88 | 60 | I2C Bus; |
Suky | 0:e177f6671b88 | 61 | DigitalIn _PIN_ALERT; |
Suky | 0:e177f6671b88 | 62 | }; |
Suky | 0:e177f6671b88 | 63 | |
Suky | 0:e177f6671b88 | 64 | TMP175::TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT) |
Suky | 0:e177f6671b88 | 65 | :Bus(PIN_SDA,PIN_SCL),_PIN_ALERT(PIN_ALERT){ |
Suky | 0:e177f6671b88 | 66 | } |
Suky | 0:e177f6671b88 | 67 | |
Suky | 0:e177f6671b88 | 68 | void TMP175::vSetConfigurationTMP175(unsigned char Config,unsigned char Address){ |
Suky | 0:e177f6671b88 | 69 | |
Suky | 0:e177f6671b88 | 70 | _Address=Address<<1; |
Suky | 0:e177f6671b88 | 71 | switch(Config&0x60){ |
Suky | 0:e177f6671b88 | 72 | case 0x00: |
Suky | 0:e177f6671b88 | 73 | Factor=0.5; |
Suky | 0:e177f6671b88 | 74 | Mascara=0x00FF; |
Suky | 0:e177f6671b88 | 75 | Rotar=3; |
Suky | 0:e177f6671b88 | 76 | break; |
Suky | 0:e177f6671b88 | 77 | case 0x20: |
Suky | 0:e177f6671b88 | 78 | Factor=0.25; |
Suky | 0:e177f6671b88 | 79 | Mascara=0x01FF; |
Suky | 0:e177f6671b88 | 80 | Rotar=2; |
Suky | 0:e177f6671b88 | 81 | break; |
Suky | 0:e177f6671b88 | 82 | case 0x40: |
Suky | 0:e177f6671b88 | 83 | Factor=0.125; |
Suky | 0:e177f6671b88 | 84 | Mascara=0x03FF; |
Suky | 0:e177f6671b88 | 85 | Rotar=1; |
Suky | 0:e177f6671b88 | 86 | break; |
Suky | 0:e177f6671b88 | 87 | case 0x60: |
Suky | 0:e177f6671b88 | 88 | Factor=0.0625; |
Suky | 0:e177f6671b88 | 89 | Mascara=0x07FF; |
Suky | 0:e177f6671b88 | 90 | Rotar=0; |
Suky | 0:e177f6671b88 | 91 | break; |
Suky | 0:e177f6671b88 | 92 | } |
Suky | 0:e177f6671b88 | 93 | |
Suky | 0:e177f6671b88 | 94 | Bus.start(); |
Suky | 0:e177f6671b88 | 95 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 96 | Bus.write(0x01); |
Suky | 0:e177f6671b88 | 97 | Bus.write(Config); |
Suky | 0:e177f6671b88 | 98 | Bus.stop(); |
Suky | 0:e177f6671b88 | 99 | } |
Suky | 0:e177f6671b88 | 100 | |
Suky | 0:e177f6671b88 | 101 | void TMP175::vSetTemperatureLowTMP175(float Value){ |
Suky | 0:e177f6671b88 | 102 | unsigned short Temp; |
Suky | 0:e177f6671b88 | 103 | |
Suky | 0:e177f6671b88 | 104 | if(Value>=0.0){ |
Suky | 0:e177f6671b88 | 105 | Temp=Value/0.0625; |
Suky | 0:e177f6671b88 | 106 | }else{ |
Suky | 0:e177f6671b88 | 107 | Temp=(Value+128.0)/0.0625; |
Suky | 0:e177f6671b88 | 108 | Temp!=0x0800; |
Suky | 0:e177f6671b88 | 109 | } |
Suky | 0:e177f6671b88 | 110 | Temp<<=4; |
Suky | 0:e177f6671b88 | 111 | |
Suky | 0:e177f6671b88 | 112 | Bus.start(); |
Suky | 0:e177f6671b88 | 113 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 114 | Bus.write(0x02); |
Suky | 0:e177f6671b88 | 115 | Bus.write(*((unsigned char *)&Temp+1)); |
Suky | 0:e177f6671b88 | 116 | Bus.write(*((unsigned char *)&Temp)); |
Suky | 0:e177f6671b88 | 117 | Bus.stop(); |
Suky | 0:e177f6671b88 | 118 | } |
Suky | 0:e177f6671b88 | 119 | |
Suky | 0:e177f6671b88 | 120 | float TMP175::fReadTemperatureLowTMP175(void){ |
Suky | 0:e177f6671b88 | 121 | unsigned short Temp; |
Suky | 0:e177f6671b88 | 122 | float Cal; |
Suky | 0:e177f6671b88 | 123 | |
Suky | 0:e177f6671b88 | 124 | Bus.start(); |
Suky | 0:e177f6671b88 | 125 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 126 | Bus.write(0x02); |
Suky | 0:e177f6671b88 | 127 | Bus.start(); |
Suky | 0:e177f6671b88 | 128 | Bus.write(_Address | 0x01); |
Suky | 0:e177f6671b88 | 129 | *((unsigned char *)&Temp+1)=Bus.read(1); |
Suky | 0:e177f6671b88 | 130 | *((unsigned char *)&Temp)=Bus.read(0); |
Suky | 0:e177f6671b88 | 131 | Bus.stop(); |
Suky | 0:e177f6671b88 | 132 | |
Suky | 0:e177f6671b88 | 133 | Temp>>=4; |
Suky | 0:e177f6671b88 | 134 | Cal=Temp*0.0625; |
Suky | 0:e177f6671b88 | 135 | if((0x0800&Temp)!=0x0000){ |
Suky | 0:e177f6671b88 | 136 | Cal-=128.0; |
Suky | 0:e177f6671b88 | 137 | } |
Suky | 0:e177f6671b88 | 138 | |
Suky | 0:e177f6671b88 | 139 | return(Cal); |
Suky | 0:e177f6671b88 | 140 | } |
Suky | 0:e177f6671b88 | 141 | |
Suky | 0:e177f6671b88 | 142 | void TMP175::vSetTemperatureHighTMP175(float Value){ |
Suky | 0:e177f6671b88 | 143 | unsigned short Temp; |
Suky | 0:e177f6671b88 | 144 | |
Suky | 0:e177f6671b88 | 145 | if(Value>=0.0){ |
Suky | 0:e177f6671b88 | 146 | Temp=Value/0.0625; |
Suky | 0:e177f6671b88 | 147 | }else{ |
Suky | 0:e177f6671b88 | 148 | Temp=(Value+128.0)/0.0625; |
Suky | 0:e177f6671b88 | 149 | Temp!=0x0800; |
Suky | 0:e177f6671b88 | 150 | } |
Suky | 0:e177f6671b88 | 151 | Temp<<=4; |
Suky | 0:e177f6671b88 | 152 | |
Suky | 0:e177f6671b88 | 153 | Bus.start(); |
Suky | 0:e177f6671b88 | 154 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 155 | Bus.write(0x03); |
Suky | 0:e177f6671b88 | 156 | Bus.write(*((unsigned char *)&Temp+1)); |
Suky | 0:e177f6671b88 | 157 | Bus.write(*((unsigned char *)&Temp)); |
Suky | 0:e177f6671b88 | 158 | Bus.stop(); |
Suky | 0:e177f6671b88 | 159 | } |
Suky | 0:e177f6671b88 | 160 | |
Suky | 0:e177f6671b88 | 161 | float TMP175::fReadTemperatureHighTMP175(void){ |
Suky | 0:e177f6671b88 | 162 | unsigned short Temp; |
Suky | 0:e177f6671b88 | 163 | float Cal; |
Suky | 0:e177f6671b88 | 164 | |
Suky | 0:e177f6671b88 | 165 | Bus.start(); |
Suky | 0:e177f6671b88 | 166 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 167 | Bus.write(0x03); |
Suky | 0:e177f6671b88 | 168 | Bus.start(); |
Suky | 0:e177f6671b88 | 169 | Bus.write(_Address | 0x01); |
Suky | 0:e177f6671b88 | 170 | *((unsigned char *)&Temp+1)=Bus.read(1); |
Suky | 0:e177f6671b88 | 171 | *((unsigned char *)&Temp)=Bus.read(0); |
Suky | 0:e177f6671b88 | 172 | Bus.stop(); |
Suky | 0:e177f6671b88 | 173 | |
Suky | 0:e177f6671b88 | 174 | Temp>>=4; |
Suky | 0:e177f6671b88 | 175 | Cal=Temp*0.0625; |
Suky | 0:e177f6671b88 | 176 | if((0x0800&Temp)!=0x0000){ |
Suky | 0:e177f6671b88 | 177 | Cal-=128.0; |
Suky | 0:e177f6671b88 | 178 | } |
Suky | 0:e177f6671b88 | 179 | |
Suky | 0:e177f6671b88 | 180 | return(Cal); |
Suky | 0:e177f6671b88 | 181 | } |
Suky | 0:e177f6671b88 | 182 | |
Suky | 0:e177f6671b88 | 183 | float TMP175::fReadTemperatureTMP175(void){ |
Suky | 0:e177f6671b88 | 184 | unsigned short Temp; |
Suky | 0:e177f6671b88 | 185 | float Cal; |
Suky | 0:e177f6671b88 | 186 | |
Suky | 0:e177f6671b88 | 187 | Bus.start(); |
Suky | 0:e177f6671b88 | 188 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 189 | Bus.write(0x00); |
Suky | 0:e177f6671b88 | 190 | Bus.start(); |
Suky | 0:e177f6671b88 | 191 | Bus.write(_Address | 0x01); |
Suky | 0:e177f6671b88 | 192 | *((unsigned char *)&Temp+1)=Bus.read(1); |
Suky | 0:e177f6671b88 | 193 | *((unsigned char *)&Temp)=Bus.read(0); |
Suky | 0:e177f6671b88 | 194 | Bus.stop(); |
Suky | 0:e177f6671b88 | 195 | |
Suky | 0:e177f6671b88 | 196 | Temp>>=(Rotar+4); |
Suky | 0:e177f6671b88 | 197 | Cal=((float)Factor*(Temp&Mascara)); |
Suky | 0:e177f6671b88 | 198 | if(((~Mascara)&Temp)!=0x0000){ |
Suky | 0:e177f6671b88 | 199 | Cal-=128.0; |
Suky | 0:e177f6671b88 | 200 | } |
Suky | 0:e177f6671b88 | 201 | |
Suky | 0:e177f6671b88 | 202 | return(Cal); |
Suky | 0:e177f6671b88 | 203 | } |
Suky | 0:e177f6671b88 | 204 | |
Suky | 0:e177f6671b88 | 205 | // Only SHUTDOWN MODE |
Suky | 0:e177f6671b88 | 206 | void TMP175::vStartSingleConversionTMP175(void){ |
Suky | 0:e177f6671b88 | 207 | unsigned char Temp; |
Suky | 0:e177f6671b88 | 208 | |
Suky | 0:e177f6671b88 | 209 | Bus.start(); |
Suky | 0:e177f6671b88 | 210 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 211 | Bus.write(0x01); |
Suky | 0:e177f6671b88 | 212 | Bus.start(); |
Suky | 0:e177f6671b88 | 213 | Bus.write(_Address | 0x01); |
Suky | 0:e177f6671b88 | 214 | Temp=Bus.read(0); |
Suky | 0:e177f6671b88 | 215 | Bus.stop(); |
Suky | 0:e177f6671b88 | 216 | |
Suky | 0:e177f6671b88 | 217 | Bus.start(); |
Suky | 0:e177f6671b88 | 218 | Bus.write(_Address&0xFE); |
Suky | 0:e177f6671b88 | 219 | Bus.write(0x01); |
Suky | 0:e177f6671b88 | 220 | Bus.write(Temp|0x80); |
Suky | 0:e177f6671b88 | 221 | Bus.stop(); |
Suky | 0:e177f6671b88 | 222 | } |
Suky | 0:e177f6671b88 | 223 | |
Suky | 0:e177f6671b88 | 224 | TMP175::operator float(){ |
Suky | 0:e177f6671b88 | 225 | |
Suky | 0:e177f6671b88 | 226 | return(fReadTemperatureTMP175()); |
Suky | 0:e177f6671b88 | 227 | } |
Suky | 0:e177f6671b88 | 228 | |
Suky | 0:e177f6671b88 | 229 | bool TMP175::bReadPinAlertTMP175(void){ |
Suky | 0:e177f6671b88 | 230 | |
Suky | 0:e177f6671b88 | 231 | return(_PIN_ALERT); |
Suky | 0:e177f6671b88 | 232 | } |