FAQ | Points | Add... | Recent posts | Search | Register | Log in


4x DS18b20 +LCD = Termometr


Post new topic  Reply to topic      Main Page -> Forum Index -> DIY Structures -> 4x DS18b20 +LCD = Termometr
Author
Message
Marek_RADOM
Poziom 17
Poziom 17


Joined: 06 Jul 2004
Posts: 387
Location: Radom

Post#121 23 Mar 2008 12:10   

Re: 4x DS18b20 +LCD = Termometr


peleton123 wrote:
Zmontowałem układ by duch wg schematu. tylko na LCD 4x16. Niestety wyświetla mi tylko prostokąty w 1 i 3 linijce. Pewnie trzeba zmienić w programie config lcdpin ale ja nie mam pojęcia jak. Ma ktoś ten układ na takim wyświetlaczy 4x16??

Mój wyświetlacz to http://www.artronic.pl/o_produkcie.php?id=629?

Proszę o pomoc


Witam Przerobiłem kod dla wyświetlacza 4x16 w symulacji wszystko wygląda OK. Co do wyświetlanych samych kwadratów to wydaje mi się że gdzieś ktoś w tym temacie pisał, że przy 4 liniowych dodatkowo trzeba któryś pin podłączyć i w programie to dodać, ale nie jestem pewien, bo nigdy nie używałem wyświetlacza 4 liniowego.

Code:

'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
'Kontakt duszkowski(malpa)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 = 16 * 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 = 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
Lcd "   Termometr    " ;                                    'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Thirdline
Lcd "  by Duch 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
Lowerline
Lcd W
Wait 3
                                                            '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 3 , 1
 Lcd "Czujnik 1 ID OK"
 Wait 1
 Locate 3 , 1
 For B = 1 To 8
 Lcd Hex(dsid1(b))
 Next
End If
Wait 2

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

Cls
Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd W

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

If Dsid4(8) = Crc8(dsid4(1) , 7) Then
 Locate 4 , 1
 Lcd "Czujnik 4 ID OK"
 Wait 1
 Locate 4 , 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 "Czujnik 1" ; 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 "Czujnik 2" ; Ss ; Chr(0) ;

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

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

Loop

'Koniec programu
'Pozdrawiam Duch

Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#122 24 Mar 2008 14:52   

Re: 4x DS18b20 +LCD = Termometr


Mam swój program bardzo podobny i też właśnie na symulatorze dobrze pokazuje.

A mógłby ktoś powiedzieć jaki dodatkowy pin trzeba podłączyć??

.:EDIT:.

Już wszystko ładnie działa. Pokazuje wszystkie 4 linie

Zmodyfikowałem program DUCHa. Został on przerobiony do LCD 4 liniowego oraz dodana obsługa temp. ujemnych

4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr
4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr


Jak widac poniżej również z temp. ujemnymi dobrze sobie radzi.
4x DS18b20 +LCD = Termometr4x DS18b20 +LCD = Termometr

W załączniku plik z programem napisany pod BASCOMa pasuje do wyświetlaczy 4x16 i 4x20 oraz schemat ideowo montażowy.




termometr.rar
 Description:
 n/a

Download
 Filename:  termometr.rar
 Contents:  schemat.JPG , 4x DS18b20, LCD.bas
See all...
 Filesize:  29.05 KB
 Punkty:  1 = 0.00 for transfer + 1 for the user (set manually)

Back to top
   
zgf1
Poziom 17
Poziom 17


Joined: 09 Nov 2004
Posts: 417
Location: Zywiec

Post#123 26 Mar 2008 11:34   

Re: 4x DS18b20 +LCD = Termometr


hmm a jak zrobic to programowo aby kazdy DS byl podpiety do innego portu?

Tu wszystkie sa podpiete pod jedno wejscie, co nie jest idealne, przy awarii kabla bacz czujnika wskazania temp sa dublowane. Przyklad podlacz tylko jeden czujnik i uzyskasz temp 4x ta sama...
Back to top
   
grzegorz.d3
Poziom 11
Poziom 11


Joined: 05 Jan 2007
Posts: 71

Post#124 26 Mar 2008 20:05   

