Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega 8][bascom]D18B20 cztery uklady po 1-wires

Paul_K 05 May 2010 19:25 1398 0
  • #1
    Paul_K
    Level 12  
    Witam napisałm program do obsługi czterech układów D18B20 ale jego rozdzielczość w pomiarach to 1 stopień a chciałbym żeby było 0,1 ma ktoś jakić pomysł ???


    Z góry dzięki


    wklejam kod:

    $regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8
    $crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
    'Deklaracja portów od wyświetlacza LCD
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

    Config Lcd = 20 * 2 'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)

    '*************************************WAŻNE**********************************************
    'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
    Config 1wire = Portd.5 'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
    Dim W As Byte 'deklaracja zmiennej do odczytu ilośc czujników

    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza

    Cursor Off 'Wyłącza kursor
    Cls 'Funkcja CLS czyści ekran

    Wait 5
    Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:" 'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lcd W
    Wait 3
    Cls 'Znajdź pierwszy czujnik podpięty do portu
    Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
    Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
    Dsid3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
    Dsid4(1) = 1wsearchnext()

    '*******************Odczyt numerów ID czujników temperatury*********************



    If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
    Locate 1 , 1
    Lcd "CRC OK Czujnik 1 ID"
    Wait 1
    Locate 1 , 1
    For B = 1 To 8
    Lcd Hex(dsid1(b))
    Next
    End If
    Wait 2

    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
    Locate 2 , 1
    Lcd "CRC OK Czujnik 2 ID"
    Wait 1
    Locate 2 , 1
    For B = 1 To 8
    Lcd Hex(dsid2(b))
    Next
    End If
    Wait 2

    If Dsid3(8) = Crc8(dsid3(1) , 7) Then
    Locate 1 , 1
    Lcd "CRC OK Czujnik 3 ID"
    Wait 1
    Locate 1 , 1
    For B = 1 To 8
    Lcd Hex(dsid3(b))
    Next
    End If
    Wait 2

    If Dsid4(8) = Crc8(dsid4(1) , 7) Then
    Locate 2 , 1
    Lcd "CRC OK Czujnik 4 ID"
    Wait 1
    Locate 2 , 1
    For B = 1 To 8
    Lcd Hex(dsid4(b))
    Next
    End If
    Wait 2
    Cls

    '*******************koniec odczytu ID czujników temperatury*********************

    Do
    1wreset
    1wwrite &H55
    1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
    1wwrite &HBE
    I1 = 1wread(2)
    '---------------------------------
    1wreset
    1wwrite &H55
    1wverify Dsid2(1) 'wysylam adres drugiego czujnika
    1wwrite &HBE
    I2 = 1wread(2)
    '---------------------------------
    1wreset
    1wwrite &H55
    1wverify Dsid3(1) 'wysylam adres trzeciego czujnika
    1wwrite &HBE
    I3 = 1wread(2)
    '---------------------------------
    1wreset
    1wwrite &H55
    1wverify Dsid4(1) 'wysylam adres czwartego czujnika
    1wwrite &HBE
    I4 = 1wread(2)
    '--------konwersja temp dla wszystkich dsow
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Wait 1

    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********

    I1 = I1 * 10
    I1 = I1 / 16
    'If I1 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
    Ss = Str(i1)
    Ss = Format(ss , " 0.0")
    Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
    Lcd "Zew" ; Ss ; Chr(0) ;

    I2 = I2 * 10
    I2 = I2 / 16
    'If I2 > 0 Then Cls
    Ss = Str(i2)
    Ss = Format(ss , " 0.0")
    Locate 2 , 1
    Lcd "Lod" ; Ss ; Chr(0) ;

    I3 = I3 * 10
    I3 = I3 / 16
    'If I3 > 0 Then Cls
    Ss = Str(i3)
    Ss = Format(ss , " 0.0")
    Locate 1 , 11
    Lcd "Wew " ; Ss ; Chr(0) ;

    I4 = I4 * 10
    I4 = I4 / 16
    'If I4 > 0 Then Cls
    Ss = Str(i4)
    Ss = Format(ss , " 0.0")
    Locate 2 , 11
    Lcd "Piec" ; Ss ; Chr(0) ;

    Loop

    'Koniec programu


    Proszę używać znaczników code!
    Robak