Code for thermostat with 18b20


Closed Thread
Results 1 to 12 of 12

Hybrid View

  1. #1
    Join Date
    Apr 2011
    Posts
    8


    Did you find this post helpful? Yes | No

    Default Re: Code for thermostat with 18b20

    I need only how to add in code setting for another temperature

  2. #2
    Join Date
    Apr 2011
    Posts
    8


    Did you find this post helpful? Yes | No

    Default Re: Code for thermostat with 18b20

    anybody help me?

  3. #3
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Code for thermostat with 18b20

    Just googled and found this which shouldn't take much to modify

    http://pic-microcontroller.com/one-w...-pro-compiler/

  4. #4
    Join Date
    Apr 2011
    Posts
    8


    Did you find this post helpful? Yes | No

    Default Re: Code for thermostat with 18b20

    OK, but how to this code
    Code:
     clear
        DEFINE OSC 8                '8MHz << NOTICE UPPERCASE ON DEFINE
    
         'END of timer/oscillator defines
    
         OSCCON = %01110001          'Int CLK 8MHz
         ANSEL = %00000000           'All digital
         ANSELH = %00000000
         OPTION_REG.7 = 1            'Weak pull-ups enabled
    
        DEFINE  LCD_DREG    PORTC  
        DEFINE  LCD_DBIT    4       
        DEFINE  LCD_RSREG   PORTB
        DEFINE  LCD_RSBIT   1     'Register select pin
        DEFINE  LCD_EREG    PORTB
        DEFINE  LCD_EBIT    0     'Enable pin
        DEFINE  LCD_BITS    4     '4-bitni data bus
        DEFINE  LCD_LINES   2      'LCD
    
        DEFINE BUTTON_PAUSE 100
           
        '*****************************************************************************
        'Pinout for EasyPic5
      
            DQ            Var   PORTA.0   ' One-wire data pin
           
            Mode_B         Var PORTC.2    
            DOWN_B         Var PORTC.3    
            UP_B           Var PORTC.0     
           
            symbol UP=PORTC.0   
            symbol SET=PORTC.1            
            symbol MO=PORTC.2           
            symbol DN=PORTC.3   
            symbol STA=PORTA.5      
            symbol STO=PORTA.4   
            symbol SO=PORTA.2    '
    
            symbol GR=PORTB.3   
            symbol DOZ=PORTB.4  
            symbol VE=PORTB.5   
           
    
    
    
        TRISA= %00111111                      
        TRISB= %00000000                  
        '*****************************************************************************   
         
        portb = %00000000 
    
            '*****************************************************************************
            ' Variables
            '*****************************************************************************
             I var word
             J var word
             tmp1    var byte
             tmp2    var byte
            Temperature    Var   Word      ' Temperature storage
            TempC         Var Word
            Float         Var Word
            TargetTemp      Var   Word      ' Desired Temperature
            Hyst         Var   Word      ' Hystereris
            V            Var   Word      ' Var. for display
    
            B1              Var Byte            ' Byte for TargetTemp calculation
            B2              Var Byte            ' Byte for TargetTemp calculation
            Count_Remain    Var Byte      ' Count remaining
            Count_Per_C    Var   Byte      ' Count per degree C
            Sign         Var   Byte      ' +/- sign
            Mode          Var   Byte      ' 0=Temp. display, 1=Set Temp, 2=Set Hysteresis
    
            Twist         Var Bit
    
            '*****************************************************************************
            ' Resolution
            '*****************************************************************************
    
            DS18B20_9bit     CON %00011111      ' 93.75ms, 0.5°C
            DS18B20_10bit    CON %00111111      ' 187.5ms, 0.25°C  <-- My favorite
            DS18B20_11bit    CON %01011111      ' 375ms,   0.125°C
            DS18B20_12bit    CON %01111111      ' 750ms,   0.0625°C  (default)
    
            DATA 46, 224, 20                        ' Temp MSB, TEMP LSB, Hysteresis DIV 10
    
           
            Mode=0                                  ' Temperature display mode
            Twist = 0
    
            PAUSE 500
            LCDOUT $FE, 1, $FE, $0C                 ' Clear display, cursor off
            PAUSE 250
    
    
    
    
            '-------------------------------------------------------------------------------
    
            OWOUT DQ, 1, [$CC, $4E, 0, 0, DS18B20_10bit]    'Skip ROM search and write N_bits
                                                           '  resolution to scratch pad
            Read 0, B1                              ' Read TargetTemp MSB
            Read 1, B2                              ' Read TargetTemp LSB
            TargetTemp=B1*256+B2                    ' Calculate TargetTemp value (Default=20.0 C.)
            Read 2, B1                              ' Read Hysteresis
            Hyst=10*B1                              ' Calculate Hysteresis value (Default= 2.0 C.)
            '-------------------------------------------------------------------------------
            MainLoop:
            If Mode_B=0 then                      ' Mode switch pressed
              Pause 50                              ' Debounce
              LcdOut $FE, $8F, "*"                  ' Show that command is accepted
              If Mode_B=0 then MainLoop            ' Wait until button is released
              Mode=Mode+1                           ' Increment mode
              If Mode=1 then                        ' Save Target Temperature (Mode1 -> Mode2)
               Write 0, TargetTemp / 256      ' TargetTemp MSB
               Write 1, TargetTemp MOD 256          ' TargetTemp LSB
              EndIf
              If Mode > 1 Then                      ' Save Hysteresis (Mode 2 -> Mode 0)       
               Mode=0                     ' Only 0, 1, 2 are valid
               Write 2, Hyst / 10                   ' Divide Hyst value to fit in Byte
              EndIf
            EndIf
    
    
            If Mode =0 then                        ' Set Target Temperature                 
              LcdOut $FE, $80, "Set Temp1       "   ' Show function
             
               V=TargetTemp                          ' TargetTemp in V
              Gosub SelectSign                      ' Select +/blank/-
              Gosub DisplayTemp                     ' Display Target Temperature
              If (UP_B=0) Or (DOWN_B=0) then    ' Up or Down button pushed
               If DOWN_B=0 then                    ' Down button
                If TargetTemp > 7500 then           ' Not lower than -25 C. (10000-MinTemp * 100)
                 TargetTemp=TargetTemp-25           ' Decrease temperuture with 0.25 C.
                EndIf
               EndIf
               If UP_B=0 then                    ' Up button
                If TargetTemp < 17500 then          ' Not higher than 75 C. (10000+MaxTemp * 100)
                 TargetTemp=TargetTemp+25           ' Increase temperature with 0.25 C.
                EndIf
               EndIf
               GoSub SetTargetTemp                  ' Display TargetTemp and delay 0.25 Sec.
              EndIf
            EndIf
    
            If Mode=1 then                         ' Set Hysteresis                         
              LcdOut $FE, $80, "Hysteresys:     "   ' Show function
               Sign= " "                              ' No sign
              V= 10000+Hyst                         ' Set value for V
              Gosub DisplayTemp                     ' Display Hysteresis
              If (UP_B=0) Or (DOWN_B=0) then    ' Up or down button pushed
               Sign= " "                             ' No sign for Hysteresis
               If DOWN_B=0 then                    ' Down button
                If Hyst > 10 then Hyst=Hyst-10      ' Not less than 0.1 C.
               EndIf
               If UP_B=0 then                    ' Up button
                If Hyst < 1000 then Hyst=Hyst+10    ' Not more than 10.0 C.
               EndIf
               V= 10000+Hyst                        ' Set value for V
               Gosub DisplayTemp                    ' Display Hysteresis
               Pause 250                            ' Delay 0.25 Sec.
              EndIf
            EndIf
    
            if Mode > 0 then Mainloop              ' Setting TargetTemperature or Hysteresis
    
             goto mainloop                         ' Check again
            '-------------------------------------------------------------------------------
    
    
    
            ' SUBROUTINES:
            '----------------------------------------
            SelectSign:
            If v = 10000 then                      ' Temperature = 0 C.
              Sign=" "             ' No sign
            Else
              If v < 10000 then                 ' <> 0
               Sign="-"            ' Temperature below 0 C.   
              Else
               Sign="+"            ' Temperature above 0 C.
              EndIf
            EndIf
            Return
            '----------------------------------------
            DisplayTemp:
             If V >= 10000 then                     ' Above 0 C.     
              Temperature=V-10000                   
             Else                                   
              Temperature=10000-V                   ' Below 0 C.
             EndIf
             LcdOut $FE, $C0, Sign, DEC (Temperature / 100), ".", DEC2 Temperature, " ",223,"C "
            Return
            '-----------------------------------------
            SetTargetTemp:
            V=TargetTemp
            Gosub SelectSign
            Gosub DisplayTemp
            Pause 250
            Return
    add this
    Code:
    If Mode =0 then                        ' Set Target Temperature                 
              LcdOut $FE, $80, "Set Temp1       "   ' Show function
             
               V=TargetTemp                          ' TargetTemp in V
              Gosub SelectSign                      ' Select +/blank/-
              Gosub DisplayTemp                     ' Display Target Temperature
              If (UP_B=0) Or (DOWN_B=0) then    ' Up or Down button pushed
               If DOWN_B=0 then                    ' Down button
                If TargetTemp > 7500 then           ' Not lower than -25 C. (10000-MinTemp * 100)
                 TargetTemp=TargetTemp-25           ' Decrease temperuture with 0.25 C.
                EndIf
               EndIf
               If UP_B=0 then                    ' Up button
                If TargetTemp < 17500 then          ' Not higher than 75 C. (10000+MaxTemp * 100)
                 TargetTemp=TargetTemp+25           ' Increase temperature with 0.25 C.
                EndIf
               EndIf
               GoSub SetTargetTemp                  ' Display TargetTemp and delay 0.25 Sec.
              EndIf
            EndIf
    but for Set temp 2
    What to modify?

  5. #5
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

    Default Re: Code for thermostat with 18b20

    Can you actually explain what you want to do.

    Cutting and pasting code from the web doesn't help. Paste up YOUR code and let us see what it is you are trying to do.

  6. #6
    Join Date
    Oct 2009
    Posts
    583


    Did you find this post helpful? Yes | No

Similar Threads

  1. 18B20 and Multi_SPWM issue
    By Scampy in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 9th May 2014, 17:41
  2. Help with 18b20 Stuck with busy bit
    By xapmanis in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 9th October 2012, 15:52
  3. ds 18b20 circuit.
    By johnyp in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 6th March 2010, 18:40
  4. 18B20 temperature sensor and PIC
    By boban in forum Schematics
    Replies: 2
    Last Post: - 4th June 2007, 14:51
  5. 18B20 Thermometer Question
    By Travin77 in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 5th April 2006, 02:18

Members who have read this thread : 1

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