Difference between pages "File:Nearbus 28J60 0.jpg" and "One-Wire Temperature Sensor - DS18B20"

From Nearwiki
(Difference between pages)
Jump to: navigation, search
 
(Created page with " === Reference Information === <br /> * '''Info Web:''' http://seeedstudio.com/depot/one-wire-temperature-sensor-p-1235.html?cPath=25_27 * '''Techinical Spec:''' Temperature...")
 
Line 1: Line 1:
  
 +
=== Reference Information ===
 +
<br />
 +
* '''Info Web:''' http://seeedstudio.com/depot/one-wire-temperature-sensor-p-1235.html?cPath=25_27
 +
 +
* '''Techinical Spec:''' Temperature range: -55°C to +125°C - Accuracy: ±0.5°C( -10°C to +85°C)
 +
 +
* '''Connector Type:''' Base Shield V1.3 - Grove compatible - http://seeedstudio.com/depot/base-shield-v13-p-1378.html
 +
 +
* '''Code Source:''' http://playground.arduino.cc/Learning/OneWire
 +
 +
 +
 +
----
 +
 +
===Temperature Sensor - DS18B20 - (Waterproof)===
 +
<br />
 +
[[File:Temp probe 18B20.jpg]]
 +
 +
 +
 +
----
 +
 +
=== MyNbios Code - Example ===
 +
<br />
 +
 +
'''In order to run this code you should copy the following code into the area delimited by the MY_BIOS CUSTOM CODE banners in the Hello_World_xxx.ino example.'''
 +
 +
<pre>
 +
<nowiki>#include <OneWire.h></nowiki>
 +
 +
OneWire  ds(3);  // Arduino PIN_3
 +
 +
void Nearbus::MyNbios_0( byte portId, ULONG setValue, ULONG* pRetValue, byte vmcuMethod, PRT_CNTRL_STRCT* pPortControlStruct )
 +
{
 +
byte i;
 +
byte present = 0;
 +
byte type_s;
 +
byte data[12];
 +
byte addr[8];
 +
float celsius, fahrenheit;
 +
   
 +
    for (i=0 ; i < 20 ; i++) {
 +
        if ( ds.search(addr)) {
 +
            break;
 +
        }
 +
        ds.reset_search();
 +
        delay(250);
 +
    }
 +
        if (i == 20 ) {
 +
            *pRetValue = 0; 
 +
            return;
 +
        }
 +
 +
    if(OneWire::crc8(addr, 7) != addr[7]) {
 +
        *pRetValue = 0;
 +
        return;
 +
    }
 +
 +
    // the first ROM byte indicates which chip
 +
    switch (addr[0]) {
 +
        case 0x10:
 +
            type_s = 1;
 +
            break;
 +
 +
        case 0x28:
 +
            type_s = 0;
 +
            break;
 +
 +
        case 0x22:
 +
            type_s = 0;
 +
            break;
 +
 +
        default:
 +
            *pRetValue = 0;
 +
            return;
 +
    }
 +
    ds.reset();
 +
    ds.select(addr);
 +
    ds.write(0x44, 1);                                    // start conversion, with parasite power on at the end
 +
    delay(1000);                                          // maybe 750ms is enough, maybe not
 +
    present = ds.reset();
 +
    ds.select(addr);   
 +
    ds.write(0xBE);                                      // Read Scratchpad
 +
 +
    for ( i = 0; i < 9; i++) {                            // we need 9 bytes
 +
        data[i] = ds.read();
 +
    }
 +
 +
    int16_t raw = (data[1] << 8) | data[0];
 +
    if (type_s) {
 +
        raw = raw << 3;                                  // 9 bit resolution default
 +
        if (data[7] == 0x10) {                            // "count remain" gives full 12 bit resolution
 +
            raw = (raw & 0xFFF0) + 12 - data[6];
 +
        }
 +
    }
 +
else {
 +
        byte cfg = (data[4] & 0x60);
 +
        // at lower res, the low bits are undefined, so let's zero them
 +
        if (cfg == 0x00) raw = raw & ~7;                  // 9 bit resolution, 93.75 ms
 +
        else if (cfg == 0x20) raw = raw & ~3;            // 10 bit res, 187.5 ms
 +
        else if (cfg == 0x40) raw = raw & ~1;            // 11 bit res, 375 ms
 +
// default is 12 bit resolution, 750 ms conversion time
 +
    }
 +
    celsius = (float)raw / 16.0;
 +
    fahrenheit = celsius * 1.8 + 32.0;     
 +
 
 +
    if ( !setValue ) {                                    // NearAPI: [value=1] => Fahrenheit - [value=0] => Celsius
 +
        *pRetValue = (ULONG) (celsius * 100);
 +
    }
 +
    else {
 +
        *pRetValue = (ULONG) (fahrenheit * 100);
 +
    }   
 +
}
 +
