logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak ustawić PWM o stałym wypełnieniu 50% w trybie CTC AVR?

ToRii 21 Mar 2006 20:42 2260 4
REKLAMA
  • #1 2441878
    ToRii
    Poziom 11  
    Posty: 60
    Pomógł: 1
    Ocena: 1
    Chcialbym zrobic PWM o stalym wypeleniu rownym 50%. Jesli zas chodzi o CTC to ten tryb rozumiem w ten sposob, ze w OCR2 nadaje jakas wartosci czyli moja ziarnistosc...

    No i potem licznik zlicza w gore i jak wartosc TCNT2 zrowna mi sie z OCR2 to nastepuje jego zerowanie i zmiana stanu na wyjsciu OC2?

    Moim glownym problemem jest to ze nie wiem jak zmieniac wypelnienie...?


    W COMPARE OUTPUT MODE ustawilem :

    COM21= 1
    i
    COM20= 0

    Co oznacza ze nastepuje zerowanie sie wyjscia OC2 w chwili porownania jednak potem musze je na nowo ustawic na 1?

    Reasumujac czy noga procka oznaczona jako OC2 poprzez swoje wlacz/wylacz sluzy do generownia wypelnienia?

    PS:Wklejam kod :

    ----------------------
    
    int main ()
    {
     TIMSK = (1<<OCIE2)|(1<<TOIE2);
     TCNT2=0; //zerowanie licznika -profilaktycznie
     TCCR2 = (1<<WGM21)|(1<<CS20)|(1<<COM21);//ustawnie tryby CTC 
        // pleskalera na "1" ,and Toggle Oc2 On Compare Match
     
     DDRB=0xFF;
     PORTB=0xFF;
    
     while (1)
     {
    	OCR2 = 100; //ziarnistosc do obliczenia jeszcze
    	TIFR=0xFF;            // zgaszenie flag przerwan
     }
    }


    Pozdrawiam
  • REKLAMA
  • #2 2442408
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Według mnie tryb CTC nie nadaje się do zmieniania wypełnienia. Do tego masz tryby PWM
  • REKLAMA
  • #3 2442589
    ToRii
    Poziom 11  
    Posty: 60
    Pomógł: 1
    Ocena: 1
    Cytat:
    Według mnie tryb CTC nie nadaje się do zmieniania wypełnienia. Do tego masz tryby PWM


    Ale ja wlasnie nie chce niczego zmieniac tylko ustalic wypelnienie wlasnie na stala wartosc rowna 50% i moje pytanie czy da sie to zrobic a trybie CTC?

    Jesli zas chodzi o tryb FastPWM to tez o tym myslalem jednak wzor na czestotliwosci OC2 wprowadzil mnie w watpliwosci bo wynosi on np: (strona 112 PDF)

    f = fclk_I/O / (N*256);

    no i z koro u mnie :

    f=40KHz
    fclk_I/0 = 8HHz

    no to jedyny parametr do zmiany to N, a zeby otrzymac na wyjsci f=40KHz to po podstawieniu danych N=0,78...A wiec chyba nie da sie tego uzyskac ? bo najlizsza wartosc N (jako pleskaler) to jeden.

    Reasumujac musze wygenerowac sygnal o f=40Khz i o wypelnieniu PWM = 50% a to wszytko po to aby wprawic w dgrania przetwornik ultradzwiekowy.

    Pozdrawiam
  • REKLAMA
  • #4 2445631
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    ToRii napisał:

    
    ...
     TCCR2 = (1<<WGM21)|(1<<CS20)|(1<<COM21);//ustawnie tryby CTC 
        // pleskalera na "1" ,and Toggle Oc2 On Compare Match
    


    Zalecam powtórną analizę dokumentacji proca ;)
    TCCR2 = (1<<WGM21)|(1<<CS20)|(1<<COM20);//ustawnie tryby CTC, pleskalera na "1" ,and Toggle Oc2 On Compare Match
    Piotrek

    PS
    A co to za procek ??
    Czyżby M8 ??
  • #5 2446207
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Przy wykorzystaniu timera1(16-bit) w trybie Fast PWM w mega8/16 (bo te znam) można bez problemu ustawic częstotliwość ustawiając odpowiednią wartość TOP(ICR1 lub OCR1A) dla licznika...
    W trybie CTC TOP to wartość w rejestrze ICR1...
REKLAMA