OWIN / OWOUT Example

BS2p icon BS2pe icon BS2px icon

Syntax: OWIN, OWOUT

 

 

 

This program uses a Dallas Semiconductor DS1820 Digital Thermometer device connected as follows. Note that the 4.7 kΩ pull-up resistor is required for proper operation.

NOTE: This is written for the BS2p and will also run on the BS2pe and BS2px. Modify the $STAMP directive (as required) before downloading to the BS2pe or BS2px.

' OWIN_OWOUT.BSP
' This program demonstrates interfacing to a Dallas Semiconductor DS1822
' 1-Wire Digital Thermometer chip using the BS2p's 1-Wire commands. Connect
' the BS2p/BS2pe/BS2px to the DS1822 as shown in the diagram in the OWIN or
' OWOUT command description. This program uses a simplified approach that
' ignores the fractional portion of the temperature.

' {$STAMP BS2p}
' {$PBASIC 2.5}

DQ              PIN     0               ' 1-Wire buss pin

RdROM           CON     $33             ' read serial number
MatchROM        CON     $55             ' match SN -- for multiple devices
SkipROM         CON     $CC             ' ignore SN -- use for one device
CvrtTmp         CON     $44             ' start temperature conversion
RdSP            CON     $BE             ' read DS1822 scratchpad

tempIn          VAR     Word            ' raw temperature
sign            VAR     tempIn.BIT11    ' 1 = negative temperature
tLo             VAR     tempIn.BYTE0
tHi             VAR     tempIn.BYTE1
tSign           VAR     Bit             ' saved sign bit
tempC           VAR     Word            ' final Celsius temp
tempF           VAR     Word            ' final Fahrenheit temp


Main:
  DO
    GOSUB Get_Temperature               ' read temperature from DS1822
    DEBUG HOME,                         ' display
          "DS1822", CR,
          "------", CR,
          SDEC tempC, " C ", CR,
          SDEC tempF, " F "
    PAUSE 1000
  LOOP
  END

Get_Temperature:
  OWOUT DQ, 1, [SkipROM, CvrtTmp]       ' send convert temperatrue command
  DO                                    ' wait on conversion
    PAUSE 25                            ' small loop pad
    OWIN DQ, 4, [tempIn]                ' check status (bit transfer)
  LOOP UNTIL (tempIn)                   ' 1 when complete
  OWOUT DQ, 1, [SkipROM, RdSP]          ' read DS1822 scratchpad
  OWIN  DQ, 2, [tLo, tHi]               ' get raw temp data
  tSign = sign                          ' save sign bit
  tempC = tempIn >> 4                   ' round to whole degrees
  tempC.BYTE1 = $FF * tSign             ' correct 2's compliment bits
  tempF = (ABS tempC) * 9 / 5           ' start F conversion
  IF (tSign) THEN                       ' finish F conversion
    tempF = 32 - tempF                  ' C was negative
  ELSE
    tempF = tempF + 32                  ' C was positive
  ENDIF
  RETURN

Go to Welcome page

BASIC Stamp Help Version 2.5.4

Copyright © Parallax Inc.

8/8/2012