Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
simon
Date:
Wed Nov 18 09:26:15 2009 +0000
Commit message:

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r d0b35e0b4294 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 18 09:26:15 2009 +0000
@@ -0,0 +1,97 @@
+#include "mbed.h"
+
+// DS18B20 converted to run on mbed
+
+#define TEMP_PIN  p20
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+DigitalInOut temperature_pin(TEMP_PIN);
+
+void OneWireReset() { // reset.  Should improve to act as a presence pulse
+    temperature_pin.output();
+    temperature_pin = 0;     // bring low for 500 us
+    wait_us(500);
+    temperature_pin.input();
+    wait_us(500);
+}
+
+void OneWireOutByte(unsigned char d) { // output byte d (least sig bit first).
+    for(int n=8; n!=0; n--) {
+        if ((d & 0x01) == 1) { // test least sig bit
+            temperature_pin.output();
+            temperature_pin = 0;
+            wait_us(5);
+            temperature_pin.input();
+            wait_us(60);
+        } else {
+            temperature_pin.output();
+            temperature_pin = 0;
+            wait_us(60);
+            temperature_pin.input();
+        }
+
+        d=d>>1; // now the next bit is in the least sig bit position.
+    }
+
+}
+
+unsigned char OneWireInByte() { // read byte, least sig byte first
+    unsigned char d = 0, b;
+    for (int n=0; n<8; n++) {
+        temperature_pin.output();
+        temperature_pin = 0;
+        wait_us(5);
+        temperature_pin.input();
+        wait_us(5);
+        b = temperature_pin;
+        wait_us(50);
+        d = (d >> 1) | (b << 7); // shift d to right and insert b in most sig bit position
+    }
+    return d;
+}
+
+int main() {
+    int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
+    pc.printf("mbed 1 wire interface simple test!\r\n");
+    temperature_pin.output();
+    temperature_pin = 0;
+    temperature_pin.input();  // sets the digital pin as input (logic 1) make sure external pullup resistor 4K7
+    wait(1);
+    pc.printf("temperature measurements:\r\n");
+
+    while (1) {
+        OneWireReset();
+        OneWireOutByte( 0xcc);  //Skip ROM command
+        OneWireOutByte( 0x44); // perform temperature conversion, strong pullup for one sec
+
+        OneWireReset();
+        OneWireOutByte( 0xcc);
+        OneWireOutByte( 0xbe);   //Read Scratchpad
+
+        LowByte = OneWireInByte();
+        HighByte = OneWireInByte();
+        TReading = (HighByte << 8) + LowByte;
+        SignBit = TReading & 0x8000;  // test most sig bit
+        if (SignBit) { // negative
+            TReading = (TReading ^ 0xffff) + 1; // 2's comp
+        }
+        Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
+
+        Whole = Tc_100 / 100;  // separate off the whole and fractional portions
+        Fract = Tc_100 % 100;
+
+        if (SignBit) { // If its negative
+            pc.printf("-");
+        }
+        pc.printf("%d", Whole);
+        pc.printf(".");
+        if (Fract < 10) {
+            pc.printf("0");
+        }
+        pc.printf("%d", Fract);
+        pc.printf("\r\n");
+       
+        wait(5);         // 5 second delay.  Adjust as necessary
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r d0b35e0b4294 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Nov 18 09:26:15 2009 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/32af5db564d4