Witam ' 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
|
|||
RE: Termostat
Trzeba napisać histerezę aby zrobić termostat...
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.
ja to wiedziałem tylko jak to
ja to wiedziałem tylko jak to zrobić za pomocą przycisków?
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.