Re: 4x DS18b20 +LCD = Termometr


Witam a moze ktoś by dołożył do tego termometra woltomierz w zakresie od5-15.
I udostępnił wsad i schemat.
Pozdrawiam.
:D
Back to top
   
zgf1
Poziom 17
Poziom 17


Joined: 09 Nov 2004
Posts: 417
Location: Zywiec

Post#125 26 Mar 2008 23:26   

Re: 4x DS18b20 +LCD = Termometr


Mam taki uklad zrobiony, w sumie kod moge przerobic... jakiej dokladnosci w pelnym zakresie oczekujesz?
Nie licz, ze to bedzie tak dokladne jak miernik...
Back to top
   
grzegorz.d3
Poziom 11
Poziom 11


Joined: 05 Jan 2007
Posts: 71

Post#126 26 Mar 2008 23:40   

Re: 4x DS18b20 +LCD = Termometr


No nie wiem jak najlepszej , w granicach od 5-15V
Back to top
   
zgf1
Poziom 17
Poziom 17


Joined: 09 Nov 2004
Posts: 417
Location: Zywiec

Post#127 26 Mar 2008 23:50   

Re: 4x DS18b20 +LCD = Termometr


problem w tym, ze jak wyskaluje sie przy +5V, ze wskazuje niemal jak miernik, to przy +12 moze roznic sie o okolo 0.1V ;)
Back to top
   
Google

Google Adsense


Post# 26 Mar 2008 23:50   





Back to top
   
grzegorz.d3
Poziom 11
Poziom 11


Joined: 05 Jan 2007
Posts: 71

Post#128 26 Mar 2008 23:59   

Re: 4x DS18b20 +LCD = Termometr


Ok
Podasz schemat i wsad do procka.
Back to top
   
gregbo
Poziom 6
Poziom 6


Joined: 23 Apr 2006
Posts: 16

Post#129 27 Mar 2008 15:04   

Re: 4x DS18b20 +LCD = Termometr


