Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all articles
Browse latest Browse all 22211

Problem stopping a PWM on the MSP430G2231

$
0
0

Hello everyone,

this is my first post, I hope someone can help me. I am using the MSP430G2231 for a project and what I am trying to do here is test part of my code that starts and stops a PWM signal that will control a servo.

I was trying to figure out why the PWM nevers stopped using the LED on the Launchpad. No matter what i did it wasn't stopping but instead it was going to full on (as if it was going to 100% duty cycle). during a test I was looking something up without pausing the debugger and when I saw the led again it was working fine. For clarity I made a video illustrating this behaviour. The code I am running is below and there is no input from me,just time. Link to the video (Please visit the site to view this video)  the code: 

#include <msp430g2231.h>

/* Definitions */
#define SerPin		BIT6		// Pin used for servo
#define PWM_Period  	20000		// Clock/PWM_Freq 
#define Min_Duty	700 	 	// Minimum duty cycle for the servo
#define MaxDuty	 	2300		// Minimum duty cycle for the servo 
#define Min_Step 	50		// Minimum servo movement (10*servo_deadband to be sure)


/*  Global Variables  */
int Last_Position = 700; 				//Last calculated position

/*  Function Definitions  */
void Start_PWM(void);
void Stop_PWM(void);


void main(void) {

	WDTCTL = WDTPW + WDTHOLD;		// Stop WDT
	BCSCTL1 = CALBC1_1MHZ;			// set the DCO @ 1 MHz
	DCOCTL = CALDCO_1MHZ;			// "-----------------"

		for (;;)
		{
			Start_PWM();
			__delay_cycles(1000000);
			Stop_PWM();
			__delay_cycles(1000000);
		}
	

}//main


/* PWM Start Function */
void Start_PWM(void) {

	TACCTL0 &= ~(CCIE);			// Disable interrupts for Timer_A
	TACCR0 = PWM_Period-1;			// Controls the PWM frequency
	TACCR1 = Last_Position;			// Set duty cycle 0 ≤ TACCR1 ≤ (TACCR0+1)
	TACTL = TASSEL_2 + ID_0 + MC_1;		// SMCLK, no division, Up Mode
	TACCTL1 = OUTMOD_7;			// Reset/Set: Sets at TACCR0, resets at TACCR1 for positive PWM
	P1DIR |= SerPin;			// Servo pin = output
	P1SEL |= SerPin;			// Servo pin = TA1 output

}//Start_PWM

/* PWM Stop Function */
void Stop_PWM(void) {

	TACTL &= ~MC_3;				// Stop

}//Stop_PWM

Any help will be greatly appreciated!


Viewing all articles
Browse latest Browse all 22211

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>