Forum www.nestor-electronic.pl Strona Główna www.nestor-electronic.pl
Forum sterowników procesorowych- programy BASCOM
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

czujnik temp 4xDS18B20

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Sob Lis 29, 2008 7:30 am    Temat postu: czujnik temp 4xDS18B20 Odpowiedz z cytatem

Witam
znalazlem fajny program do odczytu 4xds18b20 (ze strony elektrody zrobiony przez Duch_)

Moje pytanko jest takie skoro kontroler zczytuje za kazdym razem id czujnika to jak sie polapac potem ktory jest ktory, moze bardziej luckim glosem chodzi o to ze by potem sie nie okazalo ze czujnik ktory ma zczytywac temp z Bojlera bedzie mi pokazywac na wyswietlaczu temp w Domu. W jaki spospb kontroler zczytuje id czujnika od najmniejszego nr do najwiekszego??? bo jesli tak to poprostu podlacze sobie 4 czujniki zobacze ktoryt jest od czego a potem opisze je i przy podlanczaniu bede juz wiedzial. No chyba ze podlaczyc wszystkie 4 tam gdzie maja juz byc zobaczyc ktory jest od czego i w razie problemu zmienic tylko w programie? a moze jest na to inna rada????
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Sob Lis 29, 2008 7:31 am    Temat postu: Odpowiedz z cytatem

Kurcze zapomnialem dołączyć program. Program jest przerobiony pod moja plytke testowa wiec odbiega od oryginalu.

Kod:

'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
'Kontakt duszkowski@o2.pl


$regfile = "m16def.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 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2

