Jak dopisać funkcję termostat


Witam
mam termometr

' Fuse bity ustawione na 8MHz
$regfile = "m8def.dat"
$crystal = 8000000
 
Config Portb = Output                                       'sterowanie segmentów LED
Config Portd = Output                                       'sterowanie segmentów LED
Config Pinc.0 = Output
Config Pinc.1 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config 1wire = Portc.5
Anoda1 Alias Portc.1                                        ' Lewy wyświetlacz
Anoda2 Alias Portc.2
Anoda3 Alias Portc.3
 
S1 Alias Portb.0
 
 
Dim Nr_wysw As Byte
Dim Liczba As Long
 
Dim Temp_liczba_1 As Word , Ttemp_liczba_1 As Word
Dim Temp_liczba_2 As Word , Ttemp_liczba_2 As Word
Dim Temp_liczba_3 As Word , Ttemp_liczba_3 As Word
 
Dim T As Integer                                            ' temperatura
Dim T2 As Integer                                           ' temperatura
Dim Przecinek2 As Byte
Dim I1 As Integer                                           ' bierze udzial w konwersji temperatury
Dim Dsid1(8) As Byte                                        ' adres czujnika temperatury
 
'Konfiguracja uC, przerwań, ustawienie Timera i przerwania od niego na ok. 488Hz, inne konfiguracje 1w, ...
Config Timer0 = Timer , Prescale = 8                        '1 000 000 Hz/8/256=~488Hz
 
Enable Timer0
Enable Interrupts
On Timer0 Timint
 
Dim Pomiar As Byte , Licznik As Word
Pomiar = 0
Licznik = 0
 
Dsid1(1) = 1wsearchfirst()                                  ' odnalezienie czujnika temperatury - moim zdaniem - jeśli nie przewidujesz dołączania i podłączania go podczas pracy urządzenia - można zostawić na początku bo to jest najbardziej czasożerna instrukcja - jej wyrzucenie z czasu wyłączenie odświeżania (między Disable Interrupts a Enable Interrupts) powinno przyspieszyć działanie i zniwelować to przygasanie co nieco ponad 750ms.
 
Do
If Pomiar = 0 Then
If Licznik = 0 Then
Disable Interrupts
'wyślij komendę skip rom i convert t: to te komendy = tu jest na nie dedykowane miejsce
1wreset
1wwrite &HCC
1wwrite &H44
Enable Interrupts
Licznik = 3000
Pomiar = 1
End If
End If
If Pomiar = 1 Then
If Licznik = 0 Then
Disable Interrupts
'tu dokonaj odczytu temperatury z termometru
1wreset
1wwrite &HCC
1wwrite &HBE
I1 = 1wread(2)
Enable Interrupts
'i przepisania jej na zmienne odpowiadające za wyświetlanie tego na LCD - nie w przerwaniu!
I1 = I1 * 10
I1 = I1 / 16
 
T = I1                                                      '/ 10
T2 = I1 / 10
 
 
 
If T2 < 100 Then
Liczba = T
Przecinek2 = 1
Else
Liczba = T2
Przecinek2 = 0
End If
 
Ttemp_liczba_3 = Liczba
Ttemp_liczba_3 = Ttemp_liczba_3 Mod 10
Ttemp_liczba_2 = Liczba / 10
Ttemp_liczba_2 = Ttemp_liczba_2 Mod 10
Ttemp_liczba_1 = Liczba / 100
 
Temp_liczba_3 = Ttemp_liczba_3
Temp_liczba_2 = Ttemp_liczba_2
Temp_liczba_1 = Ttemp_liczba_1
 
Pomiar = 0
Licznik = 3000
End If
End If
Loop
 
Timint:
If Licznik <> 0 Then Decr Licznik
'tu cała reszta odświerzania
Reset Anoda1
Reset Anoda2
Reset Anoda3
 
Select Case Nr_wysw
Case 0:
If Liczba >= 100 Then
Portd = Lookup(temp_liczba_1 , Kody7seg)
Else
Portd = &B0
End If
Set Anoda1
 
Case 1:
Portd = Lookup(temp_liczba_2 , Kody7seg)
If Przecinek2 = 1 Then
Portb.3 = 1
End If                                                      ':
Set Anoda2
 
Case 2:
Portb.3 = 0
If Przecinek2 = 1 Then
Portb.3 = 0
End If                                                      ':
Portd = Lookup(temp_liczba_3 , Kody7seg)
Set Anoda3
End Select
 
Incr Nr_wysw
If Nr_wysw = 3 Then
Nr_wysw = 0
End If
Return
 
Kody7seg:
Data 247 , 160 , 111 , 238 , 188 , 222 , 223 , 224 , 255 , 254

i chciałem dopisać do tego funkcję termostatu ale nie udaje mi się. Gdy T2 >= T_ustawiona to wtedy załącza się przekaźnik
Proszę o pomoc :)




Portret użytkownika mirley

RE: Termostat

Trzeba napisać histerezę aby zrobić termostat...

Tp = Tu+H 'H to 0.5*szerokość histerezy
Tm = Tu-H
if T > Tp then set portc.0
if T< Tm then reset portc.0

Zmienne Tp i Tm to zmienne pomocnicze, H określa szerokość histerezy a Tu to temperatura ustawiona. Można też zrezygnowac z ustawionej i bezpośrednio podawać Tp i Tm

-

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.

Portret użytkownika shoter09

ja to wiedziałem tylko jak to

ja to wiedziałem tylko jak to zrobić za pomocą przycisków?

Portret użytkownika mirley

Re: Klawiatura

No to trzeba napisać odczyt kalwiatury... popatrz do kodów źródłowych, napisałem tam jak się to robi.... ewentualnie prawie każdy mój projekt ma klawiaturę, więc łatwo jest się wzorować

-

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.