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

Atmega 32 fast pwm tryb 14

INTOUCH 26 Lut 2011 18:47 2175 2
REKLAMA
  • #1 9208047
    INTOUCH
    Poziom 30  
    Witam.
    Napisałem kod do PWM w trybie 14.
    Przy ustawieniu OCR1A = TOP dioda na nóżce D5 powinna się świecić.
    Przy ustawieniu OCR1A = 0 dioda na nóżce D5 powinna się nie świecić.
    Świeci w obydwu przypadkach co tu jest nie tak.

    
    #define F_CPU	16000000UL	//1MHz zegar procesora
    #include <avr/io.h>
    #include <util/delay.h>
    #include <string.h>
    #include <stdlib.h>
    #include <avr\interrupt.h>
    
    
    
    #define        SET_BIT(r,x)        r|=_BV(x);//USTAW BIT W REJESTRZE
    #define        CLR_BIT(r,x)        r&=~_BV(x);//WYCZYŚĆ BIT W REJESTRZE
    #define        TOG_BIT(r,x)        r^=_BV(x); ///ZMIEŃ STAN BITU W REJESTRZE
    
    /*
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////modulacja PWM/////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //COM1A1:0  bity 7,6 w rejestrze TCCR1A -rodzaj wyścia trybu porównaia A
    //COM1B1:0  bity 6,4 w rejestrze TCCR1A -rodzaj wyścia trybu porównaia B 
    //FOC1A -wpisanie logicznej jedynki wymusza natychniastowe porówanie// w trybie PWM musi być ustawiony jako zero
    //FOC1B -wpisanie logicznej jedynki wymusza natychniastowe porówanie// w trybie PWM musi być ustawiony jako zero
    
    //WGM10 -\
    //WGM11 - \-bit w odpowiedni sposób ustawione ustalają tryb pracy licznika i 3 rodzaje PWM
    //WGM12 - /
    //WGM13 -/
    // dla trybu 14 bity muszą mieć następujące wartości logiczne WGM10="0", WGM11, WGM12, WGM13, muszą mieć stan logiczny "1"
    
    
    //CS12  -\
    //CS11  ----bity służą do wyboru sygnału zegarowego (CS12=0, CS11=0,CS10=1, -pełna prędkość bez preskalera)
    //CS10  -/
    
    */
    
    
    #define TOP     0x0FFF  //maksymalna rozdielczoćś rtybu PWM 12 bit
    
    
    
    void PWMinit();
    
    void PWMinit()// inicjalizowanie trybu FAST PWM (Tryb 14 rejestru ICR1)
    {
    
    // ustawienie bitów w rejestrze TTCR1A
    SET_BIT(TCCR1A,COM1A1); //--Jeśi conajmniej jeden z tych bitów jest ustawiony  to wyjście układu porównującego w liczniku zostaje dołączone do 
    CLR_BIT(TCCR1A,COM1A0); ///   końcówki portu I/O. Rejestr kierunku portu DDR musi być ustawiny jako wyjśćie
    CLR_BIT(TCCR1A,COM1B1); // odłączenie wyścia trybu porówniania B
    CLR_BIT(TCCR1A,COM1B0); // odłączenie wyścia trybu porówniania B
    CLR_BIT(TCCR1A,FOC1A);  // Likwidacja wymuszenia natychniastowego porównania A
    CLR_BIT(TCCR1A,FOC1B);  // Likwidacja wymuszenia natychniastowego porównania B
    SET_BIT(TCCR1A,WGM11);  // konfiguracja trybu PWM
    CLR_BIT(TCCR1A,WGM10);  // konfiguracja trybu PWM
    
    // ustawienie bitów w rejestrze TTCR1B
    CLR_BIT(TCCR1B,COM1B0); // nie wykorzysrujemy odkłucenia wejścia przechwytującego
    CLR_BIT(TCCR1B,5);      // zerowanie bitu 5 ustawieni jako zero (rezerwa do wykorzystania w przysłaych układach
    SET_BIT(TCCR1B,WGM13);  // konfiguracja trybu PWM
    SET_BIT(TCCR1B,WGM12);  // konfiguracja trybu PWM
    CLR_BIT(TCCR1B,CS12);   // ustawienie trybu zliczania
    CLR_BIT(TCCR1B,CS11);   // ustawienie trybu zliczania
    SET_BIT(TCCR1B,CS10);   // ustawienie trybu zliczania
    
    
    ICR1 =TOP;     //ROZDIELCZOŚĆ 12 bit -stała częstotliwość PWM
    DDRD=0xFF;			//binarnie 1111 1111 - wyjścia 
    
    
    }
    
    
    
    
    
    
    
    //***************************program główny*******************************************************************//
    //
    
    int main (void)
    {
    
    void PWMinit();
    
    
    DDRD = (1 << PD5) ; //PD1 = output
    
    
    OCR1A = TOP ;
    
    
    
    while(1)
    {
    }
    
    
    return 0;
    }
  • REKLAMA
  • #3 9211165
    INTOUCH
    Poziom 30  
    Głupie niedopatrzenie.
    Dzięki.
    Działa.
REKLAMA