ds18b20 entegresi nasıl hesaplanır ?

Başlatan soner_karadeniz, 06 Şubat 2011, 23:37:21

soner_karadeniz

ds18b20 ve 7 segment display ile dijital termometre yapacağım fakat ds18b20 entegresinin hesablamasını bilmiyorum ve bulamadım yardımcı olan olursa sevinirim.
   

herkeze iyi çalışmalar

X-Fi

sanırım hesaplama değil haberleşmeye ihtiyacınız var "one wire" olarak aratırsanız hakkında bilgi edinirsiniz. sensör dijital olduğu için bişey hesaplamanıza gerek kalmıyor.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

PARSIC

öcelikle one wire iletişimi,sonrasında da ds18b20 komut ve kodlarını öğrenmeniz gerekiyor...program içerisinde doğrudan bir hesaplama olmasa da bir takım kaydırma ve maskeleme işlemleri kullanılıyor...
********************************************************************HI-TECH*******************************************************************

Klein

elde ettiğiniz 12 bit değeri 0.0625 ile çarparsanız doğrudan sıcaklık değerini alırsınız.

PARSIC

bu dediğiniz olay zaten ds18b20 nin içindeki kontrol bitleri ile yapılmaktadır...yapılması gereken sadece tam kısımla ondalık kısmı ayırmak bu da bir kaydırma işlemi ve maskeleme işlemi ile yapılabilir
********************************************************************HI-TECH*******************************************************************

omereliusuk

If TERM>32768 Then 'işaret - ise
TERM_ONDA=(TERM.LowByte//16)
TERM_ONDA=(TERM_ONDA*10)/16
TERM_TAM= TERM>>4
TERM_TAM =((4096-TERM_TAM)*10) - TERM_ONDA
Else
TERM_ONDA=(TERM.LowByte//16)
TERM_ONDA=(TERM_ONDA*10)/16
TERM_TAM= TERM>>4
TERM_TAM =(TERM_TAM*10) + TERM_ONDA
EndIf

kaç bit yaparsan yap ben böyle hesaplıyorum

hakan2000

' One-wire temperature for Proton Board and DS1820

    Include "Proton_20.Inc"

    Dim Temperature As Word             ' Temperature storage
    Dim Count_Remain As Byte            ' Count remaining
    Dim Count_Per_C As Byte             ' Count per degree C
    Dim Dum As Byte                     ' Dummy variable to pad OWIN

    Symbol DQ = PORTC.0                 ' One-wire data pin

    DelayMS 100                         ' Wait for things to stabilise
    Cls
Mainloop:
    OWrite DQ, 1, [$CC, $44]            ' Start temperature conversion

    While ORead DQ, 4 = 0 : Wend        ' Check for still busy converting

    OWrite DQ, 1, [$CC, $BE]            ' Read the Temperature
    ORead DQ, 0, [Temperature.LowByte, Temperature.HighByte, Dum,Dum,Dum,Dum, 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)
    Print $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
    Print $FE, $C0, Dec (Temperature / 100), ".", Dec2 Temperature, " F"

    DelayMS 1000                        ' Display once a second

    GoTo Mainloop                       ' Do it forever

fofo

SENSOROKU:      
       OWRITE   DQ_PIN, 1,SENS_FAULT, [$CC, $44]
 BEKLE:
       OREAD  DQ_PIN, 4,SENS_FAULT, [BUSY]    
        IF  BUSY = 0 THEN BEKLE    
       OWRITE  DQ_PIN, 1,SENS_FAULT, [$CC, $BE]
        OREAD  DQ_PIN, 2,SENS_FAULT,[HAM.LOWBYTE, HAM.HIGHBYTE]
         TEMP=625 * HAM       
        ISI=DIV32 10          
       ISI=(HAM & $0FF0) >> 4