AccessDenied wrote:
Witam, to i ja dodam sowje trzy grosze odnośnie formatowania wyświetlania temperatury ujemnej. Metoda sprawdzona w zakresie -40 do +99, brak przesunięć cyferek, wersja dla wyświetlacza 2x16 i 4 ds18b20 (2 wewnętrzne i 2 zewnętrzne)
[


a ja mam do Ciebie Robercie pytanie jak ustawiłeś u siebie fuse bity?? bo dla mnie to czarna magia i żadna książka nie pomaga... schemat mam dokładnie taki jak na pierwszej stronie. programuje w avrdude.
Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#130 27 Mar 2008 18:54   

Re: 4x DS18b20 +LCD = Termometr


Zacytuje uzytkownika tego forum z innego tematu.
ariel440 wrote:
Witam.
Dla wszystkich którzy być może kiedyś będą mieli podobne zmagania z avrdude napiszę jak powinno to wyglądać :

dla ustawienia atmega8 do pracy na wewn. 1MHz :
avrdude -p m8 -c usbasp -U flash:w:PROGRAM.HEX:i -U hfuse:w:0xD9:m -U lfuse:w:0xe1:m

dla ustawienia atmega8 do pracy na wewn. 2MHz :
avrdude -p m8 -c usbasp -U flash:w:PROGRAM.HEX:i -U hfuse:w:0xD9:m -U lfuse:w:0xe2:m

dla ustawienia atmega8 do pracy na wewn. 4MHz :
avrdude -p m8 -c usbasp -U flash:w:PROGRAM.HEX:i -U hfuse:w:0xD9:m -U lfuse:w:0xe3:m

dla ustawienia atmega8 do pracy na wewn. 8MHz :
avrdude -p m8 -c usbasp -U flash:w:PROGRAM.HEX:i -U hfuse:w:0xD9:m -U lfuse:w:0xe4:m

dla ustawienia atmega8 do pracy na zewn. 8MHz :
avrdude -p m8 -c usbasp -U flash:w:PROGRAM.HEX:i -U hfuse:w:0xD9:m -U lfuse:w:0xee:m

Pozdrawiam.


Także dla tego układu by DUCH jest to wew 1MHz.
Ja się tym posłużyłem hfuse 0xD9 lfuse 0xe1 i mi działa
Back to top
   
gregbo
Poziom 6
Poziom 6


Joined: 23 Apr 2006
Posts: 16

Post#131 27 Mar 2008 23:55   

Re: 4x DS18b20 +LCD = Termometr


dziękuję Ci bardzo!!!! jutro ustawię wszystkie bity i napiszę czy działa.
Back to top
   
gregbo
Poziom 6
Poziom 6


Joined: 23 Apr 2006
Posts: 16

Post#132 28 Mar 2008 10:15   

Re: 4x DS18b20 +LCD = Termometr


wszystko działa idealnie dzięki wielkie!!!! a jak ustawi fuse bity na zegar zewnętrzny 12mhz tak jak do programatora usbasp??
Back to top
   
jacekhe
Poziom 16
Poziom 16


Joined: 06 May 2007
Posts: 334
Location: Janów Lubelski / Rzeszów

Post#133 28 Mar 2008 10:25   

Re: 4x DS18b20 +LCD = Termometr


Jak przerobić program Duch__-a żeby mi pokazywał np czy ujemna temp, ze strzałkami czy rośnie czy maleje na wyświetlacz 2*16 znaki?
Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#134 28 Mar 2008 13:05   

Re: 4x DS18b20 +LCD = Termometr


Dajesz dodatkowe zmienne typu integer np I11. I dajesz sprawdzenie przez if czy jest większa a po sprawdzeniu przepisujesz z I1 wartość do I11. i w IF powinieneś wypisywać temp z jakimś tam znakiem Deflcdchar(strzałki narysowanej)
Back to top
   
jacekhe
Poziom 16
Poziom 16


Joined: 06 May 2007
Posts: 334
Location: Janów Lubelski / Rzeszów

Post#135 28 Mar 2008 14:25   

Re: 4x DS18b20 +LCD = Termometr


Acha, nie bardzo rozumiem o co chodzi :cry: jak mam kod tak zrobiony

Code:
'Termometr 4 punktowy DS18b20

$regfile = "m8def.DAT"                                     
$crystal = 1000000                                         
'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 = 16 * 2                                       

'*************************************WAŻNE**********************************************

Config 1wire = Portd.5                                     

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                                             
Dim W As Byte                                               

Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             

Cursor Off                                                 
Cls                                                         
Lcd "Lada Samara 1.3s" ;                               
Lowerline
Lcd "        2008        "
Wait 5
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:"                                     
Waitms 500
Lcd W
Wait 3
Cls                                                       
Dsid1(1) = 1wsearchfirst()                                 
Dsid2(1) = 1wsearchnext()                                   
Dsid3(1) = 1wsearchnext()                                   
Dsid4(1) = 1wsearchnext()

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

If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       
 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)                                       
   1wwrite &HBE
   I1 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid2(1)                                       
   1wwrite &HBE
   I2 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid3(1)                                       
   1wwrite &HBE
   I3 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid4(1)                                       
   1wwrite &HBE
   I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
   1wreset
   1wwrite &HCC
   1wwrite &H44
Wait 1



   I1 = I1 * 10
   I1 = I1 / 16
   'If I1 > 0 Then Cls                                       
   Ss = Str(i1)
   Ss = Format(ss , " 0.0")
   Locate 1 , 1                                             
   Lcd "Wew" ; 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 "Zew" ; 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 "Chlo" ; 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 "Gaz" ; Ss ; Chr(0) ;

Loop


Jak możesz, bardzo bym był wdzięczny za poprawianie mojego kodu. Bardzo proszę. Dziękuję.
Back to top
   
Google

Google Adsense


Post# 28 Mar 2008 14:25   





Back to top
   
Marek_RADOM
Poziom 17
Poziom 17


Joined: 06 Jul 2004
Posts: 387
Location: Radom

Post#136 28 Mar 2008 16:58   

Re: 4x DS18b20 +LCD = Termometr


Witam ponownie, jakiś czas temu przerobiłem sobie ten projekt i zrobiłem Zegar z budzikiem z termometrem 2xDS18b20 i dziś dopiero przetestowałem na długim kablu i zaczęły się problemy.

