logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

DS1820 i Bascom: Błędne odczyty temperatury poniżej zera, AT90S2313, 4MHz

robusta 11 Maj 2005 14:03 1043 1
  • #1 1482519
    robusta
    Poziom 15  
    Posty: 189
    Ocena: 1
    Witam,
    zdecydowałem się ponownie poruszyć temat najpopularniejszego chyba układu na elektrodzie - przeczytałem chyba wszystkie posty i wydaje mi się, że zastosowałem się do porad dla innych pytających - a jednak:
    układ teoretycznie dobrze mierzy temperaturę, jest to DS1820 na 3 przewodach +, - i sygnał przez 4,7k do + do 90S2313, kwarc 4MHz. W pokoju pokazuje 23 'C niby ok, problem zaczyna się jak mu lekko pociągnę z zamrażacza i wejdzie poniżej zera wtedy jedzie od -99 w dół - im niższa temperatura tym mniejsza liczba (-99,-80,-60,-30) jak się ociepla to wraca w drugą stronę a jak przejdzie na dodatnie to nie likwiduje "minusa" z przodu.

    Proszę pomóżcie! jeszcze żaden układ tak mnie nie rozłożył.
    Gdzie się walnąłem?
    Pozdr.


    Poniżej listing:

    $crystal = 4000000
    $regfile = "2313def.dat"
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
    Config 1wire = Portd.5
    Dim T1 As Byte , T2 As Byte , Temperatura As Byte
    Declare Sub Temperature
    Declare Sub Read1820
    Display On
    Cursor Off

    Cls
    Locate 1 , 1
    Lcd "Zmierzona temp.:"

    Do
    Gosub Temperature
    Gosub Read1820
    Loop

    Temperature:
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 250
    Waitms 250
    Return

    Read1820:
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Waitms 250
    Waitms 250
    T1 = 1wread(1)
    T2 = 1wread(2)
    1wreset

    If T2 = 0 Then
    Temperatura = T1 / 2
    Locate 2 , 2
    Lcd Temperatura
    Else
    T1 = 256 - T1
    Temperatura = T1 / 2
    Locate 2 , 1
    Lcd "-"
    End If
    If Temperatura = 0 Then
    Locate 2 , 1
    Lcd " "
    End If
    Return
  • #2 1482874
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 295
    Spróbuj cos takiego:

    if t2 = 0 then
    temperatura = t1/2
    locate 2,1
    lcd " " ;temperatura
    else

    toggle t1' : t1=t1+1 'dodaj to do kodu jezeli na wyswietlaczu pojawiło by sie -0
    temperatura = t1/2
    locate 2,1
    lcd "-" ;temperatura
    end if
REKLAMA