Mikrokontroler ATMEGA16, oscylator wewnętrzny 8 MHz, wykorzystany timer1 (16 bit).
Dzielę połówkę sinusoidy na 100 części. 10ms / 100 = 0,1 ms = 0,0001s.
Odcinki czasu 0,1 ms generuje mi timer1
Takt zegarowy t = 1 / 8000000 Hz = 0,125 ms
Dla uzyskania 0,0001s muszę zliczyć 800 taktów ( 800 x 0,125 us = 100 us = 0,1 ms = 0,0001 s ). Aby licznik się przepełnił po wykonaniu 800 cykli maszynowych i wywołał przerwanie ustawiam wartość początkową licznika na 65536 - 800 = 64736.
Od tej pory co 0,0001 s inkrementuje się zmienna Czas_zwloki$ (sto kroków na połówce sinusa). Jeśli w pewnej chwili okaże się, że Czas_zwloki$ przekroczy Wartosc_t1$ zostanie załączony triak.
Gdy na int1 zostanie wykryte przejście przez zero zrobione na układzie zerocrosser triak zostanie wyłączony. Wyzerowana zostanie również zmienna Czas_zwloki$. I wszystko zacznie się od początku (triak zostanie włączony ponownie po przekroczeniu przez zmienną Czas_zwloki$ wartości odpowiedniej dla włączenia triaka.
Poniżej gotowy kod.
W teorii wszystko miodzio w praktyce już nie.
Na filmie widać trzecią diodę od prawej (to jest właśnie D10), jej zachowanie (cały czas trzymany przycisk S10) i zachowanie podłączonej żarówki 230V.
Poprawiłem tytuł - tagi.
[zumek]
Dzielę połówkę sinusoidy na 100 części. 10ms / 100 = 0,1 ms = 0,0001s.
Odcinki czasu 0,1 ms generuje mi timer1
Takt zegarowy t = 1 / 8000000 Hz = 0,125 ms
Dla uzyskania 0,0001s muszę zliczyć 800 taktów ( 800 x 0,125 us = 100 us = 0,1 ms = 0,0001 s ). Aby licznik się przepełnił po wykonaniu 800 cykli maszynowych i wywołał przerwanie ustawiam wartość początkową licznika na 65536 - 800 = 64736.
Od tej pory co 0,0001 s inkrementuje się zmienna Czas_zwloki$ (sto kroków na połówce sinusa). Jeśli w pewnej chwili okaże się, że Czas_zwloki$ przekroczy Wartosc_t1$ zostanie załączony triak.
Gdy na int1 zostanie wykryte przejście przez zero zrobione na układzie zerocrosser triak zostanie wyłączony. Wyzerowana zostanie również zmienna Czas_zwloki$. I wszystko zacznie się od początku (triak zostanie włączony ponownie po przekroczeniu przez zmienną Czas_zwloki$ wartości odpowiedniej dla włączenia triaka.
Poniżej gotowy kod.
Kod: text
W teorii wszystko miodzio w praktyce już nie.
Na filmie widać trzecią diodę od prawej (to jest właśnie D10), jej zachowanie (cały czas trzymany przycisk S10) i zachowanie podłączonej żarówki 230V.
Poprawiłem tytuł - tagi.
[zumek]