DS18S20 displays wrong temperatures


Results 1 to 8 of 8

Threaded View

  1. #6
    Prethorian's Avatar
    Prethorian Guest


    Did you find this post helpful? Yes | No

    Default DS1820 apsolute working with negative temperature

    I will post code and you will see where is (I will note it) added change which resolve problem and working 100%
    This example was coded for PIC16F84A for my job.

    Code:
    Define	LCD_DREG	PORTB
    Define	LCD_DBIT	4
    Define	LCD_RSREG	PORTB
    Define	LCD_RSBIT	2
    Define	LCD_EREG	PORTB
    Define	LCD_EBIT	3 
    
    TempR         var word    'DS1820 read Temperature 
    TempNeg      var byte    'temperature sign -/+ 
    
    '*****DS1820 VARS AND SETTINGS*******
    count_remain var byte   'DS1820 coumter of remain bits
    count_per_c  var byte   'DS1820 counter per C bits
    symbol DQ = PortA.3     'OneWire data pin
    '**********************************
    
    TrisA 	=	%11111
    PortA = 0
    TrisB 	=	%00000000
    PortB = 0
    
    Main:
       gosub Read_Temp
       if TempR=$FFFF then Error
       gosub Disp_Temp
       pause 100
    goto Main
    
    '******DS1820 READING******
    Read_Temp:
       OWOut DQ, 1, [$CC, $44]                ' Start temperature conversion
       waitloop:
       OWIn DQ, 4, [count_remain]	          ' Check for still busy converting
         If count_remain = 0 Then waitloop
       OWOut DQ, 1, [$CC, $BE]		   ' Read the temperature
       OWIn DQ, 0, [TempR.LowByte, TempR.HighByte, Skip 4, count_remain, count_per_c]
    
    if TempR = $FFFF then return 
        if (TempR.HighByte = $FF) and (TempR.LowByte <> 0) then
          TempNeg = "-"
          TempR = TempR ^ $FFFF
          TempR = ((TempR >> 1)*100) - 25 + ((count_per_c + count_remain) * 100) / count_per_c      
          else
        if (TempR.HighByte < $FF) and (TempR.LowByte <> 0) then  
          TempNeg = "+"
          TempR = ((TempR >> 1)*100) - 25 + ((count_per_c - count_remain) * 100) / count_per_c
          else
    '************************************************
          TempR=$0000    ' THIS IS ONLY NEED TO DEFINE !!!
    '************************************************
        endif
    endif
    return
    
    Disp_Temp:
    	Lcdout $fe, 1, "Temperature: " TempNeg, DEC (TempR / 100),".", DEC2 TempR, 223, "C "
    return
    
    Error:
       Lcdout $fe, 1, "!!!ERROR!!!", $fe, $C0, "Reading Temp."
    goto Main
    end
    Now I think that this thread (I am not find any fresh thread with solved problem) was solved
    This code measure temperature with extended resolution (DEC2).


    Regards.
    Last edited by Prethorian; - 6th August 2007 at 03:25. Reason: correcting syntax

Similar Threads

  1. 7 Segment Displays and MAX7219
    By Bill Legge in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 31st October 2010, 18:30
  2. DS18S20 reading negative temperature
    By srob in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 28th December 2007, 21:21
  3. ADCIN - AD settings are wrong
    By teverett in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 4th December 2006, 16:32
  4. Using DS18S20 vs DS1820 with 4x7 LED Displays
    By sayzer in forum mel PIC BASIC Pro
    Replies: 14
    Last Post: - 16th October 2006, 04:36
  5. 16F877, DS18S20 and Serial Comm Problem
    By YellowTang in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 26th April 2004, 10:36

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts