Thermo Sensor(TMP102 & LM61BIZ) test code ported code from Arduino. you can see the difference between mbed and Arduino in the code.

Dependencies:   mbed

Committer:
xshige
Date:
Sat Oct 30 08:01:10 2010 +0000
Revision:
0:8096151ff6c6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xshige 0:8096151ff6c6 1
xshige 0:8096151ff6c6 2 //
xshige 0:8096151ff6c6 3 // Thermo Sensor(TMP102 & LM61BIZ) test code
xshige 0:8096151ff6c6 4 //
xshige 0:8096151ff6c6 5 // ported code from Arduino
xshige 0:8096151ff6c6 6 // you can see the difference between mbed and Arduino in the code.
xshige 0:8096151ff6c6 7
xshige 0:8096151ff6c6 8 // 2010/10/30
xshige 0:8096151ff6c6 9 // written by:xshige
xshige 0:8096151ff6c6 10
xshige 0:8096151ff6c6 11 /*
xshige 0:8096151ff6c6 12
xshige 0:8096151ff6c6 13 mbed Case:
xshige 0:8096151ff6c6 14 Wiring Info for TMP102
xshige 0:8096151ff6c6 15 module side | mbed side
xshige 0:8096151ff6c6 16 GND --------- GND
xshige 0:8096151ff6c6 17 SCL --------- p10
xshige 0:8096151ff6c6 18 SDA --------- p9
xshige 0:8096151ff6c6 19 V+ --------- +3.3V
xshige 0:8096151ff6c6 20 ALT --------- NC
xshige 0:8096151ff6c6 21 ADD0 -------- GND
xshige 0:8096151ff6c6 22
xshige 0:8096151ff6c6 23 Wring Info ofr LM61BIZ
xshige 0:8096151ff6c6 24 sensor side | mbed side
xshige 0:8096151ff6c6 25 +Vs --------- +5V or +3.3V
xshige 0:8096151ff6c6 26 Vout--------- p20 (analog input)
xshige 0:8096151ff6c6 27 GND --------- GND
xshige 0:8096151ff6c6 28
xshige 0:8096151ff6c6 29 //--------------------------------
xshige 0:8096151ff6c6 30
xshige 0:8096151ff6c6 31 Arduino Case:
xshige 0:8096151ff6c6 32 Wiring Info for TMP102
xshige 0:8096151ff6c6 33 module side | Arduino side
xshige 0:8096151ff6c6 34 GND --------- GND
xshige 0:8096151ff6c6 35 SCL --------- A5
xshige 0:8096151ff6c6 36 SDA --------- A4
xshige 0:8096151ff6c6 37 V+ --------- +3.3V
xshige 0:8096151ff6c6 38 ALT --------- NC
xshige 0:8096151ff6c6 39 ADD0 -------- GND
xshige 0:8096151ff6c6 40
xshige 0:8096151ff6c6 41 Wring Info ofr LM61BIZ
xshige 0:8096151ff6c6 42 sensor side | Arduino side
xshige 0:8096151ff6c6 43 +Vs --------- +5V or +3.3V
xshige 0:8096151ff6c6 44 Vout--------- A3 (analog input)
xshige 0:8096151ff6c6 45 GND --------- GND
xshige 0:8096151ff6c6 46
xshige 0:8096151ff6c6 47 Datasheet:
xshige 0:8096151ff6c6 48 http://www.sparkfun.com/datasheets/Sensors/Temperature/tmp102.pdf
xshige 0:8096151ff6c6 49 http://www.national.com/ds/LM/LM61.pdf
xshige 0:8096151ff6c6 50
xshige 0:8096151ff6c6 51 */
xshige 0:8096151ff6c6 52
xshige 0:8096151ff6c6 53 #define MBED
xshige 0:8096151ff6c6 54
xshige 0:8096151ff6c6 55 #ifdef MBED
xshige 0:8096151ff6c6 56 #include "mbed.h"
xshige 0:8096151ff6c6 57 #else
xshige 0:8096151ff6c6 58 #include <Wire.h>
xshige 0:8096151ff6c6 59 #endif
xshige 0:8096151ff6c6 60
xshige 0:8096151ff6c6 61 #ifdef MBED
xshige 0:8096151ff6c6 62 I2C i2c(p9, p10); // sda, scl
xshige 0:8096151ff6c6 63 Serial pc(USBTX, USBRX); // tx, rx
xshige 0:8096151ff6c6 64 char cmd[2]; // command for I2C
xshige 0:8096151ff6c6 65 #endif
xshige 0:8096151ff6c6 66
xshige 0:8096151ff6c6 67 // setup for TMP102
xshige 0:8096151ff6c6 68 #ifdef MBED
xshige 0:8096151ff6c6 69 #define TEMP_REG 0x0
xshige 0:8096151ff6c6 70 int tmp102 = 0x90; // with ADD0 tied to ground
xshige 0:8096151ff6c6 71 // important note: (Arduino_Address<<4)==(mbed_Address)
xshige 0:8096151ff6c6 72 #else
xshige 0:8096151ff6c6 73 #define TEMP_REG 0b00000000
xshige 0:8096151ff6c6 74 int tmp102 = 0b1001000; // with ADD0 tied to ground
xshige 0:8096151ff6c6 75 #endif
xshige 0:8096151ff6c6 76
xshige 0:8096151ff6c6 77 // setup for LM61BIZ
xshige 0:8096151ff6c6 78 #ifdef MBED
xshige 0:8096151ff6c6 79 AnalogIn LM61pin(p20); // select analog input
xshige 0:8096151ff6c6 80 #else
xshige 0:8096151ff6c6 81 int LM61Pin = 3; // select analog input
xshige 0:8096151ff6c6 82 #endif
xshige 0:8096151ff6c6 83
xshige 0:8096151ff6c6 84 void setPR(int reg) {
xshige 0:8096151ff6c6 85 #ifndef MBED // not MBED
xshige 0:8096151ff6c6 86 Wire.beginTransmission(tmp102);
xshige 0:8096151ff6c6 87 Wire.send(reg);
xshige 0:8096151ff6c6 88 Wire.endTransmission();
xshige 0:8096151ff6c6 89 #endif
xshige 0:8096151ff6c6 90 }
xshige 0:8096151ff6c6 91
xshige 0:8096151ff6c6 92 int getReg() {
xshige 0:8096151ff6c6 93 unsigned char lo, hi;
xshige 0:8096151ff6c6 94 #ifdef MBED
xshige 0:8096151ff6c6 95 cmd[0] = TEMP_REG; i2c.write(tmp102, cmd, 1); // set temp?reg
xshige 0:8096151ff6c6 96 i2c.read(tmp102, cmd, 2); // read the two-byte echo result
xshige 0:8096151ff6c6 97 hi = cmd[0]; lo = cmd[1];
xshige 0:8096151ff6c6 98 #else
xshige 0:8096151ff6c6 99 Wire.requestFrom(tmp102, 2);
xshige 0:8096151ff6c6 100 hi = Wire.receive();
xshige 0:8096151ff6c6 101 lo = Wire.receive();
xshige 0:8096151ff6c6 102 #endif
xshige 0:8096151ff6c6 103 return (hi << 8) + lo;
xshige 0:8096151ff6c6 104 }
xshige 0:8096151ff6c6 105
xshige 0:8096151ff6c6 106 void setup() {
xshige 0:8096151ff6c6 107 #ifndef MBED // not MBED
xshige 0:8096151ff6c6 108 Serial.begin(9600);
xshige 0:8096151ff6c6 109 Wire.begin();
xshige 0:8096151ff6c6 110 setPR(TEMP_REG);
xshige 0:8096151ff6c6 111 #endif
xshige 0:8096151ff6c6 112 }
xshige 0:8096151ff6c6 113
xshige 0:8096151ff6c6 114 void show_TMP102_temp() {
xshige 0:8096151ff6c6 115 int temp_reg = getReg();
xshige 0:8096151ff6c6 116 temp_reg >>= 4;
xshige 0:8096151ff6c6 117
xshige 0:8096151ff6c6 118 float temp_C = temp_reg * 0.0625;
xshige 0:8096151ff6c6 119 float temp_F = (temp_C * 9 / 5) + 32;
xshige 0:8096151ff6c6 120
xshige 0:8096151ff6c6 121 #ifdef MBED
xshige 0:8096151ff6c6 122 printf("TMP102: %2.1f degree C\r\n",temp_C);
xshige 0:8096151ff6c6 123 printf("TMP102: %2.1f degree F\r\n",temp_F);
xshige 0:8096151ff6c6 124 #else
xshige 0:8096151ff6c6 125 Serial.print("TMP102: ");
xshige 0:8096151ff6c6 126 Serial.print(temp_C);
xshige 0:8096151ff6c6 127 Serial.println(" degree C ");
xshige 0:8096151ff6c6 128 Serial.print(temp_F);
xshige 0:8096151ff6c6 129 Serial.println("\xdf""F ");
xshige 0:8096151ff6c6 130 #endif
xshige 0:8096151ff6c6 131 }
xshige 0:8096151ff6c6 132
xshige 0:8096151ff6c6 133 void show_LM61_temp() {
xshige 0:8096151ff6c6 134 // read the value from the sensor:
xshige 0:8096151ff6c6 135 #ifdef MBED
xshige 0:8096151ff6c6 136 float value = 3.3*LM61pin.read_u16()/0xFFFF;
xshige 0:8096151ff6c6 137 // in mbed, input range is 0 thru 3.3V
xshige 0:8096151ff6c6 138 #else
xshige 0:8096151ff6c6 139 float value = 5.0*analogRead(LM61Pin)/1023.0;
xshige 0:8096151ff6c6 140 // in Arduino, input range is 0 thru 5V in many case
xshige 0:8096151ff6c6 141 #endif
xshige 0:8096151ff6c6 142
xshige 0:8096151ff6c6 143 // get degree C form LM61BIZ value
xshige 0:8096151ff6c6 144 float LM61degree=(value-0.6)/0.01;
xshige 0:8096151ff6c6 145
xshige 0:8096151ff6c6 146 #ifdef MBED
xshige 0:8096151ff6c6 147 printf("LM61: %2.1f degree C\r\n",LM61degree);
xshige 0:8096151ff6c6 148 #else
xshige 0:8096151ff6c6 149 Serial.print("LM61: ");
xshige 0:8096151ff6c6 150 Serial.print(LM61degree);
xshige 0:8096151ff6c6 151 Serial.println(" degree C");
xshige 0:8096151ff6c6 152 #endif
xshige 0:8096151ff6c6 153 }
xshige 0:8096151ff6c6 154
xshige 0:8096151ff6c6 155 void loop() {
xshige 0:8096151ff6c6 156 show_TMP102_temp();
xshige 0:8096151ff6c6 157 show_LM61_temp();
xshige 0:8096151ff6c6 158 #ifdef MBED
xshige 0:8096151ff6c6 159 printf("\r\n");
xshige 0:8096151ff6c6 160 #endif
xshige 0:8096151ff6c6 161 }
xshige 0:8096151ff6c6 162
xshige 0:8096151ff6c6 163 #ifdef MBED
xshige 0:8096151ff6c6 164 void init()
xshige 0:8096151ff6c6 165 {
xshige 0:8096151ff6c6 166 // make debug port Fast
xshige 0:8096151ff6c6 167 // pc.baud(9600);
xshige 0:8096151ff6c6 168 pc.baud(115200);
xshige 0:8096151ff6c6 169 // pc.baud(230400);
xshige 0:8096151ff6c6 170 }
xshige 0:8096151ff6c6 171
xshige 0:8096151ff6c6 172 int main(void)
xshige 0:8096151ff6c6 173 {
xshige 0:8096151ff6c6 174 init();
xshige 0:8096151ff6c6 175
xshige 0:8096151ff6c6 176 setup();
xshige 0:8096151ff6c6 177
xshige 0:8096151ff6c6 178 for (;;)
xshige 0:8096151ff6c6 179 loop();
xshige 0:8096151ff6c6 180
xshige 0:8096151ff6c6 181 return 0;
xshige 0:8096151ff6c6 182 }
xshige 0:8096151ff6c6 183 #endif