Podłączyłem jeden czujnik pod kabel puszczony pod ziemią, który ma być do domofonu w przyszłości. Ten kabel jest miedziany jak skrętka, ale przewody chyba nie są skręcone. Długość to ok. 30 metrów. Wyświetla mi cały czas 85°C, dodam że ID odczytuje poprawnie. Jak temu zaradzić ?

Aha czujnik podłączony 2 przewodami tak jak jest w projekcie i podciągnięte do + przez 4,7kΩ.
Back to top
   
asembler
Poziom 22
Poziom 22


Joined: 16 Sep 2007
Posts: 2131

Post#137 29 Mar 2008 15:14   

Re: 4x DS18b20 +LCD = Termometr


Daj szeregowo opornik około 47 Ohm na kazdy czujnik osobno
Back to top
   
Marek_RADOM
Poziom 17
Poziom 17


Joined: 06 Jul 2004
Posts: 387
Location: Radom

Post#138 29 Mar 2008 15:44   

Re: 4x DS18b20 +LCD = Termometr


Kurde właśnie odkopałem kabel i odłączyłem czujnik. Podłączyłem go jednak skrętką sieciową w domu na poddaszu wyjąłem na zewnątrz, w tym momencie nie korzystam z sieci ale nawet jak będę korzystał to w niczym nie będzie przeszkadzać to, że 1Wire leci jedną parą przewodów. Wszystko działa ok na długości ok 20 metrów. w przyszłości wypróbuje ten pomysł z opornikiem 47Ω.
Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#139 30 Mar 2008 17:29   

Re: 4x DS18b20 +LCD = Termometr


jacekhe wrote:
Acha, nie bardzo rozumiem o co chodzi :cry: jak mam kod tak zrobiony
Jak możesz, bardzo bym był wdzięczny za poprawianie mojego kodu. Bardzo proszę. Dziękuję.


Znalazłem chwile czasu i przerobiłem kod, ale zmieniłem na wyświetlacz 2x20znaków bo 16 znaków to za mało by móc wyświetlać minus(temp. ujemna) i jeszcze strzałki.
Jeszcze musiałem wyrzucić kod początkowy, pokazywanie ekranu startowego czyli powitanie oraz liczbę i adresy czujników, ponieważ wersja demo BASCOMa ma max 4kb kodu wyjściowego. Bo zapewne masz wersje DEMO, ale w załączniku dałem skompilowany kod wraz z ekranem powitalnym, sprawdzaniem czujników, itp. bo ja mam pełnego bascoma.

Kod kompiluje sie i działa 100% sprawdzałem na swoim układzie. Poniżej kod skrócony do 4kB
Code:
'Termometr 4 punktowy DS18b20
$regfile = "m8def.DAT"
$crystal = 1000000
'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

'*************************************WAŻNE**********************************************
Config 1wire = Portd.5

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
Dim W As Byte

Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             ' znak stopni
Deflcdchar 1 , 4 , 14 , 21 , 4 , 4 , 4 , 4 , 32             ' strzałka góra
Deflcdchar 2 , 32 , 4 , 4 , 4 , 4 , 21 , 14 , 4             ' strzałka dół

Cursor Off
I11 = 0
I22 = 0
I33 = 0
I44 = 0

Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Dsid3(1) = 1wsearchnext()
Dsid4(1) = 1wsearchnext()



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

Do
   1wreset
   1wwrite &H55
   1wverify Dsid1(1)
   1wwrite &HBE
   I1 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid2(1)
   1wwrite &HBE
   I2 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid3(1)
   1wwrite &HBE
   I3 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid4(1)
   1wwrite &HBE
   I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
   1wreset
   1wwrite &HCC
   1wwrite &H44