Config Lcd = 20 * 4                                         '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 = Portc.1                                      '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 Dsic1(8) As Byte
Dim Dsic2(8) As Byte
Dim Dsic3(8) As Byte
Dim Dsic4(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
Lcd " Termometr by Duch  " ;                                'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd "        2007        "
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
Dsic1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
Dsic2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
Dsic3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
Dsic4(1) = 1wsearchnext()

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

If Dsic1(8) = Crc8(dsic1(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(dsic1(b))
 Next
End If
Wait 2

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

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

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

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

Do
   1wreset
   1wwrite &H55
   1wverify Dsic1(1)                                        'wysyłamy adres pierwszego czujnika
   1wwrite &HBE
   I1 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsic2(1)                                        'wysylam adres drugiego czujnika
   1wwrite &HBE
   I2 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsic3(1)                                        'wysylam adres trzeciego czujnika
   1wwrite &HBE
   I3 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsic4(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 "Boj" ; 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
'Pozdrawiam Duch

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
rafal
Site Admin


Dołączył: 08 Lis 2007
Posty: 1180
Skąd: Olkusz

PostWysłany: Sob Lis 29, 2008 5:23 pm    Temat postu: Odpowiedz z cytatem

no niestety to jest wada odczytu na jednej lini danych. Wystarczy ze zmnienisz jeden czujnik i już program ci ie wysypuje. dlatego ja stosuje odczyt każdego czujnika na osobnej lini- dokładam taki program na płycie CD wtedy powyższy problem nie występuje
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Pon Gru 01, 2008 6:51 pm    Temat postu: Odpowiedz z cytatem

No oki opisalem sobie ktory ds jaka temp pokazuje ale pojawil mi sie problem. Temperatura faktyczna nie zgadza mi sie z ta co pokazuje mi DS idzie to jakas wykalibrowac? (dlugosc kabla ok 10m UTP)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
rafal
Site Admin


Dołączył: 08 Lis 2007
Posty: 1180
Skąd: Olkusz

PostWysłany: Pon Gru 01, 2008 8:53 pm    Temat postu: Odpowiedz z cytatem

Nic nie kalibrujesz czujniki sa kalibrowane fabrycznie a ich dokładność to 0.5 stopnia celcjusza. Nie wiem na jakich pomiarach sie opierasz i skąd wiesz że ten Twój drugi termometr nie przekłamuje- bo z doświadczenia wiem, ze tylko termometry rtęciowe maja poprawne wskazania- oczywiście laboratoryjne takie co maja podziałke 0,1 stopnia- a cała reszta to poprostu pokazuje co sama chce, w każdym razie DS-y sa od nich dokładniejsze, ale zawsze możesz wsadzić czujnik do topniejącego lodu z wodą i tam masz mieś okoloce 0 stopni- oczywiście ważne tez jest ciśnienie atmoswferyczne bo im niższe tym temperatura faktyczna będzie niąsza itd....
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Wto Gru 02, 2008 6:15 am    Temat postu: Odpowiedz z cytatem

Temp sprawdzalem przy pomocy laserowego czujnika!!!! ale wydaje mi sie ze problem tkwi w zamocowaniu czujnika na instalacji. Zrobilem pomiar w miejscu na wylocie cieplej wody z kotla czujnikiem laserowym i temp mi sie zgadzala z odczytem temp przez czujnik oryg na piecu. Ale jak zamontowalem tam czujnik to juz 6stopni mam mniej na DS.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
rafal
Site Admin


Dołączył: 08 Lis 2007
Posty: 1180
Skąd: Olkusz

PostWysłany: Sro Gru 03, 2008 9:39 am    Temat postu: Odpowiedz z cytatem

ja to zrobiłem tak:
czujnik zamontowałem na ruże opaską plastikową a najelpiej by było metalową tak zeby jak najlpiej dolegal do rury a potem całość owinąłem izolacją cieplną do rur (taka szara co sie na ruru co zakłada),bo jak izolacji nie było to żeczywiście temperatura była zaniżana. Oczywiście izolację też zaciągnąłemopaskami żeby dobre dolegała do czujnika i czujnik sie nie wychładzał. Izolacji użyć jak najgrubszej!, żeby dobrze odizolowała czujnik od otoczenia. Jak masz maste termoprzewodzącą takom co sie smarujetranzystory lub procesory tomożesz posmarować miejsce styku czujnika z rurą. Ja poprwdzie tak nie robiłem a wskazania mam dość dokładne (porównujac z termometrem rtęciowym). Najwazniejsze żeby czujnik dobrze dolegał do rury, można by ja jeszcze delikatnie seszlifować pilnikiem tak żeby była płaska a nie okręgła to wtedy będzie jeszcze dokładniej dolegał- to wszytko powinno pomóc-przynajmniej u mnie działa- oczywiście pomiar mam na rurach stalowych a nie plastikowych- ale to chyba logiczne
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Czw Gru 04, 2008 6:24 am    Temat postu: Odpowiedz z cytatem

No ja mam czujnik na rurze miedzianej wiec teoretycznie powinno byc jeszcze lepiej... ale sprobuje faktycznie ta pasta przewodzaca zrobic oki dzieki
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
rafal
Site Admin


Dołączył: 08 Lis 2007
Posty: 1180
Skąd: Olkusz

PostWysłany: Pon Gru 08, 2008 8:43 pm    Temat postu: Odpowiedz z cytatem

tak ale najważniejsze to zaizolowac od góry !! bo wtedy ciepło ucieka i odczyty sa do bani
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
frudek
Nowy


Dołączył: 23 Kwi 2012
Posty: 1

PostWysłany: Pon Kwi 30, 2012 9:13 pm    Temat postu: Odpowiedz z cytatem

rafal napisał:
no niestety to jest wada odczytu na jednej lini danych. Wystarczy ze zmnienisz jeden czujnik i już program ci ie wysypuje. dlatego ja stosuje odczyt każdego czujnika na osobnej lini- dokładam taki program na płycie CD wtedy powyższy problem nie występuje


Temat stary ale pozwolę sobie odświeżyć. Skoro lepiej jest na osobnych liniach rodzi się pytanie ile jest wolnych linii w przypadku płytki testowej z 6 przekaźnikami na atmega 32. Potrzebuję obsłużyć 9 czujników DS18b20.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
SunRiv
Zawsze na posterunku


Dołączył: 11 Lut 2009
Posty: 321
Skąd: Opole

PostWysłany: Pią Maj 04, 2012 6:37 pm    Temat postu: Odpowiedz z cytatem

Się upieracie na badziewnym pomyśle puszczania czujników osobno , poco
czy tak trudno oidczytywac je na jednej linii ?? Przecież poto wymyslono magistrale 1 wire by na niej powiescic wiecej urządzeń niz jedno inaczej by nie miała sensu, każdy czujnik ma swój unikalny numer id , dzieki którym łatwo odróznic który jest czytany , no ale ... jak ktoś sobie lubi zycie utrudniać ....
_________________
Subaru Libero SDX-SR 94"
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Czw Lis 08, 2012 8:01 pm    Temat postu: Odpowiedz z cytatem

Chciał bym troche temat odkopać i zapytać czy ktoś ma pomysł jak przypisać dany czujnik DS pod określoną funkcje.
Chodzi mi dokładnie o jakis parameter w menu przy pomocy ktorego bede mógł przypisywac i zmieniac ds-y
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Czw Lis 08, 2012 8:03 pm    Temat postu: Odpowiedz z cytatem

Kod:
'>>>>>>>>>>>>>>>>>>>>>>Wybor_czujnikow_temperatury<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Wybor_czujnikow_temperatury:
Cls

Wybor = 1

Do

Home
  Cursor Off


  Debounce S1 , 0 , Zw_wybor , Sub                          ' incr licz
  Debounce S2 , 0 , Zm_wybor , Sub                          ' decr licz

Select Case Wybor
    Case Is < 1 : Wybor = 5
    Case 1
      Lcd "T. bojlera   >" ; Q
      Lowerline
      Lcd "T. pieca      " ; N
      Thirdline
      Lcd "T. solara     " ; R
      Fourthline
      Lcd "T. zewnetrzna " ; L
      If S3 = 0 Then Gosub Czujnik
    Case 2
      Lcd "T. bojlera    " ; Q
      Lowerline
      Lcd "T. pieca     >" ; N
      Thirdline
      Lcd "T. solara     " ; R
      Fourthline
      Lcd "T. zewnetrzna " ; L
      If S3 = 0 Then Gosub Czujnik
    Case 3
      Lcd "T. bojlera    " ; Q
      Lowerline
      Lcd "T. pieca      " ; N
      Thirdline
      Lcd "T. solara    >" ; R
      Fourthline
      Lcd "T. zewnetrzna " ; L
      If S3 = 0 Then Gosub Czujnik
    Case 4
      Lcd "T. bojlera    " ; Q
      Lowerline
      Lcd "T. pieca      " ; N
      Thirdline
      Lcd "T. solara     " ; R
      Fourthline
      Lcd "T. zewnetrzna>" ; L
      If S3 = 0 Then Gosub Czujnik
    Case 5
      Lcd "Wyjscie/zapamietaj  "
      Lowerline
      Lcd "                    "
      Thirdline
      Lcd "                    "
      Fourthline
      Lcd "                    "
      If S3 = 0 Then
      Cls
      Return
      End If
    Case Is > 5 : Wybor = 1
  End Select


Loop
Return

'----------wybór + ----------
Zw_wybor:
Incr Wybor
Return

'---------wybór - -----------
Zm_wybor:
Decr Wybor
Return
'>>>>>>>>>>>>>>>>>>>>>>Wybor_czujnikow_temperatury<<<<<<<<<<<<<<<<<<<<<<<<<<<<<



'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CZUJNIK<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Cls
Czujnik:
Dsa = 1
Readeeprom Q , 13
Do
Readeeprom Q , 13
Home

  Debounce S1 , 0 , Zw_dsa , Sub                            ' incr licz
  Debounce S2 , 0 , Zm_dsa , Sub                            ' decr licz

  Select Case Dsa
    Case Is < 1 : Dsa = 5
    Case 1
      Lcd "DS1 <         " ; I1s ; Chr(0)
      Lowerline
      Lcd "DS2           " ; I2s ; Chr(0)
      Thirdline
      Lcd "DS3           " ; I3s ; Chr(0)
      Fourthline
      Lcd "DS4           " ; I4s ; Chr(0)
      If S3 = 0 Then
      Q = I1s
      Writeeeprom Q , 13
      Return
      End If

    Case 2
      Lcd "DS1           " ; I1s ; Chr(0)
      Lowerline
      Lcd "DS2 <         " ; I2s ; Chr(0)
      Thirdline
      Lcd "DS3           " ; I3s ; Chr(0)
      Fourthline
      Lcd "DS4           " ; I4s ; Chr(0)
      If S3 = 0 Then
      Q = I2s
      Writeeeprom Q , 13
      Return
      End If
    Case 3
      Lcd "DS1           " ; I1s ; Chr(0)
      Lowerline
      Lcd "DS2           " ; I2s ; Chr(0)
      Thirdline
      Lcd "DS3 <         " ; I3s ; Chr(0)
      Fourthline
      Lcd "DS4           " ; I4s ; Chr(0)
      If S3 = 0 Then
      Q = I3s
      Writeeeprom Q , 13
      Return
      End If
    Case 4
      Lcd "DS1           " ; I1s ; Chr(0)
      Lowerline
      Lcd "DS2           " ; I2s ; Chr(0)
      Thirdline
      Lcd "DS3           " ; I3s ; Chr(0)
      Fourthline
      Lcd "DS4 <         " ; I4s ; Chr(0)
      If S3 = 0 Then
      Q = I4s
      Writeeeprom Q , 13
      Return
      End If
    Case 5
      Lcd "Wyjscie/zapamietaj  "
      Lowerline
      Lcd "                    "
      Thirdline
      Lcd "                    "
      Fourthline
      Lcd "                    "
      If S3 = 0 Then
      Cls
      Return
      End If
    Case Is > 5 : Dsa = 1
  End Select


Loop
Return

'----------wybór + ----------
Zw_dsa:
Incr Dsa
Return

'---------wybór - -----------
Zm_dsa:
Decr Dsa
Return

'>>>>>>>>>>>>>>>>>>>>>>> CZUJNIK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
rafal
Site Admin


Dołączył: 08 Lis 2007
Posty: 1180
Skąd: Olkusz

PostWysłany: Pon Lis 26, 2012 8:11 pm    Temat postu: Odpowiedz z cytatem

możesz sobie odczytywać ID czujników po kolei i potem przypisywać do konkretnej zmiennej temperaturowej.

Albo zrobic osobny układ odczytujący samo ID czujnika, które potem będziesz mógł wprowadzić w Twoim programie- albo na stałe, albo za pomoca osobnego menu- co napewno sporo roooooozbuduje program.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora
endurasek
Lekko zaangażowany


Dołączył: 14 Lis 2007
Posty: 69

PostWysłany: Czw Lis 29, 2012 7:20 am    Temat postu: Odpowiedz z cytatem

może się komuś przyda

http://www.elektroda.pl/rtvforum/viewtopic.php?p=11508706#11508706

teraz walcze wlasnie z menu w ktorym bede przypisywac id ukladu
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Powered by phpBB © 2001, 2005 phpBB Group