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

[AT90USB1287] [C] Generator na OC.2A wyliczenie f

drednot 28 Gru 2008 13:53 809 0
  • #1 5912901
    drednot
    Poziom 15  
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    
    
    int main(void)
    {
    //	PORTD |= (0<<PD7); //led ON
    //	DDRD |= (1<<DDD7); //PD7 jako wyjście
    	
    	DDRB |= (1<<DDB4); //PB4 (OC.2A) jako wyjście
    	PORTB |= (1<<PB4); //
    
    
    
    	//PRR0 |= (1<<PRTWI) | (1<<PRADC);  //wylaczymy twi i adc
    
    
    	/* ---------generator 4MHz ; -------- */
    
    	TIMSK2 |= (1<<OCIE2A) | (0<<TOIE2); //zezwolenie na przewania od porównania i przepełnienia
    	TCCR2A |= (1<<COM2A0) |(1<<WGM21) ; // toggle OC2A; tryb CTC
    	TCCR2B |= (1<<CS22)   |(1<<CS21)  |(0<<CS20) ; //presk 
    
    	OCR2A = 30; //przepełnienie przy 
    	
    
    	SREG = (1<<SREG_I);  // 
    
    
    
    	while(1)
    	{}
    }
    


    Problem jest z generowaniem założonego przebiegu na wyjściu OC.2A.
    Po załadowaniu parametrów np. dla 1kHz z wzoru:

    [AT90USB1287] [C] Generator na OC.2A wyliczenie f

    N=256; OCR2A=30
    Powinno być 1008Hz a wg miernika mam 120Hz. Błąd jest zawsze duży. Niestety nie mam oscyloskopu. Docelowo chciałbym mieć 4MHz czyli OCR2A=1 i preskaler =1 ale to pózniej.
    Tryb licznika to CTC; COM1:0 = 1
    Mam błąd w obliczeniach?
    pozdrawiam

    ---------- OK nie wywaliłem fabrycznego dzielnika przez 8 (CKDIV8).
    Teraz jest dobrze :)
REKLAMA