Waitms 500


   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 "Wew" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i1)
   Ss = Format(ss , "0.0")
   Locate 1 , 1
   Lcd "Wew" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   End If
   Else
   I11 = I1
   If I1 > 0 Then
   Ss = Str(i1)
   Ss = Format(ss , " 0.0")
   Locate 1 , 1
   Lcd "Wew" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i1)
   Ss = Format(ss , "0.0")
   Locate 1 , 1
   Lcd "Wew" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   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 "Zew" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i2)
   Ss = Format(ss , "0.0")
   Locate 2 , 1
   Lcd "Zew" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   End If
   Else
   I22 = I2
   If I1 > 0 Then
   Ss = Str(i2)
   Ss = Format(ss , " 0.0")
   Locate 2 , 1
   Lcd "Zew" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i2)
   Ss = Format(ss , "0.0")
   Locate 2 , 1
   Lcd "Zew" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   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 "Chl" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i3)
   Ss = Format(ss , "0.0")
   Locate 1 , 11
   Lcd "Chl" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   End If
   Else
   I33 = I3
   If I1 > 0 Then
   Ss = Str(i3)
   Ss = Format(ss , " 0.0")
   Locate 1 , 11
   Lcd "Chl" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i3)
   Ss = Format(ss , "0.0")
   Locate 1 , 11
   Lcd "Chl" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   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 "Gaz" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i4)
   Ss = Format(ss , "0.0")
   Locate 2 , 11
   Lcd "Gaz" ; Chr(1) ; " " ; Ss ; Chr(0) ;
   End If
   Else
   I44 = I4
   If I4 > 0 Then
   Ss = Str(i4)
   Ss = Format(ss , " 0.0")
   Locate 2 , 11
   Lcd "Gaz" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   Else
   Ss = Str(i4)
   Ss = Format(ss , "0.0")
   Locate 2 , 11
   Lcd "Gaz" ; Chr(2) ; " " ; Ss ; Chr(0) ;
   End If
   End If

Loop


Mam nadzieje że pomogłem i przyda się ten kod



strzalki.rar
 Description:
 n/a

Download
 Filename:  strzalki.rar
 Contents:  11.bas , 11.BM , 11.BIN , 11.DBG , 11.HEX , 11.OBJ , 11.RPT
See all...
 Filesize:  19.65 KB
 Punkty:  1 = 0.00 for transfer + 1 for the user (set manually)

Back to top
   
jacekhe
Poziom 16
Poziom 16


Joined: 06 May 2007
Posts: 334
Location: Janów Lubelski / Rzeszów

Post#140 31 Mar 2008 11:06   

Re: 4x DS18b20 +LCD = Termometr


O wielkie dzięki za pomoc, dziękuję.
Back to top
   
comer3
Poziom 19
Poziom 19


Joined: 06 Aug 2006
Posts: 721
Location: Szalowa

Post#141 13 Apr 2008 08:30   

Re: 4x DS18b20 +LCD = Termometr


Zgodnie z Helpem Bascoma W powinno być zadeklarowane jako Word lub Integer, a w każdym powyższym kodzie widzę że jest jako Byte...
Przy deklaracji jako Byte ten kawałek kodu:
Code:

(...)
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:"                                     
Waitms 500
Lcd W
Wait 2
Cls       
(...)


nie ma sensu, gdyż na wyświetlaczu nie pokazuje się ilość podpiętych czujników...
Przy deklaracjach zmiennych wystarczy zmienić na:

Code:
Dim W As Word


i wszytko jest OK.. ;)
Back to top
   
Google

Google Adsense


Post# 13 Apr 2008 08:30   





Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#142 13 Apr 2008 08:53   

Re: 4x DS18b20 +LCD = Termometr


comer3 wrote:
Przy deklaracji jako Byte nie ma sensu, gdyż na wyświetlaczu nie pokazuje się ilość podpiętych czujników...

Nie rozumiem sugestii przecież nawet przy Byte, mikrokontroler dobrze rozpoznaje liczbę czujników, ja mam z Byte i ładnie odczytuje po starcie
Back to top
   
comer3
Poziom 19
Poziom 19


Joined: 06 Aug 2006
Posts: 721
Location: Szalowa

Post#143 13 Apr 2008 09:04   

Re: 4x DS18b20 +LCD = Termometr


Tak - ale nie wiem czy zauważyłeś, że na wyświetlaczu nie jest wyświetlana liczba czujników.. A przy napisaniu:

Code:

Lcd "Ilosc czujnikow:"                                     
Waitms 500
Lcd W


