Fabricio Emder / TMP75
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TMP175.h Source File

TMP175.h

00001 /*
00002    \file TMP175.h
00003    \version: 1.0
00004    
00005    \brief Este fichero contiene funciones para control de TMP175/75 
00006    
00007    \web www.micros-designs.com.ar
00008    \date 02/02/11
00009    
00010  *- Version Log --------------------------------------------------------------*
00011  *   Fecha       Autor                Comentarios                             *
00012  *----------------------------------------------------------------------------*
00013  * 02/02/11      Suky        Original                                         *
00014  *----------------------------------------------------------------------------*/ 
00015 ///////////////////////////////////////////////////////////////////////////
00016 ////                                                                   ////
00017 ////                                                                   ////
00018 ////        (C) Copyright 2011 www.micros-designs.com.ar               ////
00019 //// Este c�digo puede ser usado, modificado y distribuido libremente  ////
00020 //// sin eliminar esta cabecera y  sin garant�a de ning�n tipo.        ////
00021 ////                                                                   ////
00022 ////                                                                   ////
00023 ///////////////////////////////////////////////////////////////////////////
00024 #include "mbed.h"
00025 
00026 
00027 class TMP175{
00028     public:
00029         #define SHUTDOWN_MODE_OFF  0x00
00030         #define SHUTDOWN_MODE_ON   0x01
00031         #define COMPARATOR_MODE    0x00
00032         #define INTERRUPT_MODE     0x02
00033         #define POLARITY_0         0x00
00034         #define POLARITY_1         0x04
00035         #define FAULT_QUEUE_1      0x00
00036         #define FAULT_QUEUE_2      0x08
00037         #define FAULT_QUEUE_4      0x10
00038         #define FAULT_QUEUE_6      0x18
00039         #define RESOLUTION_9       0x00
00040         #define RESOLUTION_10      0x20
00041         #define RESOLUTION_11      0x40
00042         #define RESOLUTION_12      0x60
00043         #define ONE_SHOT           0x80
00044         TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT=NC);
00045         void vSetConfigurationTMP175(unsigned char Config,unsigned char Address);
00046         void vStartSingleConversionTMP175(void);
00047         float fReadTemperatureTMP175(void);
00048         void vSetTemperatureLowTMP175(float Value);
00049         void vSetTemperatureHighTMP175(float Value);
00050         float fReadTemperatureHighTMP175(void);
00051         float fReadTemperatureLowTMP175(void);    
00052         bool bReadPinAlertTMP175(void);
00053         #ifdef MBED_OPERATORS
00054         operator float();
00055         #endif
00056     protected:
00057         unsigned char _Address, Rotar;
00058         float Factor;
00059         unsigned short Mascara;
00060         I2C Bus;
00061         DigitalIn _PIN_ALERT;    
00062 };
00063 
00064 TMP175::TMP175(PinName PIN_SDA, PinName PIN_SCL, PinName PIN_ALERT)
00065     :Bus(PIN_SDA,PIN_SCL),_PIN_ALERT(PIN_ALERT){    
00066 }
00067 
00068 void TMP175::vSetConfigurationTMP175(unsigned char Config,unsigned char Address){
00069    
00070    _Address=Address<<1;
00071    switch(Config&0x60){
00072       case 0x00:
00073          Factor=0.5;
00074          Mascara=0x00FF;
00075          Rotar=3;
00076       break;
00077       case 0x20:
00078          Factor=0.25;
00079          Mascara=0x01FF;
00080          Rotar=2;
00081       break;
00082       case 0x40:
00083          Factor=0.125;
00084          Mascara=0x03FF;
00085          Rotar=1;
00086       break;
00087       case 0x60:
00088          Factor=0.0625;
00089          Mascara=0x07FF;
00090          Rotar=0;
00091       break;
00092    }
00093 
00094    Bus.start();
00095    Bus.write(_Address&0xFE);
00096    Bus.write(0x01);
00097    Bus.write(Config);
00098    Bus.stop();  
00099 }
00100 
00101 void TMP175::vSetTemperatureLowTMP175(float Value){
00102    unsigned short Temp;
00103    
00104    if(Value>=0.0){
00105       Temp=Value/0.0625;
00106    }else{
00107       Temp=(Value+128.0)/0.0625;
00108       //Temp!=0x0800;
00109    }
00110    Temp<<=4;
00111 
00112    Bus.start();
00113    Bus.write(_Address&0xFE);
00114    Bus.write(0x02);
00115    Bus.write(*((unsigned char *)&Temp+1));
00116    Bus.write(*((unsigned char *)&Temp));
00117    Bus.stop();
00118 }
00119 
00120 float TMP175::fReadTemperatureLowTMP175(void){
00121    unsigned short Temp;
00122    float Cal;
00123    
00124    Bus.start();
00125    Bus.write(_Address&0xFE);
00126    Bus.write(0x02);
00127    Bus.start();
00128    Bus.write(_Address | 0x01);
00129    *((unsigned char *)&Temp+1)=Bus.read(1);
00130    *((unsigned char *)&Temp)=Bus.read(0);
00131    Bus.stop();   
00132    
00133    Temp>>=4;
00134    Cal=Temp*0.0625;
00135    if((0x0800&Temp)!=0x0000){
00136       Cal-=128.0;
00137    }
00138    
00139    return(Cal);
00140 }
00141 
00142 void TMP175::vSetTemperatureHighTMP175(float Value){
00143    unsigned short Temp;
00144    
00145    if(Value>=0.0){
00146       Temp=Value/0.0625;
00147    }else{
00148       Temp=(Value+128.0)/0.0625;
00149       //Temp!=0x0800;
00150    }
00151    Temp<<=4;
00152    
00153    Bus.start();
00154    Bus.write(_Address&0xFE);
00155    Bus.write(0x03);
00156    Bus.write(*((unsigned char *)&Temp+1));
00157    Bus.write(*((unsigned char *)&Temp));
00158    Bus.stop();
00159 }
00160 
00161 float TMP175::fReadTemperatureHighTMP175(void){
00162    unsigned short Temp;
00163    float Cal;
00164    
00165    Bus.start();
00166    Bus.write(_Address&0xFE);
00167    Bus.write(0x03);
00168    Bus.start();
00169    Bus.write(_Address | 0x01);
00170    *((unsigned char *)&Temp+1)=Bus.read(1);
00171    *((unsigned char *)&Temp)=Bus.read(0);
00172    Bus.stop();   
00173    
00174    Temp>>=4;
00175    Cal=Temp*0.0625;
00176    if((0x0800&Temp)!=0x0000){
00177       Cal-=128.0;
00178    }
00179    
00180    return(Cal);
00181 }
00182 
00183 float TMP175::fReadTemperatureTMP175(void){
00184    unsigned short Temp;
00185    float Cal;
00186    
00187    Bus.start();
00188    Bus.write(_Address&0xFE);
00189    Bus.write(0x00);
00190    Bus.start();
00191    Bus.write(_Address | 0x01);
00192    *((unsigned char *)&Temp+1)=Bus.read(1);
00193    *((unsigned char *)&Temp)=Bus.read(0);
00194    Bus.stop();   
00195    
00196    Temp>>=(Rotar+4);
00197    Cal=((float)Factor*(Temp&Mascara));
00198    if(((~Mascara)&Temp)!=0x0000){
00199       Cal-=128.0;
00200    }
00201    
00202    return(Cal);
00203 }
00204 
00205 // Only SHUTDOWN MODE 
00206 void TMP175::vStartSingleConversionTMP175(void){
00207    unsigned char Temp;
00208 
00209    Bus.start();
00210    Bus.write(_Address&0xFE);
00211    Bus.write(0x01);
00212    Bus.start();
00213    Bus.write(_Address | 0x01);
00214    Temp=Bus.read(0);
00215    Bus.stop();     
00216    
00217    Bus.start();
00218    Bus.write(_Address&0xFE);
00219    Bus.write(0x01);
00220    Bus.write(Temp|0x80);
00221    Bus.stop(); 
00222 }
00223 
00224 TMP175::operator float(){
00225 
00226     return(fReadTemperatureTMP175());
00227 }
00228 
00229 bool TMP175::bReadPinAlertTMP175(void){
00230     
00231     return(_PIN_ALERT);
00232 }