Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Timer_A w mikrokontroler msp430

atam87 21 Nov 2009 11:54 1980 9
  • #1
    atam87
    Level 10  
    Mam pytanie czy to zadziała?

    gdy ustawie zegar powiedzmy ACLK na 32kHz, którym będę taktował timer_A i ustawie wartość w CCR0 na 32765 czy daje mi to 1 sekunde ?!
  • #2
    User removed account
    User removed account  
  • #3
    atam87
    Level 10  
    u mnie wyglada to tak
    
    #include <msp430x14x.h>
    void main(){
    WDTCTL=WDTPW+WDTHOLD;
    BCSCTL=XTS;                            //ACLK low frequency
    TACCTL0=CCIE;                          //włączenie przerwania 
    TACTL=TACLR;                           //wyczyszczenie rejestru
    TACTL=TASSEL_1+MC_1;             //ACLK i UP mode
    _EINT();                                    //włączenie przerwań
    CCR0=32768;                             //0x8000
    }
    #pragma vector=TIMERA0_VECTOR           //wektor dla timer_A
    __interrupt void Timer_A(void){               //procedura przerwań
    }
    
    

    czy jak narazie jest to poprawne podejście?
  • #4
    User removed account
    User removed account  
  • #5
    atam87
    Level 10  
    
    #include <msp430x14x.h> 
    void main(){ 
    P2DIR|=0x02;
    WDTCTL=WDTPW+WDTHOLD; 
    BCSCTL=XTS;                            //ACLK low frequency 
    TACCTL0=CCIE;                          //włączenie przerwania 
    TACTL=TACLR;                           //wyczyszczenie rejestru 
    TACTL=TASSEL_1+MC_1;             //ACLK i UP mode 
    _EINT();                                    //włączenie przerwań 
    CCR0=32768;                             //0x8000 
    _BIS_SR(LPM3_bits+GIE);         
    } 
    #pragma vector=TIMERA0_VECTOR           //wektor dla timer_A 
    __interrupt void Timer_A(void){               //procedura przerwań 
     P2OUT^=0x02;
    }
    

    _BIS_SR(LPM0_bits+GIE) jest równoważny _EINT() i LPM0 prawda?
    no i chciałbym tą diode w koncu uruchomic :/ bo nie działa.
    
    #include <msp430x14x.h> 
    void main(){ 
    P2DIR|=0x02;
    WDTCTL=WDTPW+WDTHOLD;  
    TACCTL0=CCIE;                         //włączenie przerwania  
    TACCR0=50000;                             //0x8000 
    TACTL=TASSEL_2+MC_2;             //SMCLK i continue
    _BIS_SR(LPM0_bits+GIE);         
    } 
    #pragma vector=TIMERA0_VECTOR           //wektor dla timer_A 
    __interrupt void Timer_A(void){               //procedura przerwań 
     P2OUT^=0x02;
     TACCR0=50000;
    }
    


    Działa poprawnie :)
  • #6
    atam87
    Level 10  
    Dlaczego, gdy chcę ustawić by timer_a był taktowany zegarem aclk, ten nie działa poprawnie ? większość ustawien jest podobnych:
    
    void main(){
    WDTCTL=WDTPW+WDTHOLD;
    P2DIR|=0x02;
    BCSCTL1=XTS;
    TACCTL0=CCIE;
    TACCR0=32768
    TACTL=TASSEL_1+MC_1; 
    __BIS_SR(LPM3_bits+GIE);
    }
    #pragma vector=TIMERA0_VECTOR
    __interrupt void Timer_A(void){
    P2OUT^=0x02;
    //TACCR0+=32768;
    } 
    


    Przy takich ustawieniach dioda się zapala, ale nie mruga z częstotliwością 1 sekundy :/
  • #7
    User removed account
    User removed account  
  • #8
    Dr_DEAD
    Level 28  
    karol_85 wrote:
    Nie wiem do końca co robi ta komenda: BCSCTL1=XTS;

    No właśnie, przestawia oscylator na high frequency mode, a powinien być na low frequency mode.
  • #9
    atam87
    Level 10  
    
    #include <msp430x14x.h> 
    void main(){ 
    P2DIR|=0x02; 
    WDTCTL=WDTPW+WDTHOLD; 
    BCSCTL&=~XTS; 				//ACLK low frequency 
    TACCTL0=CCIE; 				//włączenie przerwania 
    TACTL=TACLR; 				//wyczyszczenie rejestru 
    TACTL=TASSEL_1+MC_1; 			//ACLK i UP mode  
    CCR0=32768-1; 
    _BIS_SR(LPM3_bits+GIE);  
    } 
    #pragma vector=TIMERA0_VECTOR 		//wektor dla timer_A 
    __interrupt void Timer_A(void){ 	//procedura przerwań 
     P2OUT^=0x02; 
    }
    


    To timer zapalał diodę, ale nie mrugała ona tak jak by nie wchodził w przerwanie ?! natomiast, gdy używałem do tego TASSEL_2+MC_2; czli SMCLK przy continue mode działał okay :/. Wyczytałem w gazenie EP, że tryby Up mode i Up/Down mode nei działają w trybie compare dla CCR0.
  • #10
    User removed account
    User removed account