chyba chodzi właśnie o to, aby wyświetlić liczbę dostępnych czujników.... ;)
Przy deklaracji Byte na wyświetlaczu pokaże się:
Code:

Ilosc czujnikow:


Program odczeka 0,5 sek i wyświetli ID poszczególnych czujników..

Przy deklaracji W jako Word na wyświetlaczu otrzymamy:
Code:

Ilosc czujnikow:
4


I program siebie dalej już normalnie leci... :)

Może to i drobny szczegół, ale skoro go już zauważyłem to piszę.. ;)
Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#144 13 Apr 2008 09:34   

Re: 4x DS18b20 +LCD = Termometr


Ale u mnie przy Byte wyświetla
Ilość czujników:
4 czy 2 zależnie ile mam podpięte a dopiero potem ich adresy. Wiec dziwne że u Ciebie nie wyświetla liczby czujników:/

EDIT
Może najpierw sprawdź w praktyce że przy Byte również działa, a nie opierasz sie tylko na teorii HELPa
Back to top
   
comer3
Poziom 19
Poziom 19


Joined: 06 Aug 2006
Posts: 721
Location: Szalowa

Post#145 13 Apr 2008 09:55   

Re: 4x DS18b20 +LCD = Termometr


Sprawdziłem... i przy Byte mi nie działa... Gdyby działało to bym nie pisał ..:)

P.S. Ja mam podłączone DS'y na 3 przewodach.. Może dlatego mi z Byte nie działa ... ;)
Back to top
   
jacekhe
Poziom 16
Poziom 16


Joined: 06 May 2007
Posts: 334
Location: Janów Lubelski / Rzeszów

Post#146 21 Apr 2008 18:02   

Re: 4x DS18b20 +LCD = Termometr


A ja ma pytanko jak do tego termometru, dorobić taki bajer aby przypominał o włączeniu świateł. Wiecie o co chodzi??, jak wyłączę światła to pokazuje ze ma wyłączone, jak mam włączone to pokazuje normalnie temperaturkę. Wie ktoś jak to wykonać??
Back to top
   
Duch__
Poziom 22
Poziom 22


Joined: 12 Dec 2004
Posts: 1911
Location: Opole

Post#147 Post from the author of the topic 24 Apr 2008 08:43   

Re: 4x DS18b20 +LCD = Termometr


peleton123 wrote:

Znalazłem chwile czasu i przerobiłem kod...


Wykorzystałem twój kod do aktualizacji mojego termometru :D
Poprzestawiałem tylko miejsca wyświetlania strzałek względem temperatury.

PS. Warto by pomyśleć o sposobie wyświetlania strzałek jeśli temperatura się utrzymuje niezmiennie przez dłuższą chwilę.

4x DS18b20 +LCD = Termometr


Code:

'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
'Kontakt duszkowski(malpa)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




Ciesze się temat jest nadal "na topie" i się powoli, ale stopniowo rozwija.

Pozdrawiam Duch.
Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#148 24 Apr 2008 19:51   

Re: 4x DS18b20 +LCD = Termometr


Duch__ wrote:

PS. Warto by pomyśleć o sposobie wyświetlania strzałek jeśli temperatura się utrzymuje niezmiennie przez dłuższą chwilę.


Żaden problem dodać tylko dodatkowy elseif

