DS1820 Negative Numbers and OffSet


Results 1 to 6 of 6

Threaded View

  1. #1
    Join Date
    Aug 2008
    Location
    Portugal
    Posts
    240

    Default DS1820 Negative Numbers and OffSet

    Hi everyone once again;

    I made a program to read a DS1820 showing positive and negative temperatures. I found a piece of code in this forum to handle that, and its workinf fine. Now i want to put an offset in the temperature that was readed, for instance if the sensor is at 18șC and the OFFSETTEMP variable is 2, then the LCD shows 20șC, if the OFFSETTEMP variable is -3 than the lcd shows 15șC.

    In the code you will see that i allready have a menu to change the OFFSETTEMP variable, however i don't know now how to interect with the temperature that i'm reading.

    Attached is the Proteus file with the simulation of the code, the code, and the HEX file.

    The "MENU" button its to enter the the menu, and the "+" and "-" button is to change the value of the OFFSETTEMP variable.

    Can somebody give me a clue?

    Here is the code:
    Code:
    '****************************************************************
    '*  Name    : TESTE DS1820.BAS                                  *
    '*  Author  : GADELHAS                                          *
    '*  Notice  : Copyright (c)                                     *
    '*          : All Rights Reserved                               *
    '*  Date    : 23-04-2011                                        *
    '*  Version : 1.0                                               *
    '*  Notes   : BreadBoard + EASYPICV6                            *
    '*          : PIC16F877A                                        *
    '****************************************************************
    DEFINE OSC 20
    @ __config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF & _PWRTE_OFF
    '                               VARIABLES
    ' ====================================================================
     
     TEMPC        Var Word
     OFFSETTEMP   VAR BYTE
     SIGN         var bit
     FLAG         VAR BYTE
     
    '                         PINOUT 1 = IN; 0 = OUT
    ' ====================================================================
              '76543210
     TRISA  = %00000000 
     TRISB  = %00000000 
     TRISC  = %10010000 
     TRISD  = %00001100 
     TRISE  = %00000000
     ADCON1 = 7
     
    '                              ALIAS
    ' ====================================================================
     LED     VAR PORTB.7 
     BMENOS  var PORTD.2 
     BMAIS   var PORTD.3 
     BMENU   VAR PORTC.4 
     OUT     Var PORTC.2 
     DQ      VAR PORTE.2 
     
    '                              DEFINITIONS
    ' ====================================================================
     
     DEFINE LCD_DREG PORTB      ' LCD Data bits on PORTB
     DEFINE LCD_DBIT 0          ' PORTB starting address
     DEFINE LCD_RSREG PORTB     ' LCD RS bit on PORTB
     DEFINE LCD_RSBIT 4         ' LCD RS bit address
     DEFINE LCD_EREG PORTB      ' LCD E bit on PORTB
     DEFINE LCD_EBIT 5          ' LCD E bit address
     DEFINE LCD_BITS 4          ' LCD in 4-bit mode
     DEFINE LCD_LINES 2         ' LCD has 2 rows
     DEFINE LCD_COMMANDUS 2000  ' Set command delay time in us
     DEFINE LCD_DATAUS 50       ' Set data delay time in us
     
    '                             MAIN
    ' ==================================================================== 
    PAUSE 100
     
    INICIO:             '01234567890123456789
        Lcdout $fe, 1,  "    DS1820 Teste    "
        Lcdout $fe, $C0,"   HUGO  OLIVEIRA   " 
        Pause 1000 
     
    MAIN:
            if Bmenu = 0 then
               Pause 200
               goto  MENU
            endif
     
            gosub SENSOR
     
            IF SIGN=1 THEN    
                Lcdout $fe, $C0, "Temp: -",DEC ABS (TEMPC/10), 223,"C         "
            else
                Lcdout $fe, $C0, "Temp: ",DEC ABS (TEMPC/10), 223,"C          "
            endif
    Goto MAIN  
     
    '                          BUTTON ROUTINE
    ' ====================================================================
    MENU:
     flag=1
     while flag <> 0
         pause 100      
         if flag = 1 then
            Lcdout $fe, $1, "Menu 01-OffSet Temp."     
            if OFFSETTEMP.7 = 0 THEN
                Lcdout $fe, $C0,"OffSet: ", DEC abs(OFFSETTEMP) 
            ELSE
                Lcdout $fe, $C0,"OffSet: -", DEC abs(OFFSETTEMP)
            ENDIF
            gosub PLUSBUTTON 
            gosub MINUSBUTTON     
        endif
     
        if Bmenu =0 then
            pause 200
            if flag = 1 then
                flag =0
            else
                flag = flag + 1
            endif
        endif  
     wend
    GOTO MAIN      
     
    PLUSBUTTON:
        if Bmais = 0 then 
            pause 200   
            if flag = 1 then
                if OFFSETTEMP = 5 then
                    OFFSETTEMP = 5
                else
                    OFFSETTEMP=OFFSETTEMP + 1
                endif
            endif
        ENDIF
    RETURN
    MINUSBUTTON:
        if BMENOS = 0 then 
            pause 200   
            if flag = 1 then
                if OFFSETTEMP = 251 then
                    OFFSETTEMP = 251
                else
                    OFFSETTEMP=OFFSETTEMP - 1
                endif
            endif
        ENDIF
    RETURN
    '                          TEMPERATURE ROUTINE
    ' ====================================================================
    SENSOR:
        owout DQ,1,[$CC, $44]
        Pause 200
        owout DQ,1,[$CC, $BE]
        OWIn  DQ, 2, [TempC.byte0, TempC.byte1]         
        sign = tempc.15
        TempC = ABS(TempC)
        TempC =(TempC>>1)*10 + (TempC.0 * 5)
    return
    END
    Attached Files Attached Files
    Thanks and Regards;
    Gadelhas

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