Jump to content

squalo

Members
  • Content Count

    2
  • Joined

  • Last visited

  1. Hi, i'm trying to start a pwm signal and stop it after 50 miliseconds. But i can't because i can't use timer interrupt vector properly. my count never increments. Here is my code #include <msp430.h> #include <msp430g2553.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; } }
  2. Hello, sorry for my bad english. i want produce PWM signal in 38khz. (my reciever is tsop1838 and transmitter is TSAL6200). Firstly, leds on the reciever side are blink. But a few seconds later, they turn off. What's the problem? My codes: //Transmitter #include <msp430.h> int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop the Watch dog timer while(1) { P1DIR |= 0x0C; // P1.2 and P1.3 output P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 options CCR0 = 12; // PWM Period/2 CCTL1 = OUTMOD_6; // CCR1 toggle/set CCR1 = 6; // CCR1 PWM duty cycle TACTL = TASSEL_2 + MC_3; // SMCLK, up-down mode } return 0; } //Rece'ver #include "io430.h" int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //Stop WDT BCSCTL1 = CALBC1_8MHZ; //Set DCO to 8Mhz DCOCTL = CALDCO_8MHZ; P1DIR =0xFF; P1OUT =0x00; P2DIR &= ~BIT0; while(1) { if(P2IN == 0x00) // IF IR IS HIGH { P1OUT =0xFF; __delay_cycles(1000000);//GIVE SOME DELAY } else { P1OUT =0x00; __delay_cycles(1000000); // GIVE SOME DELAY } } return 0; }
×