PIC Basic DS1820 digital thermometer with 16F877

DS18B20-1
เซนเซอร์ตรวจจับอุณหภูมิ DS1820 เป็น IC แบบดิจิตอล สามารถวัดอุณภูมิในช่วง -55°C ถึง 125°C มีความคลาดเคลื่อนต่ำสุด ±0.5°C เมื่อใช้งานอยู่ที่ -10°C ถึง 85°C ใช้สายเพียงเส้นเดียวในการส่งข้อมูล

FEATURES

  • Unique 1-Wire® Interface Requires Only One Port Pin for Communication
  • Each Device has a Unique 64-Bit Serial Code Stored in an On-Board ROM
  • Multidrop Capability Simplifies Distributed Temperature-Sensing Applications
  • Requires No External Components
  • Can Be Powered from Data Line; Power Supply Range is 3.0V to 5.5V
  • Measures Temperatures from -55°C to +125°C (-67°F to +257°F)
  • ±0.5°C Accuracy from -10°C to +85°C
  • Thermometer Resolution is User Selectable from 9 to 12 Bits
  • Converts Temperature Integrated Digital Word in 750ms (Max)

ตัวอย่างโปรแกรมอ่านค่าจาก DS1820 ที่อ่านเฉพาะค่า + เท่านั้นถ้าจะอ่านค่า – ต้องนำมาทำ 2’s complement

‘****************************************************************
‘*  Name    : DS1820-TEMP.BAS                                   
‘*  Author  : HS3UKA                                           
‘*  Notice  : Copyright (c) 2013 
‘*          : All Rights Reserved                               
‘*  Date    : 1/2/2013                                          
‘*  Version : 1.0                                               
‘*  Notes   : http://www.hs3uka.com                           
‘****************************************************************
include “modedefs.bas”
define  OSC 10
DEFINE  LCD_DREG        PORTB
DEFINE  LCD_DBIT        4
DEFINE  LCD_RSREG       PORTB
DEFINE  LCD_RSBIT       0
DEFINE  LCD_EREG        PORTB
DEFINE  LCD_EBIT        1

DQ              VAR     PORTA.0         ‘ One-wire data pin
temperature     VAR     WORD            ‘ Temperature storage
count_remain    VAR     BYTE            ‘ Count remaining
count_per_c     VAR     BYTE            ‘ Count per degree C

ADCON1 = 7                    ‘ Set PORTA and PORTE to digital

mainloop:
   OWOut DQ, 1, [$CC, $44]       ‘ Start temperature conversion

Your ads will be inserted here by

Easy Plugin for AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

waitloop:
   OWIn DQ, 4, [count_remain]    ‘ Check for still busy converting
   If count_remain = 0 Then
        Lcdout $fe, 1, “No DS1820”
        Pause 100
        goto waitloop
   else
        goto LCD
   endif

LCD:
   OWOut DQ, 1, [$CC, $BE]       ‘ Read the temperature
   OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]

   ‘ Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
   temperature = (((temperature >> 1) * 100) – 25) + (((count_per_c – count_remain) * 100) / count_per_c)
   Lcdout $fe, 1, DEC (temperature / 100), “.”, DEC2 temperature, ” C”

   ‘ Calculate temperature in degrees F to 2 decimal places (not valid for negative temperature)
   temperature = (temperature */ 461) + 3200
   Lcdout $fe, $c0, DEC (temperature / 100), “.”, DEC2 temperature, ” F”

   Pause 1000                    ‘ Display about once a second
   Goto mainloop                 ‘ Do it forever

   End

DS18B20-2

(เซนเซอร์ในโปรแกรม simulator มีปัญหาจะได้ค่าเพี้ยน แต่ถ้านำมาต่อจริงจะไม่มีปัญหา)

Facebook Comments