TMP175 Temperature Sensor
Revision 0:e177f6671b88, committed 2011-02-02
- Comitter:
- Suky
- Date:
- Wed Feb 02 23:55:19 2011 +0000
- Commit message:
Changed in this revision
TMP175.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r e177f6671b88 TMP175.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TMP175.h Wed Feb 02 23:55:19 2011 +0000 @@ -0,0 +1,232 @@ +/* + \file TMP175.h + \version: 1.0 + + \brief Este fichero contiene funciones para control de TMP175/75 + + \web www.micros-designs.com.ar + \date 02/02/11 + + *- Version Log --------------------------------------------------------------* + * Fecha Autor Comentarios * + *----------------------------------------------------------------------------* + * 02/02/11 Suky Original * + *----------------------------------------------------------------------------*/ +/////////////////////////////////////////////////////////////////////////// +//// //// +//// //// +//// (C) Copyright 2011 www.micros-designs.com.ar //// +//// Este código puede ser usado, modificado y distribuido libremente //// +//// sin eliminar esta cabecera y sin garantía de ningún tipo. //// +//// //// +//// //// +/////////////////////////////////////////////////////////////////////////// +#include "mbed.h" + + +class TMP175{ + public: + #define SHUTDOWN_MODE_OFF 0x00 + #define SHUTDOWN_MODE_ON 0x01 + #define COMPARATOR_MODE 0x00 + #define INTERRUPT_MODE 0x02 + #define POLARITY_0 0x00 + #define POLARITY_1 0x04 + #define FAULT_QUEUE_1 0x00 + #define FAULT_QUEUE_2 0x08 + #define FAULT_QUEUE_4 0x10 + #define FAULT_QUEUE_6 0x18 + #define RESOLUTION_9 0x00 + #define RESOLUTION_10 0x20 + #define RESOLUTION_11 0x40 + #define RESOLUTION_12 0x60 + #define ONE_SHOT 0x80 + TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT=NC); + void vSetConfigurationTMP175(unsigned char Config,unsigned char Address); + void vStartSingleConversionTMP175(void); + float fReadTemperatureTMP175(void); + void vSetTemperatureLowTMP175(float Value); + void vSetTemperatureHighTMP175(float Value); + float fReadTemperatureHighTMP175(void); + float fReadTemperatureLowTMP175(void); + bool bReadPinAlertTMP175(void); + #ifdef MBED_OPERATORS + operator float(); + #endif + protected: + unsigned char _Address, Rotar; + float Factor; + unsigned short Mascara; + I2C Bus; + DigitalIn _PIN_ALERT; +}; + +TMP175::TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT) + :Bus(PIN_SDA,PIN_SCL),_PIN_ALERT(PIN_ALERT){ +} + +void TMP175::vSetConfigurationTMP175(unsigned char Config,unsigned char Address){ + + _Address=Address<<1; + switch(Config&0x60){ + case 0x00: + Factor=0.5; + Mascara=0x00FF; + Rotar=3; + break; + case 0x20: + Factor=0.25; + Mascara=0x01FF; + Rotar=2; + break; + case 0x40: + Factor=0.125; + Mascara=0x03FF; + Rotar=1; + break; + case 0x60: + Factor=0.0625; + Mascara=0x07FF; + Rotar=0; + break; + } + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x01); + Bus.write(Config); + Bus.stop(); +} + +void TMP175::vSetTemperatureLowTMP175(float Value){ + unsigned short Temp; + + if(Value>=0.0){ + Temp=Value/0.0625; + }else{ + Temp=(Value+128.0)/0.0625; + Temp!=0x0800; + } + Temp<<=4; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x02); + Bus.write(*((unsigned char *)&Temp+1)); + Bus.write(*((unsigned char *)&Temp)); + Bus.stop(); +} + +float TMP175::fReadTemperatureLowTMP175(void){ + unsigned short Temp; + float Cal; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x02); + Bus.start(); + Bus.write(_Address | 0x01); + *((unsigned char *)&Temp+1)=Bus.read(1); + *((unsigned char *)&Temp)=Bus.read(0); + Bus.stop(); + + Temp>>=4; + Cal=Temp*0.0625; + if((0x0800&Temp)!=0x0000){ + Cal-=128.0; + } + + return(Cal); +} + +void TMP175::vSetTemperatureHighTMP175(float Value){ + unsigned short Temp; + + if(Value>=0.0){ + Temp=Value/0.0625; + }else{ + Temp=(Value+128.0)/0.0625; + Temp!=0x0800; + } + Temp<<=4; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x03); + Bus.write(*((unsigned char *)&Temp+1)); + Bus.write(*((unsigned char *)&Temp)); + Bus.stop(); +} + +float TMP175::fReadTemperatureHighTMP175(void){ + unsigned short Temp; + float Cal; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x03); + Bus.start(); + Bus.write(_Address | 0x01); + *((unsigned char *)&Temp+1)=Bus.read(1); + *((unsigned char *)&Temp)=Bus.read(0); + Bus.stop(); + + Temp>>=4; + Cal=Temp*0.0625; + if((0x0800&Temp)!=0x0000){ + Cal-=128.0; + } + + return(Cal); +} + +float TMP175::fReadTemperatureTMP175(void){ + unsigned short Temp; + float Cal; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x00); + Bus.start(); + Bus.write(_Address | 0x01); + *((unsigned char *)&Temp+1)=Bus.read(1); + *((unsigned char *)&Temp)=Bus.read(0); + Bus.stop(); + + Temp>>=(Rotar+4); + Cal=((float)Factor*(Temp&Mascara)); + if(((~Mascara)&Temp)!=0x0000){ + Cal-=128.0; + } + + return(Cal); +} + +// Only SHUTDOWN MODE +void TMP175::vStartSingleConversionTMP175(void){ + unsigned char Temp; + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x01); + Bus.start(); + Bus.write(_Address | 0x01); + Temp=Bus.read(0); + Bus.stop(); + + Bus.start(); + Bus.write(_Address&0xFE); + Bus.write(0x01); + Bus.write(Temp|0x80); + Bus.stop(); +} + +TMP175::operator float(){ + + return(fReadTemperatureTMP175()); +} + +bool TMP175::bReadPinAlertTMP175(void){ + + return(_PIN_ALERT); +} \ No newline at end of file