TMP175 Temperature Sensor

Dependents:   TMP175_Example

Committer:
Suky
Date:
Wed Feb 02 23:55:19 2011 +0000
Revision:
0:e177f6671b88

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }