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”