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. $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
|
|||
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.
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).
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
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.