| Autor |
Wiadomość |
Marek_RADOM Poziom 17

Dołączył: 07 Lip 2004 Posty: 380 Miasto: Radom
|
23 Mar 2008 13:10 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| peleton123 napisał: |
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.
| Kod: |
'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
'Kontakt duszkowski(małpa)o2.pl
$regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 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 |
|
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
|
| Powrót do góry |
|
 |
zgf1 Poziom 15

Dołączył: 09 Lis 2004 Posty: 205 Miasto: Zywiec
|
26 Mar 2008 12: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... |
|
| Powrót do góry |
|
 |
Google AdSense

|
26 Mar 2008 12:34 |
|
|
|
|
|
| Powrót do góry |
|
 |
grzegorz.d3 Poziom 9

Dołączył: 05 Sty 2007 Posty: 36
|
26 Mar 2008 21: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 |
|
| Powrót do góry |
|
 |
zgf1 Poziom 15

Dołączył: 09 Lis 2004 Posty: 205 Miasto: Zywiec
|
27 Mar 2008 00: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... |
|
| Powrót do góry |
|
 |
grzegorz.d3 Poziom 9

Dołączył: 05 Sty 2007 Posty: 36
|
27 Mar 2008 00:40 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
No nie wiem jak najlepszej , w granicach od 5-15V |
|
| Powrót do góry |
|
 |
zgf1 Poziom 15

Dołączył: 09 Lis 2004 Posty: 205 Miasto: Zywiec
|
27 Mar 2008 00: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 ;) |
|
| Powrót do góry |
|
 |
grzegorz.d3 Poziom 9

Dołączył: 05 Sty 2007 Posty: 36
|
27 Mar 2008 00:59 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Ok
Podasz schemat i wsad do procka. |
|
| Powrót do góry |
|
 |
Google AdSense

|
27 Mar 2008 00:59 |
|
|
|
|
|
| Powrót do góry |
|
 |
gregbo Poziom 6

Dołączył: 23 Kwi 2006 Posty: 16
|
27 Mar 2008 16:04 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| AccessDenied napisał: |
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. |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
27 Mar 2008 19:54 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Zacytuje uzytkownika tego forum z innego tematu.
| ariel440 napisał: |
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 |
|
| Powrót do góry |
|
 |
gregbo Poziom 6

Dołączył: 23 Kwi 2006 Posty: 16
|
28 Mar 2008 00:55 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
dziękuję Ci bardzo!!!! jutro ustawię wszystkie bity i napiszę czy działa. |
|
| Powrót do góry |
|
 |
gregbo Poziom 6

Dołączył: 23 Kwi 2006 Posty: 16
|
28 Mar 2008 11: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?? |
|
| Powrót do góry |
|
 |
jacekhe Poziom 15

Dołączył: 06 Maj 2007 Posty: 240 Miasto: Janów Lubelski
|
28 Mar 2008 11: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? |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
28 Mar 2008 14: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) |
|
| Powrót do góry |
|
 |
jacekhe Poziom 15

Dołączył: 06 Maj 2007 Posty: 240 Miasto: Janów Lubelski
|
28 Mar 2008 15:25 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Acha, nie bardzo rozumiem o co chodzi :cry: jak mam kod tak zrobiony
| Kod: |
'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ę. |
|
| Powrót do góry |
|
 |
Marek_RADOM Poziom 17

Dołączył: 07 Lip 2004 Posty: 380 Miasto: Radom
|
28 Mar 2008 17: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Ω. |
|
| Powrót do góry |
|
 |
asembler Poziom 21

Dołączył: 16 Wrz 2007 Posty: 1140
|
29 Mar 2008 16:14 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
Daj szeregowo opornik około 47 Ohm na kazdy czujnik osobno |
|
| Powrót do góry |
|
 |
Marek_RADOM Poziom 17

Dołączył: 07 Lip 2004 Posty: 380 Miasto: Radom
|
29 Mar 2008 16: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Ω. |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
30 Mar 2008 18:29 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| jacekhe napisał: |
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
| Kod: |
'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
| Opis: |
|
 Download |
| : |
strzalki.rar |
| Zawartość: |
11.bas
, 11.BM
, 11.BIN
, 11.DBG
, 11.HEX
, 11.OBJ
, 11.RPT
Zobacz całość... |
| Rozmiar: |
19.65 KB |
| Punkty: |
1 = 0.00 za transfer + 1 dla użytkownika (ustawiono ręcznie) |
|
|
| Powrót do góry |
|
 |
jacekhe Poziom 15

Dołączył: 06 Maj 2007 Posty: 240 Miasto: Janów Lubelski
|
31 Mar 2008 12:06 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
O wielkie dzięki za pomoc, dziękuję. |
|
| Powrót do góry |
|
 |
comer3 Poziom 19

Dołączył: 06 Sie 2006 Posty: 645 Miasto: Rzeszów/Szalowa
|
13 Kwi 2008 09: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:
| Kod: |
(...)
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.. ;) |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
13 Kwi 2008 09:53 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| comer3 napisał: |
| 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 |
|
| Powrót do góry |
|
 |
comer3 Poziom 19

Dołączył: 06 Sie 2006 Posty: 645 Miasto: Rzeszów/Szalowa
|
13 Kwi 2008 10: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:
| Kod: |
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ę.. ;) |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
13 Kwi 2008 10: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 |
|
| Powrót do góry |
|
 |
comer3 Poziom 19

