Witam, mam pewien problem z uzupełnieniem mojego kodu sterownika czasowego. Case 0: Locate 1 , 1 : Lcd "Poniedzialek " Locate 2 , 1 : Lcd "Ster.NR" Num(1) = 1 If S2 = 0 Then Incr A3 If A3 > 8 Then A3 = 1 Waitms 200 Call Beep End If If S3 = 0 Then Decr A3 If A3 < 1 Then A3 = 8 Waitms 200 Call Beep End If A3 = A3 Aa(1) = Aa(1) + Num(1) Aa(2) = Aa(2) + Num(1) Aa(3) = Aa(3) + Num(1) Locate 4 , 1 Lcd "AA1-" ; Aa(1) : Lcd " AA2-" ; Aa(2) : Lcd " AA3-" ; Aa(3) If A3 = 1 Then Locate 2 , 9 : Lcd " 1 " Aa(1) = 1 ' Zmienna dla sterownika nr1 Aa(2) = 2 Aa(3) = 2 End If If A3 = 2 Then Locate 2 , 9 : Lcd " 2 " Aa(1) = 2 ' Zmienna dla sterownika nr2 Aa(2) = 1 Aa(3) = 2 End If If A3 = 3 Then Locate 2 , 9 : Lcd " 3 " Aa(1) = 2 ' Zmienna dla sterownika nr3 Aa(2) = 2 Aa(3) = 1 End If If A3 = 4 Then Locate 2 , 9 : Lcd "1-2" Aa(1) = 1 ' Zmienna dla sterownika nr1 ' Aa(2) = 1 ' Zmienna dla sterownika nr2 Aa(3) = 2 End If If A3 = 5 Then Locate 2 , 9 : Lcd "1-3" Aa(1) = 1 ' Zmienna dla sterownika nr1 Aa(2) = 2 ' Zmienna dla sterownika nr3 Aa(3) = 1 End If If A3 = 6 Then Locate 2 , 9 : Lcd "2-3" Aa(1) = 2 ' Zmienna dla sterownika nr2 Aa(2) = 1 ' Zmienna dla sterownika nr3 Aa(3) = 1 End If If A3 = 7 Then Locate 2 , 9 : Lcd "ALL OFF" Aa(1) = 2 ' Zmienna dla sterownika nr1 Aa(2) = 2 ' Zmienna dla sterownika nr2 Aa(3) = 2 ' Zmienna dla sterownika nr3 End If If A3 = 8 Then Locate 2 , 9 : Lcd "ALL ON " Aa(1) = 1 ' Zmienna dla sterownika nr1 Aa(2) = 1 ' Zmienna dla sterownika nr2 Aa(3) = 1 ' Zmienna dla sterownika nr3 End If Ten kawałek kodu odnosi się do jednego dnia w którym jest wybrana opcja który sterownik czasowy ma zadziałać w danym dniu. Rem ************************************************************************** Rem ****************** Sprawdzam sterowniki czasowe ************************** Rem ************************************************************************** Sprawdzam_stery: Rem sterownik nr.1 If Aa(1) = Aa(1) Or Ab(1) = Ab(1) Or Ac(1) = Ac(1) Or Ad(1) = Ad(1) Or Ae(1) = Ae(1) Or Af(1) = Ae(1) Or Ag(1) = Ae(1) Then If Godziny = Czas_1 And Minuty = Czas_2 And Sekundy = 0 Then Locate 3 , 18 : Lcd "ON " Pk1 = Wlacz End If End If Rem Sterownik nr.2 If Num(1) = 1 Or Num(2) = 2 Or Num(3) = 3 Or Num(4) = 4 Or Num(5) = 5 Or Num(6) = 6 Or Num(7) = 7 Then ' sprawdzam dzień tygodnia If Aa(2) = 1 Or Ab(2) = 1 Or Ac(2) = 1 Or Ad(2) = 1 Or Ae(2) = 1 Or Af(2) = 1 Or Ag(2) = 1 Then If Godziny = St_1 And Minuty = St_2 And Sekundy = 0 Then Locate 4 , 18 : Lcd "ON " Pk2 = Wlacz End If End If End If Rem sterownik nr.3 If Aa(3) = 1 Or Ab(3) = 1 Or Ac(3) = 1 Or Ad(3) = 1 Or Ae(3) = 1 Or Af(3) = 1 Or Af(3) = 1 Then If Godziny = St5 And Minuty = St6 And Sekundy = 0 Then Locate 4 , 18 Pk3 = Wlacz End If End If If Godziny = Czas_3 And Minuty = Czas_4 Then ' wyłącz sterownik 1 Pk1 = Wylacz Locate 3 , 18 : Lcd "OFF" End If If Godziny = St_3 And Minuty = St_4 Then Pk2 = Wylacz Locate 4 , 18 : Lcd "OFF" End If If Godziny = St7 And Minuty = St8 Then Pk3 = Wylacz End If
|
|||
Re; Sterownik czasowy
Tak w sumie to nie wiem w czym do końca jest problem..... masz jakąś tablicę która zawiera konfigurację które sterowniki mają działać.... trzeba do tego zegara z kalendarzem aby liczyć dni wywołujesz podprocedurę z tymi case'ami która zależy od aktualnego dnia. Ona ładuje do zmiennych jakie chcesz odpowiednie ustawienia i tyle...
Potem uruchamiasz procedurki po kolei do wszystkich sterowników i te które mają nie działać w danym dniu poprostu nic nie robią
Jeśli nie zrozumiałem o co chodzi to wyjaśnij dokładnie co chcesz uzyskac... najlepeij w punktach
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.
Sterownik czasowy
Witam, przepraszam że mój opis problemu był taki skromny, ale chyba sobie już poradziłem tak czy siak na symulatorze proteusie działa.
Ta zmienne a dokładnie aa(1),aa(2),aa(3) oznaczają aktywne bądź nie aktywne sterowniki czasowe, a tablicę num(1) wyrzuciłem
i przypisałem odpowiednio '+1 dla poniedziałku itd. dla wszystkich dni', na koniec ustawień przechodzę do procedurki zapisu w eepromie tych zmiennych.
Następnie podczas pracy głównej pętli program sprawdza czy są wogóle włączone są sterowniki oraz które mogą być załączone
w danym dniu. Cały ten proces rozwiązałem w ten sposób, morze za bardzo rozciągnięty, ale działający, a to dla tego że nie za bardzo potrafię operować tablicami i innymi argumentami programowymi.
Poniżej to co działa, ale jak jest sposób na odchudzenie tego to byłbym bardzo wdzięczny.
Pozdrawiam.
Sterownik czasowy
Tak wygląda ekran na symulatorze
A jesze mam pytanie odnośnie timerów, sercem układu jest ATEGA328 i wykorzystuję w nim dwa timery jako czasomierze,
ale jest jeszcze jeden TIMER2 i moje pytanie czy mogę jego użyć do regulacji podświetlenia led? Jeżeli tak to bardzo bym poprosił o jakiś mały i prosty przykład użycia tego timera2.
Odp. Sterownik czasowy
Dla Atmega328P to będzie:
Ten Timer w Mega328 ma dwa wyjścia. Konfigurujesz które Ci wygodnie albo oba. Drugie nazywa się PWM2B
Szukasz w nocie mikrokontorlera gdzie ma wyjście PWM2A i tam jest ten sygnał.
Tam gdzie wpiszesz "Disconnect" możesz drugi pin wykorzystać jak chcesz czyli standardowo Config Port i używasz jak innych.
BARTek
Moja strona
Sterownik czasowy
Dzięki Bartku zaraz się zabieram do roboty. Sprawdziłem i okazało się że po dodaniu tego kawałku kodu
program zwolnił do prawie zera.
Taką mam konfigurację timerów.
Jak ustawiłem Timer2 w tryb licznika to programowy pwm niby działa ale szybko się zmienia, a mnie chodzi o to
aby wartość była stała np. 70%
Poniżej fragment kodu zaczerpniętego od Pana Mirleja acz kolwiek trochę przerobiony.
Jak zatrzymać te pulsowanie na wartość np.75% ?
Odp. Sterownik czasowy - PWM podswietlanie
Kiedy używasz sprzętowego PWM nie ma potrzeby tworzenia większego kodu do obsługi.
Jedyny minus to to ze jesteś przywiązany do dedykowanych pinów.
W Atmega328P dla Timer2 sa dedykowane piny PORTB.3 dla PWM2A i PORTD.3 dla PWM2B
Przykład który napisałem juz sam by sterował PWM na pinie PWM2A według poniższego schematu.
Ten dodatkowy kod w postaci
On Timer2 Led_pwm
musisz usunąć. To jest do innego rodzaju PWMTen sub "Led_pwm:" tez jest tu niepotrzebny.
Cały zamysł sprzętowych PWM`ów jest taki że wszystko dzieje się bez udziału procesora. Wszystko dzieje sie samo jak poustawiasz i nie zajmuje głównej aplikacji. Timer działa sam i generuje przebieg PWM na dedykowanych pinach.
BARTek
Moja strona
Sterownik czasowy
Ok, cały kod praktycznie już działa poza jednym faktem zapisu i odczytu tablic.
Oto kawałek kodu zapisu który nie działa prawidłowo bo jak wykonam taki zapis to wyświetlacz szaleje.
W jaki sposób można to zapisać prawidłowo ?
Bardzo proszę o pomoc w tej kwestji.