Code:
   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
   Elseif 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(2) ;
   Else
   Ss = Str(i1)
   Ss = Format(ss , "0.0")
   Locate 1 , 1
   Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
   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(3) ;
   Else
   Ss = Str(i1)
   Ss = Format(ss , "0.0")
   Locate 1 , 1
   Lcd "Zew" ; Ss ; Chr(0) ; Chr(3) ;
   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
   Elseif I2 < I22 Then
   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
   Else
   I22 = I2
   If I1 > 0 Then
   Ss = Str(i2)
   Ss = Format(ss , " 0.0")
   Locate 2 , 1
   Lcd "Lod" ; Ss ; Chr(0) ; Chr(3) ;
   Else
   Ss = Str(i2)
   Ss = Format(ss , "0.0")
   Locate 2 , 1
   Lcd "Lod" ; Ss ; Chr(0) ; Chr(3) ;
   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
   Elseif I3 < I33 Then
   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
   Else
   I33 = I3
   If I1 > 0 Then
   Ss = Str(i3)
   Ss = Format(ss , " 0.0")
   Locate 1 , 11
   Lcd "Wew" ; Ss ; Chr(0) ; Chr(3) ;
   Else
   Ss = Str(i3)
   Ss = Format(ss , "0.0")
   Locate 1 , 11
   Lcd "Wew" ; Ss ; Chr(0) ; Chr(3) ;
   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
   Elseif I4 < I44 Then
   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
   Else
   I44 = I4
   If I4 > 0 Then
   Ss = Str(i4)
   Ss = Format(ss , " 0.0")
   Locate 2 , 11
   Lcd "Pie" ; Ss ; Chr(0) ; Chr(3) ;
   Else
   Ss = Str(i4)
   Ss = Format(ss , "0.0")
   Locate 2 , 11
   Lcd "Pie" ; Ss ; Chr(0) ; Chr(3) ;
   End If
   End If

Back to top
   
Duch__
Poziom 22
Poziom 22


Joined: 12 Dec 2004
Posts: 1911
Location: Opole

Post#149 Post from the author of the topic 24 Apr 2008 20:59   

Re: 4x DS18b20 +LCD = Termometr


Wykorzystałem znów twoją podpowiedź co do rozwiązania. Jako znak niezmienności temperatury od ostatniego pomiaru dałem
Code:
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32
puste pole.

Teraz przyszedł kolejny problem.

Zmiana temperatury czy to w dół czy w górę czy stała wyświetla się prawidłowo, ale przydało by się to uśrednić by nie reagował tak gwałtownie.

Narazie zmniejszyłem częstotliwość pomiaru do 1 co 15 sekund, ale nie sądze żeby to było dobre rozwiązanie.

Code:
--------konwersja temp dla wszystkich dsow
   1wreset
   1wwrite &HCC
   1wwrite &H44
Wait 15

Back to top
   
peleton123
Poziom 10
Poziom 10


Joined: 22 Mar 2008
Posts: 49
Location: Mińsk Maz.

Post#150 25 Apr 2008 09:02   

Re: 4x DS18b20 +LCD = Termometr


Z tymi 15sek to trochę lipnie, bo zbyt rzadko będzie się odświeżać.

Można byłoby dać jeszcze ze 2 zmienne które zapamiętywałyby do 3 ostatnich temperatur. I dać inaczej instrukcje IF. Pierwszy by sprawdzał czy 3 ostatnie są równe jeśli tak to nic nie wypisuj jeśli nie to sprawdź czy obecna i ostatnia jest mniejsza jeśli tak to strzałka w dól jeśli nie to w gorę.

IF T1=T2=T3=T4 THEN
wpisz temp. bez strzałek
ELSE
IF T1<T2 THEN
wypisz temp ze strzałką w dół
ELSE
wypisz ze strzałką w górę
ENDIF
ENDIF

Co o tym myślicie??
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> DIY Structures -> 4x DS18b20 +LCD = Termometr
Statement for Wykop Statement for Facebook Statement for Delicious Statement for Digg Statement for Google Statement for Twitter Statement for Blip
Page 5 of 14 Go to page Previous  1, 2, 3, 4, 5, 6 ... 12, 13, 14  Next
Jump to page:
Similar topics
Termometr na 89C2051 + DS18B20 by Miguel573 (34)
Termometr na DS18B20 + SHT11 + GSM (19)
Termometr na: DS18B20. Propozycje i schematy. (1)
Termometr Pokojowy 0-99,9 C deg. na DS18B20 (17)
NE044 TERMOMETR DWUPUNKTOWY DS18B20 (5)
Termometr na ATmega32 2x DS18B20 (33)
Jednopunktowy termometr na DS18B20 (45)
Zegar DCF 77,5kHz na LCD 128*64 znaków z termometr DS18B20 (8)
4x DS18b20 +LCD = Termometr (1)
Termometr 4 punktowy na LPC1343 + 4x ds18b20 + src (28)

Page generation time: 0.204 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed