Witam,pochwalę się minitermometrem uniwersalnym jaki wykonałem w/g projektu MIRLEYA w wersji z jednym czujnikiem pracującym jako termostat.Przyciskami nastawiamy temperaturę +/-,natomiast histereza jest ustawiana w programie (ma to swoje zalety,poniewż jest możliwość ustawienia różnych wartości dla dolnej i górnej granicy działania np.dół 0,5*C, góra 2*C).Termostat po nastawieniu temperatury zapamiętuje nastawę i powraca do wyświetlania aktualnie mierzonej.U mnie pracuje zamontowany w rozdzielni monitorując temperaturę pomieszczenia,sygnalizując jej przekroczenie za pomocą sygnalizatora umieszczonego na zewnątrz pomieszczenia.Sygnalizator załączany jest przekaźnikiem. '**************************** 'Konfiguracja '**************************** $regfile = "attiny2313.dat" $crystal = 8000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B11111011 : Portd = &B11111111 Config Porta = &B00000000 : Porta = &B11111111 Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Przerwanie0 Enable Interrupts '**************************** 'Zmienne '**************************** Dim Dziel(2) As Byte Dim Wysw As Word , Ww As Byte , W(3) As Byte Dim Wysw_pomoc As Word Dim T As Integer , Tu As Integer Dim H As Integer , L As Integer Dim Mux As Byte , I As Byte Dim Ust As Bit Dim Autoret As Byte Dim F1s As Bit , F4ms As Bit , F100ms As Bit Dim Minus As Bit Dim Kanal As Byte '**************************** 'Wartosci Poczatkowe '**************************** Kanal = 1 Readeeprom Tu , 35 'odczyt z pamieci '**************************** 'Petla glowna '**************************** Do If F4ms = 1 Then Reset F4ms If Ust = 0 Then Wysw = T Else Wysw = Tu Gosub Wyswietl_zmierz End If If F100ms = 1 Then Reset F100ms If Pind.2 = 0 Then Incr Tu Autoret = 20 End If If Pina.0 = 0 Then Decr Tu Autoret = 20 End If If Autoret > 0 Then Ust = 1 Decr Autoret If Autoret = 0 Then Writeeeprom Tu , 35 'zapis do eeprom End If Else Ust = 0 End If H = Tu + 10 'histereza na + 10 = 1 stopien L = Tu - 5 'histereza na - np.5 = 0,5 stopnia If T > H Then Set Portd.3 If T < L Then Reset Portd.3 End If Loop End '**************************** 'Przerwanie timer0 '**************************** Przerwanie0: Timer0 = 131 Set F4ms Incr Dziel(1) If Dziel(1) = 25 Then Dziel(1) = 0 Set F100ms Incr Dziel(2) If Dziel(2) = 10 Then Dziel(2) = 0 Set F1s End If End If Return '**************************** 'pomiar temp '**************************** Temp: If F1s = 1 Then Reset F1s 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &HBE , 1 , Pind , Kanal T = 1wread(2 , Pind , Kanal): Minus = T.15 T = Abs(t) T = T * 10 T = T / 16 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &H44 , 1 , Pind , Kanal End If Return '**************************** 'wyswietlanie i wywolywanie pomiaru '**************************** Wyswietl_zmierz: Incr Mux If Mux = 5 Then Mux = 0 'Portd.3 = Not Minus For I = 1 To 3 Wysw_pomoc = Wysw Mod 10 Ww = Wysw_pomoc W(i) = Lookup(ww , Tabela) Wysw = Wysw / 10 Next I If W(3) = 40 Then W(3) = 255 'wygaszenie zera wiodącego Select Case Mux Case 0: Portb = W(3) Reset Portd.6 Case 1: Set Portd.6 Portb = W(2) And &B11011111 Reset Portd.5 Case 2: Set Portd.5 Portb = W(1) Reset Portd.4 Case 3: Set Portd.4 Portb = 255 Gosub Temp 'Case 4: 'opoznienie na odczyt temp, jeśli nie ma to miga wyswietlacz End Select Return '******************************************************************************* 'Tabele do wyswietlania na wyswietlaczu '******************************************************************************* Tabela: Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160 'znak: 0 1 2 3 4 5 6 7 8 9 Termostat sprawuje się jak do tej pory beż żadnych zastrzeżeń, naprawdę udany projekt.Schemat i ustawienia fusebit,oraz wiele innych przydatnych wyjaśnień w projekcie "minitermometr uniwersalny".,,,
|
|||
Kod
Witam! Czy mógłbym prosić o plik ze skompilowanym kodem żródłowym? moj e-mail to
Pozdrawiam