Witam! $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 * 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 Dsid1(8) As Byte Dim Dsid2(8) As Byte Dim Dsid3(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 , 4 , 5 , 7 , 7 , 15 , 25 , 9 , 15 ' Dom lewy Deflcdchar 2 , 32 , 16 , 24 , 28 , 30 , 19 , 18 , 18 ' dom prawy Deflcdchar 3 , 4 , 14 , 27 , 14 , 4 , 1 , 7 , 32 ' Słońce lewe Deflcdchar 4 , 32 , 32 , 32 , 14 , 31 , 30 , 28 , 32 ' Słońce prawe 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 " 2009 " Wait 5 Cls W = 1wirecount() Lcd "Ilosc czuj: " '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 '*******************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 Czuj. 1 " 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 Czuj. 2 " 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 Czuj. 3 " Wait 1 Locate 1 , 1 For B = 1 To 8 Lcd Hex(dsid3(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) '--------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 * 1 'zmiana tego mnożnika oraz 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 , "1") 'tej wartości zmieniamy sposób wyświetlania temperatury (jak jest mnożnik 10 oraz Locate 1 , 1 jest 0.0 Locate 1 , 1 Lcd Chr(1) ' słońce lewe Locate 1 , 2 ' Słońce prawe Lcd Chr(2) ; Lcd " " ; Ss ; Chr(0) ; I2 = I2 * 1 I2 = I2 / 16 'If I2 > 0 Then Cls Ss = Str(i2) Ss = Format(ss , "1") Locate 1 , 9 Lcd "Piec " ; Ss ; Chr(0) ; I3 = I3 * 1 I3 = I3 / 16 'If I3 > 0 Then Cls Ss = Str(i3) Ss = Format(ss , "1") Locate 2 , 1 ' dom lewy Lcd Chr(3) Locate 2 , 2 ' dom prawy Lcd Chr(4) ; Lcd " " ; Ss ; Chr(0) ; Loop 'Koniec programu Proszę o pomoc ps. soft nie jest mojego autorstwa i został znaleziony w sieci.
|
|||
Re: Termostat
Program napisany jest trochę kiepsko bo nie ma żadnego timera i wszystko chodzi w do loop ale poprostu wystarczy dopisać jednego if'a w miejscu gdzie masz wyświetlanie temperatury pieca
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Dzięki za odpowiedź:) Dopiero
Dzięki za odpowiedź:)
Dopiero dzisiaj znowu zabrałem się za ten układ....
Mam jeszcze jedno pytanie odnośnie tego co napisałeś.
Czy na początku program pod config 1 wire powinienem dopisać config dla buzzera?? Bo nigdzie nie jest napisane z którego pinu powinien być sterowany buzzer.
Pozdrawiam!
Re: Termostat
Nazwa "Buzzer" w powyższym kodzie to poprostu nazwa pinu, możesz albo zastapić nazwę Buzzer bezpośrednio przez Portx.y albo bardziej elegancko dopisac na początku programu polecenie:
Buzzer alias Portx.y
Od tej pory wszędzie gdzie napiszesz Set Buzzer, reset buzzer lub buzzer = 1 itp to zawsze zmieniany będzie stan na pinie portx.y, który napisany jest na początku
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Re: Termostat
Witam!
Wpisałem tak jak mówisz i buzzer załączył się przy temperaturze 30st (tyle ustawiłem do testów) ale następnie po zejściu poniżej zadanej temperatury załączył się na stałe i na wyświetlaczu została komenda przegrzanie. :(
Niestety nie jestem jeszcze na tyle dobry w programowaniu i prosze o pomoc.
Pozdrawiam!
Re: Termostat
Pamiętaj że buzzer ma być załączany stanem niskim na danym pinie za pomocą tranzystora PNP. Dodatkowo pin wyjściowy buzzera ma byc skonfigurowany jako wyjście.
Poza tym sprubuj to wstawić tak:
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.