Connect with us

I can't stop PWM signal. It is always active.

Discussion in 'Microcontrollers, Programming and IoT' started by Squalo, Apr 30, 2019.

  1. Squalo

    Squalo

    1
    0
    Apr 30, 2019
    Hi, i am new with MSP430.
    I would like to create a PWM signal when button is pressed to transmit IR signal and stop it after 50 miliseconds. But i cannot stop it.

    Here is my code

    #include <msp430.h>

    void startPWM(void);

    unsigned char counter=0;

    void stopPWM(void);

    int main(void)
    {
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
    BCSCTL1 = CALBC1_1MHZ; // Set range
    DCOCTL = CALDCO_1MHZ;
    CCTL0 = CCIE;

    P2DIR |= BIT2; //IR transmitter
    P2SEL |= BIT2;// Select pwm pin (transmitter)

    P2OUT=0x00;


    while(1){

    if((P1IN & BIT4)!=BIT4) //button is pressed
    {
    startPWM(); //send pwm
    stopPWM(); // stop after 50 ms
    }

    }

    }

    void startPWM(void) // pwm signal
    {
    TA1CCR0 = 26-1; // Period Register
    TA1CCR1 = 13; // 50% dutycycle
    TA1CCTL1 |= OUTMOD_6; // TA1CCR1, Reset/Set
    TA1CTL = TASSEL_1 + MC_1 + TACLR;
    }


    void stopPWM(void) // trying to stop after 50 ms
    {
    CCR0 = 5000; // CCR0 5 ms
    TACTL = TASSEL_2 + MC_2; //
    }

    #pragma vector=TIMER0_A0_VECTOR // Timer0_A0
    __interrupt void Timer_A (void)
    {
    if(++counter==10){ // is counter 10 (5*10=ms)
    TA1CCR1 = 0; ; // Stop timer so it can't send PWM signal
    counter = 0;
    }
    }
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-