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.

[bascom] DS18b20 strzałki sygnalizujące spadek i wzrost temp

Mariuszek15 05 Jul 2008 13:59 5630 21
  • #1
    Mariuszek15
    Level 24  
    Witam jak wykonać, szczałki sygnalizujące spadek tem i wzrost temp w bascom?? Jak napisać program, aby dobrze on działał i szczałki dobrze wskazywały?
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • #2
    JmL(TM)
    Level 24  
    A co to jest SZCZAŁKA? :? I moglbys swoje pytanie troche rozwinac bo mozna te "szczalki" np. wyswietlac na LCD lub podlaczyc LED [takie jak w np. windach]. A zalozenie jest takie, ze pobierasz temp. i porownujesz z ostatnim pomiarem i jesli wartosc jest mniejsza to temp. spada, czyli "szczalka" w dol. Natomiast jesli temp. jest wieksza od poprzedniego pomiaru wtedy "szczalka" w gore. Proste prawda?! :D
  • #5
    JmL(TM)
    Level 24  
    No nic prostrzego chyba juz nie ma do zrobienia. Deklarujesz 2 zmienne i najpierw dokonujesz odczytu i zapisujesz do jednej zmiennej, a nastepnie po min. 0,7sek bo chyba tyle potrzebuje DS z tego co pamietam dodkonujesz nastepnego pomiaru i wartosc zapisujesz do zmiennej nr 2. Pozniej tylko warunek:

    Code:
    jesli [t2>t1] wtedy
    
      wyswietl strzalke [temp. rosnie]
    w przeciwnym wypadku
      jesli [t2<t1] // to zeby wyeliminowac gdy temperatura jest identyczna
        wyswietl strzalke [temp. maleje]


    A jesli chcesz gotowca to Balu chetnie ci pomoze bo w jego poscie na dole mozna przeczytac:

    Quote:
    Przyjmę zlecenia na układy z uC (PIC/AVR/51/8080) w (C/ASM/BASCOM) i nie tylko, krótkie terminy, rzetelnie!


    wiec pewnie sobie z tym poradzi i niedrogo wezmie! :D
  • #6
    Samuraj
    Level 35  
    Przecież JmL(TM) dość szczegółowo ci napisał jak to wykonać.
    Chyba że liczysz na gotowca, jeśli tak to nie tędy droga.
    Zrób sobie zmienną i w niej zapamiętaj wynik pomiaru.
    Przy kolejnym odczycie od tej zmiennej odejmij aktualną temperaturę:
    - jeśli wynik tej operacji będzie ujemny to temperatura spadła i strzałka w dół.
    - jeśli wynik równy jest 0 to temperatura się nie zmieniła
    - jeśli wynik po odejmowaniu będzie dodatni to temperatura wzrosła i strzałka w górę.
  • #7
    JmL(TM)
    Level 24  
    Samuraj ja nie tylko dosc szczegolowo to opisalem ale praktycznie napisalem potrzebny kawalek kodu, z ta tylko roznica, ze po polsku :D Jesli by to zamienic na angielski to otrzymujemy gotowca... hehehe Ale mam nadzieje, ze Mariuszek15 juz sobie z tym poradzil.
  • #8
    Mariuszek15
    Level 24  
    Tak tak poradziłem sobie :) Działa elegancko tylko jeszcze musze wykonać histerezę ;) Dla OUT 1*C a dla IN 0,3*C.
  • #10
    JmL(TM)
    Level 24  
    Quote:
    Histereza - zjawisko zależności aktualnego stanu układu od stanów w poprzedzających chwilach. Inaczej - opóźnienie w reakcji na czynnik zewnętrzny (...)


    A jesli chcesz wiecej to zapraszam na: http://pl.wikipedia.org/wiki/Histereza
  • #11
    daw_id
    Level 12  
    Jak ktoś pyta, co to jest histereza, to takiej jej definicji też raczej nie zrozumie ;p

    Chodzi o to, że np. strzałka zmieni się na rosnącą przy różnicy kolejnych dwóch wartości o 0.2°C, a na malejącą przy różnicy o -0.2°C - a nie od razu przy JAKIEJKOLWIEK różnicy. Tym sposobem strzałka nie będzie szaleć, jeśli temperatura będzie stała, albo prawie stała - bo nawet stała temp. tak na prawdę daje z czujnika lekko szalejący odczyt - strzałka by ci wtedy wariowała cały czas góra-dół-góra-dół-góra...

    Pozdro
  • #12
    Hubold
    Level 11  
    Witam!

    W zeszłym roku był na ten temat topic.

    Strona z kodem w połowie jest kod.

    Code:
    Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci 
    
    'Kontakt duszkowski(małpa)o2.pl


    $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 I11 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I22 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I33 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I44 As Integer                                          ' przechowuje poprzednią wartoś temp

    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 , 8 , 32 , 32 , 32 , 32 , 32          'znak stopnia Celsjusza
    Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzałka góra
    Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzałka dół


    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "     Termometr      " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd " by Duch 9.09.2007  "
    Wait 5
    Cls
    Lcd "  Upgrade 24.04.08  " ;
    Wait 3                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    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 >= I11 Then
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If


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


       I3 = I3 * 10
       I3 = I3 / 16
       If I3 >= I33 Then
       I33 = I3
       If I3 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I33 = I3
       If I1 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If


       I4 = I4 * 10
       I4 = I4 / 16
       If I4 >= I44 Then
       I44 = I4
       If I1 > 0 Then
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i4)
       Ss = Format(ss , "0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I44 = I4
       If I4 > 0 Then
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i4)
       Ss = Format(ss , "0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If

    Loop

    'Koniec programu
    'Pozdrawiam Duch


    Musisz tylko dostosować go do swoich potrzeb , czyli jeżeli masz 2 czujniki musisz usunąć komendy wyszukiwania 3 i 4 czujnika oraz wyświetlania temp. pobranej z 3 i 4 czujnika itp. :] Ja w swoim projekcie wykorzystałem właśnie ten kod, działa wyśmienicie:) problem tylko w tym ,że strzałka jest cały czas w ruchy zn. zmienia się bardzo często ze wzrostowej na malejącą przy niewielkich różnicach temp.


    Pozdrawiam
    Michał
  • #14
    Hubold
    Level 11  
    No to wiem. Ale w sumie nie potrzebuję Histerezy więc nie kombinuję jak ulepszyć ten program poza tym dopiero zaczynam z programowaniem.
  • #15
    Mariuszek15
    Level 24  
    Mam pytanko czy na linii SDA SCL może być złącze ISP chodzi głównie o TDA7318 i pamięć eeprom. Czy te scalaki nie ulegną uszkodzeniu, jeśli będzie układ programowany (ATMEGA32) ?
  • #17
    Mariuszek15
    Level 24  
    Jak pozmieniać wartości? Właśnie to ale mnie martwi :(
  • #18
    Balu
    Level 38  
    Zawsze możesz mieć strasznego pecha i trawić danymi procka w adres urządzenia do zapisu, potem sie moze wygenerować potwierdzenie bla bla bla ... ale... NIE MOŻLIWE:)
    Ja bym się tym nie przejął chyba:P
  • #19
    nico99
    Level 11  
    JmL(TM) wrote:
    No nic prostrzego chyba juz nie ma do zrobienia. Deklarujesz 2 zmienne i najpierw dokonujesz odczytu i zapisujesz do jednej zmiennej, a nastepnie po min. 0,7sek bo chyba tyle potrzebuje DS z tego co pamietam dodkonujesz nastepnego pomiaru i wartosc zapisujesz do zmiennej nr 2. Pozniej tylko warunek:

    Code:
    jesli [t2>t1] wtedy
    
      wyswietl strzalke [temp. rosnie]
    w przeciwnym wypadku
      jesli [t2<t1] // to zeby wyeliminowac gdy temperatura jest identyczna
        wyswietl strzalke [temp. maleje]


    A jesli chcesz gotowca to Balu chetnie ci pomoze bo w jego poscie na dole mozna przeczytac:

    Quote:
    Przyjmę zlecenia na układy z uC (PIC/AVR/51/8080) w (C/ASM/BASCOM) i nie tylko, krótkie terminy, rzetelnie!


    wiec pewnie sobie z tym poradzi i niedrogo wezmie! :D



    Pozdrowienia,

    jestem tutaj nowy i poczatkujacy Urzytkownik BASCOM.
    Chce rowniez zbudowac taki Termometr , plytka do testowania jest juz gotowa i Termometr dziala. W innych Kodach mialem problemy we wkazaniu temperatury, zawsze brakowalo pierwszej cyfry.
    Jedno co mi nie wychodzi jest z tymi Strzalkami. Ale dokladnie mowiac mam jakich nieporzadek w kodzie i nie moge znalezc gdzie.

    Tutaj jest wycinek z tego kodu:

    Code:
    1wreset
    
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1(1) = 1wread(9)


       1wreset
       1wwrite &HCC
       1wwrite &H44
    Waitms 300
    Waitms 300


    If I1(8) = Crc8(i1(1) , 7) Then
    Crc = 0
    End If
       If Crc = 0 Then
       Tmp = I1(1) And 1
       If Tmp = 1 Then Decr I1(1)
       T = Makeint(i1(1) , I1(2))
       T = T * 50 : T = T - 25 : T1 = I1(8) - I1(7) : T1 = T1 * 100
       T1 = T1 / I1(8) : T = T + T1 : T = T / 10
       End If
          If Crc = 1 Then
          Locate 4 , 1 : Lcd " Sensor Error! "
          Else
          Locate 4 , 1
          Lcd "WaterTemp:"
          If Crc = 0 Then
          Locate 4 , 12
          Ia = Str(t)
          Lcd Left(ia , 2) : Lcd "."
          Lcd Mid(ia , 3 , 1)
          Locate 4 , 16 : Lcd Chr(1) ; "C"
          End If

    '------------------Strzalka przy obnizeniu albo podwyzszeniu Temp---------------
    If T1 > T Then
    Locate 4 , 19 : Lcd Chr(12)
    Else
    If T1 < T Then
    Locate 4 , 19 : Lcd Chr(13)
    End If

    End If

    Loop
    End

    Return


    [bascom] DS18b20 strzałki sygnalizujące spadek i wzrost temp

    Bascom pokazuje te bledy ale ja nie moge dojsc do tego. Jestem jak wspomnialem poczatkujacy.

    Moze mi ktos poradzi albo wakaze co mam poprawic.

    Dzekuje.

    Pozdrowienia
    Nico:?:

    PS: znalazlem ten blad, brakowal jeden End if.
    Niestety strzalki nie reaguja na zmiane temperatury...

    post raportowany,
    proszę poprawić błędy,
    post będzie bardziej czytelny
    And!


    Dodano po 3 [godziny] 1 [minuty]:

    Quote:


    post raportowany,
    proszę poprawić błędy,
    post będzie bardziej czytelny
    And!


    Bardzo hetnie ale moj polski nie jest za dobry...
  • #20
    crazy_phisic
    VIP Meritorious for electroda.pl
    Proszę pozostawić dla siebie wszystkie niepotrzebne uwagi, forum jest miejscem publicznym i otwartym dla każdego. Nie będę tolerował żadnych przejawów dyskryminacji.
  • #21
    nico99
    Level 11  
    Hubold wrote:
    Witam!

    W zeszłym roku był na ten temat topic.

    Strona z kodem w połowie jest kod.

    Code:
    Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci 
    
    'Kontakt duszkowski(małpa)o2.pl


    $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 I11 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I22 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I33 As Integer                                          ' przechowuje poprzednią wartoś temp
    Dim I44 As Integer                                          ' przechowuje poprzednią wartoś temp

    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 , 8 , 32 , 32 , 32 , 32 , 32          'znak stopnia Celsjusza
    Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzałka góra
    Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzałka dół


    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "     Termometr      " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd " by Duch 9.09.2007  "
    Wait 5
    Cls
    Lcd "  Upgrade 24.04.08  " ;
    Wait 3                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    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 >= I11 Then
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I11 = I1
       If I1 > 0 Then
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , "0.0")
       Locate 1 , 1
       Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If


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


       I3 = I3 * 10
       I3 = I3 / 16
       If I3 >= I33 Then
       I33 = I3
       If I3 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I33 = I3
       If I1 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , "0.0")
       Locate 1 , 11
       Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If


       I4 = I4 * 10
       I4 = I4 / 16
       If I4 >= I44 Then
       I44 = I4
       If I1 > 0 Then
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
       Else
       Ss = Str(i4)
       Ss = Format(ss , "0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
       End If
       Else
       I44 = I4
       If I4 > 0 Then
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
       Else
       Ss = Str(i4)
       Ss = Format(ss , "0.0")
       Locate 2 , 11
       Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
       End If
       End If

    Loop

    'Koniec programu
    'Pozdrawiam Duch


    Musisz tylko dostosować go do swoich potrzeb , czyli jeżeli masz 2 czujniki musisz usunąć komendy wyszukiwania 3 i 4 czujnika oraz wyświetlania temp. pobranej z 3 i 4 czujnika itp. :] Ja w swoim projekcie wykorzystałem właśnie ten kod, działa wyśmienicie:) problem tylko w tym ,że strzałka jest cały czas w ruchy zn. zmienia się bardzo często ze wzrostowej na malejącą przy niewielkich różnicach temp.


    Pozdrawiam
    Michał


    Halo Michał,

    mam problem z tym kodem bo wyświetla mi tylko n.p.: 2.6 Stopni a nie jak powinno: 22.6 Stopni

    Mógł byś pomóc?

    Dziękuję z góry i pozdrawiam.

    Nico
  • #22
    User removed account
    User removed account