</pre>

Latest revision as of 21:16, 29 March 2018

Reference Information


  • Techinical Spec: Temperature range: -55°C to +125°C - Accuracy: ±0.5°C( -10°C to +85°C)



Temperature Sensor - DS18B20 - (Waterproof)


Temp probe 18B20.jpg



MyNbios Code - Example


In order to run this code you should copy the following code into the area delimited by the MY_BIOS CUSTOM CODE banners in the Hello_World_xxx.ino example.

#include <OneWire.h>

OneWire  ds(3);  // Arduino PIN_3
 
void Nearbus::MyNbios_0( byte portId, ULONG setValue, ULONG* pRetValue, byte vmcuMethod, PRT_CNTRL_STRCT* pPortControlStruct )
{
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
    
    for (i=0 ; i < 20 ; i++) {
        if ( ds.search(addr)) {
            break;
        }
        ds.reset_search();
        delay(250); 
    }
        if (i == 20 ) {
            *pRetValue = 0;  
            return;
        }

    if(OneWire::crc8(addr, 7) != addr[7]) {
        *pRetValue = 0;
        return;
    }

    // the first ROM byte indicates which chip
    switch (addr[0]) {
        case 0x10:
            type_s = 1;
            break;
		
        case 0x28:
            type_s = 0;
            break;
		
        case 0x22:
            type_s = 0;
            break;
		
        default:
            *pRetValue = 0;
            return;
    } 
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1);                                    // start conversion, with parasite power on at the end
    delay(1000);                                          // maybe 750ms is enough, maybe not
    present = ds.reset();
    ds.select(addr);    
    ds.write(0xBE);                                       // Read Scratchpad

    for ( i = 0; i < 9; i++) {                            // we need 9 bytes
        data[i] = ds.read();
    }

    int16_t raw = (data[1] << 8) | data[0];
    if (type_s) {
        raw = raw << 3;                                   // 9 bit resolution default
        if (data[7] == 0x10) {                            // "count remain" gives full 12 bit resolution
            raw = (raw & 0xFFF0) + 12 - data[6];
        }
    } 
	else {
        byte cfg = (data[4] & 0x60);
        // at lower res, the low bits are undefined, so let's zero them
        if (cfg == 0x00) raw = raw & ~7;                  // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3;             // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1;             // 11 bit res, 375 ms
		// default is 12 bit resolution, 750 ms conversion time
    }
    celsius = (float)raw / 16.0;
    fahrenheit = celsius * 1.8 + 32.0;       
  
    if ( !setValue ) {                                    // NearAPI: [value=1] => Fahrenheit - [value=0] => Celsius
        *pRetValue = (ULONG) (celsius * 100);
    }
    else {
        *pRetValue = (ULONG) (fahrenheit * 100);
    }    
}

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current20:17, 29 March 2018Thumbnail for version as of 20:17, 29 March 20181,180 × 839 (48 KB)Nearwiki (talk | contribs)
  • You cannot overwrite this file.

The following page links to this file: