Witam
Zrobiłem dwu kanałową płytkę do ściamniacza żarówek na 230V z wykorzystaniem triaka (oczywiśie dwóch, po jednym na kanał). Schemat znalazem na formu, wykorzystywany jest układ detekcji przejścia przez zero, triak jest sterowany przez MOC3021, itd.
Układ detekcji przejścia przez zero jest podłączony do przerwania INT0, wyzwalanie triaktów do wyjść PD5 i PD6.
Problem jest następujący, program nie potrafi wysterować wyjściami PD5 i PD6, stan portu D zmiania się natomiast nie zmienia się stan triaka.
Płytka jest OK (tak mi się wydaję) ponieważ zmieniająć w przerwaniu INT0 obsługę potru zamiast włączać to wyłączam to triak nie pracuje, tzn żarówka nie świeci się.
Jeżeli w przerwaniu INT0 zamiast wyłączania ustawię włączanie to żarówka świeci się na max, przerwanie od licznika TIMER1_COMPA/B_vect generuje się i zmienia się stan portu ale nie ma to wpływu na triaka.
Docztytałem że ustawiając bity COMXX w rejestrach timera odłacza się sterowanie portami IO poprzez rejestry PORTX, wtedy wyjściami steruje timer ale w moim przypadku nie ustawiam tych bitów. Licznik TIMER1 pracuje w trybie normalnym. Porty do jakich są podłączone traki to porty PD5 -> OC0B, PD6 -> OC0A ale to są wyjścia TIMER0 którego nie wykorzystuje.
Walcze z problemem od dwóch dni i nic nie mogę wywalczyć.
uC pracuje na kwarcu 11059200 Hz, w konfiguacji projektu jest to wpisane.
Poniej przytaczam część kodu programu odpowiedzialnego za strowanie.
Zawartość pliku Dimmer_230V.h
Proszę poprawić treść wiadomości - 3.1.13. Zabronione jest publikowanie wpisów naruszających zasady pisowni języka polskiego, niedbałych i niezrozumiałych.
[zumek]
Zrobiłem dwu kanałową płytkę do ściamniacza żarówek na 230V z wykorzystaniem triaka (oczywiśie dwóch, po jednym na kanał). Schemat znalazem na formu, wykorzystywany jest układ detekcji przejścia przez zero, triak jest sterowany przez MOC3021, itd.
Układ detekcji przejścia przez zero jest podłączony do przerwania INT0, wyzwalanie triaktów do wyjść PD5 i PD6.
Problem jest następujący, program nie potrafi wysterować wyjściami PD5 i PD6, stan portu D zmiania się natomiast nie zmienia się stan triaka.
Płytka jest OK (tak mi się wydaję) ponieważ zmieniająć w przerwaniu INT0 obsługę potru zamiast włączać to wyłączam to triak nie pracuje, tzn żarówka nie świeci się.
Jeżeli w przerwaniu INT0 zamiast wyłączania ustawię włączanie to żarówka świeci się na max, przerwanie od licznika TIMER1_COMPA/B_vect generuje się i zmienia się stan portu ale nie ma to wpływu na triaka.
Docztytałem że ustawiając bity COMXX w rejestrach timera odłacza się sterowanie portami IO poprzez rejestry PORTX, wtedy wyjściami steruje timer ale w moim przypadku nie ustawiam tych bitów. Licznik TIMER1 pracuje w trybie normalnym. Porty do jakich są podłączone traki to porty PD5 -> OC0B, PD6 -> OC0A ale to są wyjścia TIMER0 którego nie wykorzystuje.
Walcze z problemem od dwóch dni i nic nie mogę wywalczyć.
uC pracuje na kwarcu 11059200 Hz, w konfiguacji projektu jest to wpisane.
Poniej przytaczam część kodu programu odpowiedzialnego za strowanie.
Kod: C / C++
Zawartość pliku Dimmer_230V.h
Kod: C / C++
Proszę poprawić treść wiadomości - 3.1.13. Zabronione jest publikowanie wpisów naruszających zasady pisowni języka polskiego, niedbałych i niezrozumiałych.
[zumek]