No, tak, teraz widać, że LED ściemnia Ci się "w drugą stronę".
Mały egzamin (dwa pierwsze pytania dotyczą Twojego układu):
1. Jaki sygnał wyzwala triaka?
2. Jaki sygnał zapala diodę?
3. Na jakiej zasadzie działa sterowanie fazowe?
Triaka wyzwala stan wysoki na PC0. Celowo napisałem "wyzwala" nie włącza, ponieważ triaka się nie da wyłączyć (w przeciwieństwie do LED-a).
LEDa oczywiście włącza stan wysoki na PC1, a wyłącza stan niski.
Natomiast sterowanie fazowe polega na opóźnianiu załączania triaka w stosunku do momentu wystąpienia "zera" sieci (triak wyłączy się sam w następnym zerze) aby był włączony tylko przez część (pół)okresu sieci. Im większe opóźnienie, tym słabiej świeci żarówka.
W Twoim programie ustawiasz stan wysoki na PC0 i PC1 na sygnał "zera" (w przerwaniu INT0), natomiast stan niski z opóźnieniem w przerwaniu timera. W efekcie LED świeci tym mocniej, im większe opóźnienie, ale triak pozostaje zawsze włączony przez cały okres sieci.
Musisz, po pierwsze, zmienić na ustawianie stanu wysokiego na PC0 i PC1 w przerwaniu timera, po drugie wyłączać LED-a przez ustawianie stanu niskiego w przerwaniu INT0.
Wyłącznie sygnału wyzwalania triaka (PC0) możesz np. przenieść do pętli głównej. Straszna proteza, ale działać powinno.
Zaloguj się, aby zobaczyć kod
Albo robić to z małym opóźnieniem (delay()), np. 10us w przerwaniu timera. Oczywiście, przedłużanie czasu obsługi przerwania nie jest zalecane, ale w takich prostych przypadkach ujdzie.
Generalnie, polecam poczytanie literatury, np. wymienionej w poście wyżej.