Generate PWM Signal by MSP430

Hi there,

Does anyone know how to generate PWM from MSP430 by using either Timer_A or Timer_B?

Well i need 2 PWM Signal, where their frequency are adjustable.

The first PWM Signal, PWM_1, i need is 300Hz and the other, PWM_2, is 8 times of the first signal.

And also can anyone tell me how to calculate the value of CCR0 and CCR1?

Apart of that, how can the frequency be adjusted? do i need to use anither CPU Registers?

By the way, i am using ACLK for both Timers and The output mode for both are Mode7.

I am using ASSEMBLY CODE

Thank you very much

Have you read the Timer_A and Timer_B chapters in the User Guide?

Leon

Well, yes!

Here is part of my code for my PWM_1, where R7, and R6 determine the value which are adjustable

T_A

BIS OUTMOD_7, &TACCTL0 ; set output modeofT_AtoRESET/SET

MOV R7, &TACCR0 ; implementation R7 to TACCR0

MOV R6, &TACCR1 ; implementation R6 to TACCR1

MOV MC_1, &TACTL ; start Timer A in UpMode

BIS TAIE, &TACTL ; enable interrupt von Timer_A

bis.w #LPM3,SR ; Remain in LPM3

You’ll find some examples in the code supplied with slac010g, on the TI web site. Here’s one of them:

;******************************************************************************
;   MSP430x11x1 Demo - Timer_A, PWM TA1-2, Up/Down Mode, DCO SMCLK
;
;   Description: This program generates two PWM outputs on P1.2,3 using
;   Timer_A configured for up/down mode. The value in CCR0, 128, defines
;   the PWM period/2 and the values in CCR1 and CCR2 the PWM duty cycles.
;   Using ~800kHz SMCLK as TACLK, the timer period is ~320us with a 75%
;   duty cycle on P1.2 and 25% on P1.3.
;   SMCLK = MCLK = TACLK = default DCO ~800kHz.
;
;                MSP430F1121
;             -----------------
;         /|\|              XIN|-
;          | |                 |
;          --|RST          XOUT|-
;            |                 |
;            |         P1.2/TA1|--> CCR1 - 75% PWM
;            |         P1.3/TA2|--> CCR2 - 25% PWM
;
;   M. Buccini
;   Texas Instruments Inc.
;   Feb 2005
;   Built with IAR Embedded Workbench Version: 3.21A
;*****************************************************************************
#include  <msp430x11x1.h>
;------------------------------------------------------------------------------
            ORG     0F000h                  ; Program Start
;------------------------------------------------------------------------------
RESET       mov.w   #300h,SP                ; Initialize stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
SetupP1     bis.b   #00Ch,&P1DIR            ; P1.2 and P1.3 output
            bis.b   #00Ch,&P1SEL            ; P1.2 and P1.3 TA1/2 otions
SetupC0     mov.w   #128,&CCR0              ; PWM Period/2
SetupC1     mov.w   #OUTMOD_6,&CCTL1        ; CCR1 toggle/set
            mov.w   #32,&CCR1               ; CCR1 PWM Duty Cycle	
SetupC2     mov.w   #OUTMOD_6,&CCTL2        ; CCR2 toggle/set
            mov.w   #96,&CCR2               ; CCR2 PWM duty cycle	
SetupTA     mov.w   #TASSEL_2+MC_3,&TACTL   ; SMCLK, updown mode
                                            ;					
Mainloop    bis.w   #CPUOFF,SR              ; CPU off
            nop                             ; Required only for debugger
                                            ;
;------------------------------------------------------------------------------
;           Interrupt Vectors
;------------------------------------------------------------------------------
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ;
            END

Leon

I was able to do it with a crystal if that helps…

win_curese:
Hi there,

Well i need 2 PWM Signal, where their frequency are adjustable.

The first PWM Signal, PWM_1, i need is 300Hz and the other, PWM_2, is 8 times of the first signal.

Apart of that, how can the frequency be adjusted? do i need to use anither CPU Registers?

It sounded that you want to modulate the frequency, not the pulse width.

PWM stands for “Pulse Width Modulation”