Dołączył: 06 Sie 2006 Posty: 645 Miasto: Rzeszów/Szalowa
|
13 Kwi 2008 10: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 ... ;) |
|
| Powrót do góry |
|
 |
jacekhe Poziom 15

Dołączył: 06 Maj 2007 Posty: 240 Miasto: Janów Lubelski
|
21 Kwi 2008 19: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ć?? |
|
| Powrót do góry |
|
 |
Duch__ Poziom 22

Dołączył: 12 Gru 2004 Posty: 1614 Miasto: Opole
|
24 Kwi 2008 09:43 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| peleton123 napisał: |
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ę.
| Kod: |
'Termometr 4 punktowy DS18b20 by Duch na podstawie materiałów znalezionych w sieci
'Kontakt duszkowski(małpa)o2.pl
$regfile = "m8def.DAT" 'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000 'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 20 * 2 'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Config 1wire = Portd.5 'deklaracja portu na którym będą podpięte DS18b20
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer
Dim I11 As Integer ' przechowuje poprzednią wartoś temp
Dim I22 As Integer ' przechowuje poprzednią wartoś temp
Dim I33 As Integer ' przechowuje poprzednią wartoś temp
Dim I44 As Integer ' przechowuje poprzednią wartoś temp
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim W As Byte 'deklaracja zmiennej do odczytu ilośc czujników
Deflcdchar 0 , 8 , 20 , 8 , 32 , 32 , 32 , 32 , 32 'znak stopnia Celsjusza
Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32 ' strzałka góra
Deflcdchar 2 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32 ' strzałka dół
Cursor Off 'Wyłącza kursor
Cls 'Funkcja CLS czyści ekran
Lcd " Termometr " ; 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd " by Duch 9.09.2007 "
Wait 5
Cls
Lcd " Upgrade 24.04.08 " ;
Wait 3 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:" 'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
Waitms 500
Lcd W
Wait 3
Cls 'Znajdź pierwszy czujnik podpięty do portu
Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid4(1) = 1wsearchnext()
'*******************Odczyt numerów ID czujników temperatury*********************
If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
Locate 1 , 1
Lcd "CRC OK Czujnik 1 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 2
If Dsid2(8) = Crc8(dsid2(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 2 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid2(b))
Next
End If
Wait 2
If Dsid3(8) = Crc8(dsid3(1) , 7) Then
Locate 1 , 1
Lcd "CRC OK Czujnik 3 ID"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid3(b))
Next
End If
Wait 2
If Dsid4(8) = Crc8(dsid4(1) , 7) Then
Locate 2 , 1
Lcd "CRC OK Czujnik 4 ID"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid4(b))
Next
End If
Wait 2
Cls
'*******************koniec odczytu ID czujników temperatury*********************
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid3(1) 'wysylam adres trzeciego czujnika
1wwrite &HBE
I3 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid4(1) 'wysylam adres czwartego czujnika
1wwrite &HBE
I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
'****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********
I1 = I1 * 10
I1 = I1 / 16
If I1 >= I11 Then
I11 = I1
If I1 > 0 Then
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i1)
Ss = Format(ss , "0.0")
Locate 1 , 1
Lcd "Zew" ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I11 = I1
If I1 > 0 Then
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i1)
Ss = Format(ss , "0.0")
Locate 1 , 1
Lcd "Zew" ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
I2 = I2 * 10
I2 = I2 / 16
If I2 >= I22 Then
I22 = I2
If I2 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i2)
Ss = Format(ss , "0.0")
Locate 2 , 1
Lcd "Lod" ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I22 = I2
If I1 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i2)
Ss = Format(ss , "0.0")
Locate 2 , 1
Lcd "Lod" ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
I3 = I3 * 10
I3 = I3 / 16
If I3 >= I33 Then
I33 = I3
If I3 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 1 , 11
Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i3)
Ss = Format(ss , "0.0")
Locate 1 , 11
Lcd "Wew" ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I33 = I3
If I1 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 1 , 11
Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i3)
Ss = Format(ss , "0.0")
Locate 1 , 11
Lcd "Wew" ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
I4 = I4 * 10
I4 = I4 / 16
If I4 >= I44 Then
I44 = I4
If I1 > 0 Then
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 11
Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
Else
Ss = Str(i4)
Ss = Format(ss , "0.0")
Locate 2 , 11
Lcd "Pie" ; Ss ; Chr(0) ; Chr(1) ;
End If
Else
I44 = I4
If I4 > 0 Then
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 11
Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
Else
Ss = Str(i4)
Ss = Format(ss , "0.0")
Locate 2 , 11
Lcd "Pie" ; Ss ; Chr(0) ; Chr(2) ;
End If
End If
Loop
'Koniec programu
'Pozdrawiam Duch |
Ciesze się temat jest nadal "na topie" i się powoli, ale stopniowo rozwija.
Pozdrawiam Duch. |
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
24 Kwi 2008 20:51 Re: 4x DS18b20 +LCD = Termometr |
|
|
|
| Duch__ napisał: |
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
| Kod: |
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 |
|
|
| Powrót do góry |
|
 |
Duch__ Poziom 22

Dołączył: 12 Gru 2004 Posty: 1614 Miasto: Opole
|
24 Kwi 2008 21: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
| Kod: |
| 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.
| Kod: |
--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 15 |
|
|
| Powrót do góry |
|
 |
peleton123 Poziom 10

Dołączył: 22 Mar 2008 Posty: 51 Miasto: Mińsk Maz.
|
25 Kwi 2008 10: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?? |
|
| Powrót do góry |
|
 |