Shop OBEX P1 Docs P2 Docs Learn Events
DS1620/DS1820 Higher Precision — Parallax Forums

DS1620/DS1820 Higher Precision

ArchiverArchiver Posts: 46,084
edited 2001-05-23 18:00 in General Discussion
Does anyone have STAMP .bsp code (for the new P24 Basic Stamp) that
supports reading the higher precision capabilities of the DS1620 or
DS1820 1-wire thermometer?

There seems to be alot of code for the general precision temperature
conversion, but I can't seem to find anything for getting the greater
precision...

Thanks for any help you can give... I've just started out trying to
write things for the Basic Stamp, and so far its been great!

Thanks,
John

Comments

  • ArchiverArchiver Posts: 46,084
    edited 2001-05-23 00:45
    [font=arial,helvetica]The pbasic program below may be what you want.
    Chuck


    ' This program demonstrates interfacing to a Dallas Semiconductor DS1820
    1-wire Digital
    ' Thermometer chip using the BS2p's 1-wire commands. ·Connect the BS2p to the
    DS1820 as
    ' shown in the diagram in the OWIN or OWOUT command description.
    ' This code reads the Counts Remaing and Counts per Degree C registers in the
    DS1820
    ' chip in order to provide a more accurate temperature reading (down to
    1/100th of a
    ' degree). ·It also calculates degrees Fahrenheit. ·NOTE: The algebraic
    equations used
    ' will not work properly with negative temperatures.

    '{$STAMP BS2p} 'STAMP directive (specifies a BS2p)

    Temp VAR WORD 'Holds the temperature value
    CRem VAR BYTE 'Holds the counts remaining value
    CPerC VAR BYTE 'Holds the Counts per degree C value

    Start:
    ·OWOUT 0,1,[noparse][[/noparse]$CC,$44] 'Send Calculate Temperature command

    CheckForDone: 'Wait until conversion is done
    ·PAUSE 25
    ·OWIN 0,4,[noparse][[/noparse]Temp] 'Here we just keep reading low pulses until
    IF Temp = 0 THEN CheckForDone 'the DS1820 is done, then it returns high.

    ·OWOUT 0,1,[noparse][[/noparse]$CC,$BE] 'Send Read ScratchPad command
    ·OWIN 0,2,[noparse][[/noparse]Temp.LOWBYTE,Temp.HIGHBYTE,CRem,CRem,CRem,CRem,CRem,CPerC]

    ·'Calculate temperature in degrees C
    ·Temp = Temp>>1*100-25+((CPerC*100-(CRem*100))/CPerC)
    ·DEBUG HOME,DEC3 Temp/100,".",DEC2 Temp-(Temp/100*100)," C",CR

    ·'Calculate temperature in degrees F
    ·Temp = Temp*/461+3200
    ·DEBUG DEC3 Temp/100,".",DEC2 Temp-(Temp/100*100)," F"
    GOTO Start[/font]
  • ArchiverArchiver Posts: 46,084
    edited 2001-05-23 18:00
    Thanks! I'll try and play around with this code...

    --John
Sign In or Register to comment.