Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- uint8_t inc=0,turn=0; // Zmienne odpowiedzialne za: regulacje wypełnienia przebiegu; kierunek zmian wypełnienia
- int main()
- {
- DDRD = 0x80; // Ustawienie odpowiedniego wyjścia do którego przyłączona jest dioda
- TCCR0 = (1<<WGM01)|(1<<CS00)|(1<<CS02); // Ustawienie timera 0 w tryb ctc na preskalerze 1024
- TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<CS21)|(1<<CS22)|(1<COM20)|(1<<COM21); // ustawienie timera 2 w tryb fast PWM z setowaniem rejestru OC przy zrównaniu z OCR2 na preskalerze 256
- OCR0 = 160; // Odmierzanie 10ms (Pełny cykl od rozpalenia do wygaszenia diody = 5s)
- TIMSK |= (1<< OCIE0); // Ustawienie maski przerwań
- sei(); // Globalne zezwolenie na przerwania
- while(1) // Pętla główna wpływająca na współczynnik wypełnienia przebiegu regulacji poziomu świecenia diody na podstawie wielkości zmiennych turn i inc
- {
- if(turn == 0)
- {
- OCR2 =turn+inc; // Rozpalanie diody
- }
- else
- {
- OCR2 =turn-inc; // Wygaszanie diody
- }
- }
- }
- ISR(TIMER0_COMP_vect) // Generowanie przerwania co zadane 10ms
- {
- inc++; // inkrementacja zmiennej inc
- if(inc==255) // Jeśli inc osiągnie wartość maksymalną zostaje wyzerowane a zmienna turn zostaje zanegowana (odwrócenie kierunku = rozpoczęcie wygaszania diody)
- {
- turn ^=255;
- inc=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement