- Name:
- readtemp12
- Syntax:
-
READTEMP12 pin,wordvariable
Pin - is the digital I/O pin to which the temperature sensor is attached.
Variable - receives the raw 12 bit data read.
- Description:
-
Read 12 bit temperature data from a DS18B20 digital temperature sensor and store in a word variable.
The conversion can take up to 750ms. Both readtemp and readtemp12 take the same time to convert. This command is designed for more advanced users, for standard 'whole degree' data use the simpler readtemp command. The readtemp12 temperature is read back as the raw 12 bit data into a word variable (0.0625 degrees Celsius resolution). The user must interpret the data through mathematical manipulation. See the DS18B20 datasheet for more information on the 12 bit Temperature/Data relationship.
Note the readtemp12 command does not work directly the same with the older DS1820 or DS18S20 as they have a different internal resolution. However example 2 below shows a workaround for the DS18S20. The readtemp12 command is not designed to be used with parasitically powered DS18B20 sensors (DS18B20-PAR) as the 5V pin of the sensor must always be connected.
The readtemp12 command requires use of a digital I/O pin which is able to be used for both input and output. It cannot be used on the following pins due to silicon restrictions:
08M, 08M2 C.3 = fixed input, C.0 = fixed output 14M, 14M2 C.3 = fixed input, B.0 = fixed output 18M2 C.3 = fixed input, C.4, C.5 = fixed input 20M, 20M2, 20X2 C.6 = fixed input, A.0 = fixed output Effect of increased clock speed
This command only functions at 4MHz. M2, X1 and X2 parts automatically use the internal 4MHz resonator for this command.
- Applies To:
- All (except 08, 18, 28)
- See Also:
- Related Create:
Read temperature
Read a 12-bit temperature value from a DS18B20 temperature sensor on pin B.1 and report the result
- Code Example:
-
main: readtemp12 B.1,w1 ; read value into w1 debug ; transmit to computer screen goto main
Copy Code Submit an Example
Read temperature from DS18S20
This code will allow a DS18S20 device to be read as if it were a 'readtemp12' from a DS18B20 device
- Code Example:
-
readtemp12 B.1, w0 ; read DS18S20 if w0 > 255 then ; convert to a reading as if from DS18B20 w0 = -w0 * 8 ; when reading is negative w0 = -w0 else w0 = w0 * 8 ; when reading is positive end if
Copy Code Submit an Example
Displaying DS18S20 reading on an LCD
Einen 1-wire Temperaturfühler DS18S20 auslesen Den Wert am OLED anzeigen Positive und negative Temperaturen berücksichtigen
- Code Example:
-
;========================================= ; PICAXE 20M2 ;========================================= ; Posted by strippenstrolch ; ; Einen 1-wire Temperaturfühler DS18S20 auslesen ; Den Wert am OLED anzeigen ; Positive und negative Temperaturen berücksichtigen ; ; DS18S20 an Port c.7 --- AXE003Y an Port c.5 ;========================================= dirsb=%11111111 ; Port B auf Ausgang setzen Pause 500 ; Display initialisieren serout c.5,n2400,(254,1) : Pause 30 ; Display initialisieren serout c.5,n2400,(254,128) ; Gehe zu Zeile 1 serout c.5,N2400,("Temp.:") ; Schreibe das "Gundgerüst" in die Zeile do ; Anfang der Endlosschleife readtemp12 c.7, w0 ; read DS18S20 w0 = w0/2 ; Schiebe ein bit nach rechts b2 = w0 ; Sichere das niederwertige Byte pinsb = b2 ; Variable b2 komplett am Port B ausgeben serout c.5,N2400,(254,135) ; Gehe an Position 7 (128 + 7) in Zeile 1 if w0 > %00000000100000000 then ; Wenn Bit 9 gesetzt ist, ist der Wert negativ b3 = 255-b0 ; Ziehe das niederwertige Byte von 255 ab serout c.5,N2400,("- ",#b3," ","C ") ; Schreibe dort den Variableninhalt von B3 hin serout c.5,N2400,(254,192,"Achtung Frost !") ; Schreibe eine Frostwarnung else serout c.5,N2400,(#b2," ","C ") ; Schreibe dort den Variableninhalt von b2 hin serout c.5,N2400,(254,192," ") ; Lösche die Frostwarnung endif loop ; Ende der Endlosschleife End
Copy Code Submit an Example
7-Segment display of Fahrenheit temperature
Uses the DS18B20 to display the range 0.F Fahrenheit to 257.F Fahrenheit. If outside this range displays FFFF
- Code Example:
-
#picaxe 20x2 ' -- -- -- -- -- -- -- -- 'B.0-A | | | | 'B.1-B 'B.2-C | | | | 'B.3-D -- -- -- -- -- -- 'B.4-E | | | | 'B.5-F 'B.6-G | | | | 'B.7-dp -- -- -- -- o ' 'Display 1 2 3 4 'Common anode C.3 C.2 C.1 c.0 eeprom 0,(192,249,164,176,153,146,130,248,128,144,255) ; Display (0,1,2,3,4,5,6,7,8,9,blank) main: let dirsb = %11111111 let dirsc = %00111111 temp: readtemp12 DS18B20, w1 ; read in result Ds18b20 IF W1 > 2000 AND W1 < 65250 THEN temp ; skip if not within valid sensor range 0.F to 257.F IF W1> 65251 THEN ; info 0.F - 32.F W1=-W1 W1=W1*9/8-320 W1=-W1 ; info ie w1=10 Display 1.F ELSE ; info 32.F - 257.F W1 = W1*9/8+320 ; info ie w1=2570 Display 257.F ENDIF let dirsb = %11111111 ; restore b pins after read display: for w15=1 to 400 ; Temperature display time(6secs then updates) b0=10 if w1 < 1000 then dig1 ; Display1 zero blanking let b0 = w1 dig 3 Dig1: read b0,b16 let pinsb = b16 : low c.3 : pause 1 : high c.3 ; Display1 temp b0=10 if w1 < 100 then dig2 ; Display2 zero blanking let b0 = w1 dig 2 Dig2: read b0,b17 let pinsb = b17 : low c.2 : pause 1 : high c.2 ; Display2 temp let b0 = w1 dig 1 Dig3: read b0,b18 let b18=b18-128 ; Display3 d.p let pinsb = b18 : low c.1 : pause 1 : high c.1 ; Display3 temp Dig4: let pinsb = 142 : low c.0 : pause 1 : high c.0 ; Display4 F next w15 goto temp
Copy Code Submit an Example
Show a readtemp12 to 0.625C resolution
This routine will output a signed temperature read from by a 'readtemp12' command to 0.625C resolution.
- Code Example:
-
do readtemp12 C.1, w0 gosub showsignedtemperature sertxd( "C", cr, lf ) pause 1000 loop showsignedtemperature: if w0 < $8000 then sertxd( "+" ) w2 = w0 else sertxd( "-" ) w2 = -w0 end if w3 = w2 & 15 * 625 bintoascii w3, b15,b14,b13,b12,b11 w3 = w2 / 16 sertxd( #w3, ".", b14,b13,b12,b11 ) return
Copy Code Submit an Example
Show a readtemp12 to 0.625F resolution
This routine will output a signed temperature read from by a 'readtemp12' command to 0.625F resolution. The 512 is equivalent to 32.0 with a 4-bit fractional.
- Code Example:
-
do readtemp12 C.1, w0 gosub convertcentigradetofahrenheit gosub showsignedtemperature sertxd( "F", cr, lf ) pause 1000 loop convertcentigradetofahrenheit: if w0 < $8000 then w0 = w0 * 9 / 5 + 512 else w0 = -w0 * 9 / 5 w0 = -w0 + 512 end if return showsignedtemperature: if w0 < $8000 then sertxd( "+" ) w2 = w0 else sertxd( "-" ) w2 = -w0 end if w3 = w2 & 15 * 625 bintoascii w3, b15,b14,b13,b12,b11 w3 = w2 / 16 sertxd( #w3, ".", b14,b13,b12,b11 ) return
Copy Code Submit an Example
Submit Your Own Code!
You must be logged in to submit code examples. Login now.