Minitermometr Uniwersalny -termostat


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.
Zamieszczam poniżej gotowy i sprawdzony kod źródłowy

'****************************
           '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".,,,




Portret użytkownika gosc

Kod

Witam! Czy mógłbym prosić o plik ze skompilowanym kodem żródłowym? moj e-mail to

Pozdrawiam