EmbeddedRelated.com
Forums

msp430fr6989

Started by sonline 7 years ago576 views

I have the chip number MSP430FR6989 and I want to use it to read 10 analog DC signals then do some processing (multiply them by certain factors) after that I want to convert them back to analog using PWM and RC filter, my issue is in the second part , how to use timers( set period , duty cycles) of the MSP430 to produce PWMs from the analog inputs.  

This is the code:

#include <msp430.h>
#define ACLK 0x0100 // Timer ACLK source
#define UP 0x0010 // Timer UP mode
#define ENABLE_PINS 0xFFFE // Required to use inputs and outputs
#define ENABLE_PINS   0xFFFE // Enables inputs and outputs
void ADC_SETUP(void); // Used to setup ADC12 peripheral
const int x1=1;
const int x2=1;
volatile int multiplied_value,duty;

main()
{
  PM5CTL0 = ENABLE_PINS; // Enable inputs and outputs
P1DIR =BIT0; // Set RED LED to output


ADC_SETUP(); // Sets up ADC peripheral
while(1)
{
ADC12CTL0 = ADC12CTL0 | ADC12ENC; // Enable conversion
ADC12CTL0 = ADC12CTL0 | ADC12SC; // Start conversion
while  ( ADC12BUSY == 1){
multiplied_value = (ADC12MEM0);
if (multiplied_value > 0x800) // If input > 1.65V
{
P1OUT = BIT0; // Turn on red LED
}
else // Else input <= 1.65V
{
P1OUT = 0x00; // Turn off red LED
}


P1DIR |= BIT5;             // P1.5 to output
P1SEL1 |= BIT5;             // P1.5 to TA0.1


 TA0CCTL1 = OUTMOD_7;          // CCR1 reset/set
 TA0CCR1 = multiplied_value*65536/3.3 ;
 duty=TA0CCR1;// CCR1 PWM duty cycle
 TA0CCR0 =1000;             // PWM Period
 TA0CTL = TASSEL_2 + MC_1;   // SMCLK, up mode

 _BIS_SR(LPM0_bits);        // Enter LPM0
}
}
}
void ADC_SETUP(void)
{
#define ADC12_SHT_16 0x0200 // 16 clock cycles for sample and hold
#define ADC12_ON 0x0010 // Used to turn ADC12 peripheral on
#define ADC12_SHT_SRC_SEL 0x0200 // Selects source for sample & hold
#define ADC12_12BIT 0x0020 // Selects 12-bits of resolution
#define ADC12_P92 0x000A // Use input P9.2 for analog input
//#define ADC12_P43 0x000A
//#define ADC12_P32 0x000A
//#define ADC12_P93 0x000A
//#define ADC12_P14 0x000A
//#define ADC12_P20 0x000A
//#define ADC12_P41 0x000A
ADC12CTL0 = ADC12_SHT_16 | ADC12_ON ; // Turn on, set sample & hold time
ADC12CTL1 = ADC12_SHT_SRC_SEL; // Specify sample & hold clock source
ADC12CTL2 = ADC12_12BIT; // 12-bit conversion results
ADC12MCTL0 = ADC12_P92; // P9.2 is analog input
//ADC12MCTL1 = ADC12_P43;
}

I have the voltmeter, when I measure the frquency at the pin1.5 it gives me a number reanges between 14kHz to 0.11..   

I'm not sure if I used PWM correctly?