Advertisement
Ostu

Untitled

Apr 26th, 2021
2,169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4. uint8_t inc=0,turn=0; // Zmienne odpowiedzialne za: regulacje wypełnienia przebiegu; kierunek zmian wypełnienia
  5. int main()
  6. {
  7.         DDRD = 0x80; // Ustawienie odpowiedniego wyjścia do którego przyłączona jest dioda
  8.  
  9.         TCCR0 = (1<<WGM01)|(1<<CS00)|(1<<CS02); // Ustawienie timera 0 w tryb ctc na preskalerze 1024
  10.         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
  11.  
  12.         OCR0 = 160; // Odmierzanie 10ms (Pełny cykl od rozpalenia do wygaszenia diody = 5s)
  13.  
  14.         TIMSK |= (1<< OCIE0); // Ustawienie maski przerwań
  15.  
  16.         sei(); // Globalne zezwolenie na przerwania
  17.  
  18.        
  19.         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
  20.         {
  21.            
  22.             if(turn == 0)
  23.             {
  24.                 OCR2 =turn+inc; // Rozpalanie diody
  25.             }
  26.             else
  27.             {
  28.                 OCR2 =turn-inc; // Wygaszanie diody
  29.             }
  30.         }
  31.        
  32. }
  33. ISR(TIMER0_COMP_vect) // Generowanie przerwania co zadane 10ms
  34. {  
  35.    
  36.     inc++; // inkrementacja zmiennej inc  
  37.     if(inc==255) // Jeśli inc osiągnie wartość maksymalną zostaje wyzerowane a zmienna turn zostaje zanegowana (odwrócenie kierunku = rozpoczęcie wygaszania diody)
  38.     {
  39.         turn ^=255;
  40.         inc=0;
  41.     }      
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement