Regulacja fazowa i RC5


Witam.

Jestem w trakcie budowy regulatora fazowego na procesorze Attiny2313. Chcę go zastosować zamiast tradycyjnego wyłącznika oświetlenia w moim pokoju. Sterowanie jasnością żarówki odbywać się będzie poprzez dwa przyciski i pilota RC5.
Program działa. Jasność żarówki jest zmieniana przyciskami i pilotem z tym, że regulacja pilotem trwa dwa razy dłużej niż przyciskami. W przypadku przycisków, przejście z najmniejszej jasności do największej trwa około 5s (co 50ms o jeden krok), a w przypadku pilota aż 10s. I nie mam pomysłu jak ją przyspieszyć.

$crystal = 4000000
$regfile "attiny2313.dat"
 
Config Portb = &B11111100                    'SW1=PB0, SW2=PB1
         Portb = &B11111111                  'wejścia podciągnięte
 
Config Int0 = Rising
Config Int1 = Falling
Config Timer1 = Timer , Prescale = 64
Config Rc5 = Pind.3
On Int0 Detekt_zero
On Int1 Rc5
On Timer1 Tajmer
Enable Int0
Enable Int1
Enable Timer1 : Stop Timer1
Enable Interrupts
 
Dim Licz_fazy As Byte , Sw1 As Bit , Sw2 As Bit , Wartosc As Word
Dim Czas_zw As Byte , Przyciski As Byte , Temp As Bit , Szybko As Bit
Dim Flaga As Bit , Adres As Byte , Komenda As Byte , Tbit As Bit , Odebrano As Bit
Dim Pomoc As Byte , Pomoc1 As Bit , Pomoc2 As Bit
Licz_fazy = 0 : Stop Ac : Adres = 255
 
Triak Alias Portb.2
 
Do
'***************Obsługa przycisków******************************
Przyciski = Pinb And 3
If Flaga = 1 Then
   Flaga = 0
   Select Case Przyciski
   Case 0:                                   'jaśli oba przyciski wciśnięte
      If Pomoc1 = 1 Then
         Pomoc1 = 0
         Toggle Pomoc2
      End If
   Case 1:                                   'jeśli S1 wciśnięty
      Sw1 = 1                                'jeśli przycisk jest wciśnięty krótko
      If Szybko = 0 Then Incr Czas_zw        'to po jego zwolnieniu jasność
      If Czas_zw = 50 Then Szybko = 1        'zostanie zwiekszona o jeden krok
      If Szybko = 1 Then                     'przy wciśnięciu przycisku dłużej niż 0,5sek
         Incr Pomoc                          'jasność jest zwiekszanao jeden krok
         If Pomoc = 5 Then                   'co 50ms
            Pomoc = 0
            Gosub Zwieksz
         End If
      End If
   Case 2:                                   'jeśli S2 wciśnięty
      Sw2 = 1
      If Szybko = 0 Then Incr Czas_zw        'analogocznie jak SW1
      If Czas_zw = 50 Then Szybko = 1
      If Szybko = 1 Then
         Incr Pomoc
         If Pomoc = 5 Then
            Pomoc = 0
            Gosub Zmniejsz
         End If
      End If
   Case 3:                                   'jeśli oba przyciski zwolnione
      If Sw1 = 1 Then
         Sw1 = 0
         Gosub Zwieksz
      End If
      If Sw2 = 1 Then
         Sw2 = 0
         Gosub Zmniejsz
      End If
      Pomoc1 = 1 : Szybko = 0 : Pomoc = 0 : Czas_zw = 0
   End Select
'***************Koniec obsługi przycisków***********************
   If Pomoc2 = 0 Then
      Disable Timer1
   Else
      Enable Timer1
   End If
End If
'***************Obsługa pilota**********************************
If Odebrano = 1 Then
   Odebrano = 0
   If Adres = 0 Then
      Select Case Komenda
      Case 9:
         If Tbit <> Temp Then
            Temp = Tbit
            Toggle Pomoc2
         End If
      Case 8:
         Gosub Zwieksz
      Case 7:
         Gosub Zmniejsz
      Case 4:
         Licz_fazy = 20
      Case 5:
         Licz_fazy = 50
      Case 6:
         Licz_fazy = 75
      End Select
   End If
   Enable Int1
End If
'***************Koniec obsługi pilota***************************
Loop : End
 
Rc5:
Disable Int1
Enable Interrupts
Getrc5(adres , Komenda)
Tbit = Komenda.7
Komenda = Komenda And &B01111111
Odebrano = 1
Return
 
Detekt_zero:
Flaga = 1
Triak = 1
Wartosc = Lookup(licz_fazy , Opoznienie)
Timer1 = Wartosc
Start Timer1
Return
 
Tajmer:
Stop Timer1
Triak = 0
Return
 
Zwieksz:
If Licz_fazy <> 89 Then Incr Licz_fazy
Return
 
Zmniejsz:
If Licz_fazy <> 0 Then Decr Licz_fazy
Return
 
Opoznienie:
'Data 64935 , 64959 , 64973 , 64987 , 64997 , 65004 , 65015 , 65022 , 65029 , 65035
Data 65042% , 65049% , 65056% , 65063% , 65067% , 65074% , 65077% , 65084% , 65091% , 65095%
Data 65098% , 65105% , 65108% , 65115% , 65119% , 65122% , 65129% , 65133% , 65136% , 65140%
Data 65147% , 65150% , 65154% , 65157% , 65164% , 65167% , 65171% , 65174% , 65178% , 65181%
Data 65188% , 65192% , 65195% , 65199% , 65202% , 65206% , 65213% , 65216% , 65220% , 65223%
Data 65226% , 65230% , 65233% , 65240% , 65244% , 65247% , 65251% , 65254% , 65258% , 65261%
Data 65268% , 65272% , 65275% , 65279% , 65282% , 65289% , 65292% , 65296% , 65299% , 65303%
Data 65310% , 65313% , 65317% , 65320% , 65327% , 65331% , 65334% , 65341% , 65345% , 65351%
Data 65355% , 65358% , 65365% , 65369% , 65376% , 65379% , 65386% , 65393% , 65400% , 65404%
Data 65410% , 65417% , 65424% , 65431% , 65442% , 65449% , 65459% , 65470% , 65483% , 65501%

Za pomoc z góry dziękuje.
Jacek




Portret użytkownika mirley

Re: Program żarówka

Zwiększ szybkośc rezonatora kwarcowego na 16MHz i przeztaw odpowiednio do niego fusebity. może poprostu procesor nie wyrabia i po kliknieciu pilota, komenda GetRc5 zamula procesor i zanim on sobie z tym poradzi to już mija długi czas

-

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 jacekk232

Ragulacja fazowa i RC5

Witam.
Po zastosowaniu kwarcu 16MHz, zmianie fusebitów i programu regulacja pilotem nadal działa tak samo wolno. Wydaje mi się, że polecenie Getrc5 wywołuje procedurę zmiany jasności żarówki co 100ms. Nie znam zasady działania polecenia Getrc5 "od środka" więc nie bardzo wiem jak zrobić aby to polecenie zmieniało jasność co 50ms (tak jak przyciski).

Portret użytkownika mirley

Re: Regulacja fazowa

Popatrz na ten fragment kodu i spróbuj go zamienić.. Wydaje mi się że tu się robi dzielenie przez 2 za pomocą tego toggle bitu

         If Tbit <> Temp Then
            Temp = Tbit
            Toggle Pomoc2
         End If

Zasady działania polecenia GetRc5 też nie znam dokładnie, ale większośc złożonych poleceń bascomowych zawiera instrukcje wait, które wstrzymują program

-

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.