| Author |
Message
|
Marek_RADOM Poziom 17

Joined: 06 Jul 2004 Posts: 387 Location: Radom
|
#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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
|
| Back to top |
|
 |
zgf1 Poziom 17

Joined: 09 Nov 2004 Posts: 417 Location: Zywiec
|
#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

Joined: 05 Jan 2007 Posts: 71
|
#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

Joined: 09 Nov 2004 Posts: 417 Location: Zywiec
|
#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

Joined: 05 Jan 2007 Posts: 71
|
#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

Joined: 09 Nov 2004 Posts: 417 Location: Zywiec
|
#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

|
#
26 Mar 2008 23:50 |
|
|
|
|
|
| Back to top |
|
 |
grzegorz.d3 Poziom 11

Joined: 05 Jan 2007 Posts: 71
|
#128
26 Mar 2008 23:59 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Ok
Podasz schemat i wsad do procka.
|
|
| Back to top |
|
 |
gregbo Poziom 6

Joined: 23 Apr 2006 Posts: 16
|
#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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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

Joined: 23 Apr 2006 Posts: 16
|
#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

Joined: 23 Apr 2006 Posts: 16
|
#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

Joined: 06 May 2007 Posts: 334 Location: Janów Lubelski / Rzeszów
|
#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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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

Joined: 06 May 2007 Posts: 334 Location: Janów Lubelski / Rzeszów
|
#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

|
#
28 Mar 2008 14:25 |
|
|
|
|
|
| Back to top |
|
 |
Marek_RADOM Poziom 17

Joined: 06 Jul 2004 Posts: 387 Location: Radom
|
#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

Joined: 16 Sep 2007 Posts: 2131
|
#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

Joined: 06 Jul 2004 Posts: 387 Location: Radom
|
#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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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
| Description: |
|
 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

Joined: 06 May 2007 Posts: 334 Location: Janów Lubelski / Rzeszów
|
#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

Joined: 06 Aug 2006 Posts: 721 Location: Szalowa
|
#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:
i wszytko jest OK.. ;)
|
|
| Back to top |
|
 |
Google

|
#
13 Apr 2008 08:30 |
|
|
|
|
|
| Back to top |
|
 |
peleton123 Poziom 10

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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

Joined: 06 Aug 2006 Posts: 721 Location: Szalowa
|
#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ę:
Program odczeka 0,5 sek i wyświetli ID poszczególnych czujników..
Przy deklaracji W jako Word na wyświetlaczu otrzymamy:
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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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

Joined: 06 Aug 2006 Posts: 721 Location: Szalowa
|
#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

Joined: 06 May 2007 Posts: 334 Location: Janów Lubelski / Rzeszów
|
#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

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#147
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ę.
| 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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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

Joined: 12 Dec 2004 Posts: 1911 Location: Opole
|
#149
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

Joined: 22 Mar 2008 Posts: 49 Location: Mińsk Maz.
|
#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 |
|
 |