Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I need help creating a program in C. Involving Msp430g2553 & servo motor. The pi

ID: 3913172 • Letter: I

Question

I need help creating a program in C. Involving Msp430g2553 & servo motor. The picture below requires the guide lines. Thank you! I need help creating a program in C. Involving Msp430g2553 & servo motor. The picture below requires the guide lines. Thank you! Pulse Width Modulation Goals: Use Port and Timer Interrupts with PWM (Pulse Width Modulation) to sweep the single-bladed arm of the SG90 back and forth between 0 and 180 degrees .Use the on-board button to start and stop the sweep. Use the on-board LEDs to indicate the state of the motor; red for stop, green for start.

Explanation / Answer

#include "msp430g2553.h"

#include "lcd.h"

#define LED1 BIT0

int itoa(int n, char* out);

void reverse(char* str, int length);

//int temp;

char buffer[33];

char buffer2[33];

char buffer3[33];

int itoa(int n, char* out)

{

// if negative, need 1 char for the sign

int sign = n < 0? 1: 0;

int i = 0;

if (n == 0) {

out[i++] = '0';

} else if (n < 0) {

out[i++] = '-';

n = -n;

}

while (n > 0) {

out[i++] = '0' + n % 10;

n /= 10;

}

out[i] = '';

reverse(out + sign, i - sign);

return 0;

}

void reverse(char* str, int length){

int i = 0, j = length-1;

char tmp;

while (i < j) {

tmp = str[i];

str[i] = str[j];

str[j] = tmp;

i++; j--;

}

}

int main(void)

{

WDTCTL = WDTPW + WDTHOLD; //Stop WDT

BCSCTL1 = CALBC1_8MHZ; //Set DCO to 8Mhz

DCOCTL = CALDCO_8MHZ; //Set DCO to 8Mhz

P1DIR &= ~0xF0; // set pin direction for led

P1DIR |= BIT0;

P2DIR&=~BIT3;

InitializeLcm(); //INITIALIZE LCD

__delay_cycles(1000000);

__enable_interrupt();

int value;

char *text;

while(1)

{

ADC10CTL1 = INCH_3 + ADC10DIV_3 ;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;

ADC10AE0 |= BIT3;

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled

value = ADC10MEM;

itoa(value,buffer);

ClearLcmScreen();

PrintStr("X="); //DISPLAY ON LCD

PrintStr(buffer);

__delay_cycles(100000); // Wait for ADC Ref to settle

ADC10CTL1 = INCH_4 + ADC10DIV_3 ;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;

ADC10AE0 |= BIT4;

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled

value = ADC10MEM;

itoa(value,buffer2);

ClearLcmScreen();

PrintStr("Y="); //DISPLAY ON LCD

PrintStr(buffer2);

__delay_cycles(100000);

ADC10CTL1 = INCH_5 + ADC10DIV_3 ;

ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE;

ADC10AE0 |= BIT5;

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled

value = ADC10MEM;

itoa(value,buffer3);

ClearLcmScreen();

PrintStr("Z="); //DISPLAY ON LCD

PrintStr(buffer3);

__delay_cycles(100000);

}

}

// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR (void)

{

__bic_SR_register_on_exit(CPUOFF); // Return to active mode

P1OUT ^= LED1;

}

// end of 3axisaccelerometer.c file

//…………………………………………………………………………………………..

// create file named called lcd.c and paste below given program

#include "msp430g2553.h"

#include "lcd.h"

#define LCM_DIR P2DIR

#define LCM_OUT P2OUT

// Define symbolic LCM - MCU pin mappings

// We've set DATA PIN TO 4,5,6,7 for easy translation

//

#define LCM_PIN_RS BIT0 // P2.0

#define LCM_PIN_EN BIT1 // P2.1

#define LCM_PIN_D7 BIT3 // P2.3

#define LCM_PIN_D6 BIT2 // P2.2

#define LCM_PIN_D5 BIT5 // P2.5

#define LCM_PIN_D4 BIT4 // P2.4

#define LCM_PIN_MASK ((LCM_PIN_RS | LCM_PIN_EN | LCM_PIN_D7 | LCM_PIN_D6 | LCM_PIN_D5 | LCM_PIN_D4))

#define FALSE 0

#define TRUE 1

//

// Routine Desc:

//

// This is the function that must be called

// whenever the LCM needs to be told to

// scan it's data bus.

//

// Parameters:

//

// void.

//

// Return

//

// void.

//

void PulseLcm()

{

//

// pull EN bit low

//

LCM_OUT &= ~LCM_PIN_EN;

__delay_cycles(200);

//

// pull EN bit high

//

LCM_OUT |= LCM_PIN_EN;

__delay_cycles(200);

//

// pull EN bit low again

//

LCM_OUT &= (~LCM_PIN_EN);

__delay_cycles(200);

}

//

// Routine Desc:

//

// Send a byte on the data bus in the 4 bit mode

// This requires sending the data in two chunks.

// The high nibble first and then the low nible

//

// Parameters:

//

// ByteToSend - the single byte to send

//

// IsData - set to TRUE if the byte is character data

// FALSE if its a command

//

// Return

//

// void.

//

void SendByte(char ByteToSend, int IsData)

{

//

// clear out all pins

//

LCM_OUT &= (~LCM_PIN_MASK);

//

// set High Nibble (HN) -

// usefulness of the identity mapping

// apparent here. We can set the

// DB7 - DB4 just by setting P1.7 - P1.4

// using a simple assignment

//

LCM_OUT |= (ByteToSend & 0xF0);

if (IsData == TRUE)

{

LCM_OUT |= LCM_PIN_RS;

}

else

{

LCM_OUT &= ~LCM_PIN_RS;

}

//

// we've set up the input voltages to the LCM.

// Now tell it to read them.

//

PulseLcm();

//

// set Low Nibble (LN) -

// usefulness of the identity mapping

// apparent here. We can set the

// DB7 - DB4 just by setting P1.7 - P1.4

// using a simple assignment

//

LCM_OUT &= (~LCM_PIN_MASK);

LCM_OUT |= ((ByteToSend & 0x0F) << 4);

if (IsData == TRUE)

{

LCM_OUT |= LCM_PIN_RS;

}

else

{

LCM_OUT &= ~LCM_PIN_RS;

}

//

// we've set up the input voltages to the LCM.

// Now tell it to read them.

//

PulseLcm();

}

//

// Routine Desc:

//

// Set the position of the cursor on the screen

//

// Parameters:

//

// Row - zero based row number

//

// Col - zero based col number

//

// Return

//

// void.

//

void LcmSetCursorPosition(char Row, char Col)

{

char address;

//

// construct address from (Row, Col) pair

//

if (Row == 0)

{

address = 0;

}

else

{

address = 0x40;

}

address |= Col;

SendByte(0x80 | address, FALSE);

}

//

// Routine Desc:

//

// Clear the screen data and return the

// cursor to home position

//

// Parameters:

//

// void.

//

// Return

//

// void.

//

void ClearLcmScreen()

{

//

// Clear display, return home

//

SendByte(0x01, FALSE);

SendByte(0x02, FALSE);

}

//

// Routine Desc:

//

// Initialize the LCM after power-up.

//

// Note: This routine must not be called twice on the

// LCM. This is not so uncommon when the power

// for the MCU and LCM are separate.

//

// Parameters:

//

// void.

//

// Return

//

// void.

//

void InitializeLcm(void)

{

//

// set the MSP pin configurations

// and bring them to low

//

LCM_DIR |= LCM_PIN_MASK;

LCM_OUT &= ~(LCM_PIN_MASK);

//

// wait for the LCM to warm up and reach

// active regions. Remember MSPs can power

// up much faster than the LCM.

//

__delay_cycles(100000);

//

// initialize the LCM module

//

// 1. Set 4-bit input

//

LCM_OUT &= ~LCM_PIN_RS;

LCM_OUT &= ~LCM_PIN_EN;

LCM_OUT = 0x20;

PulseLcm();

//

// set 4-bit input - second time.

// (as reqd by the spec.)

//

SendByte(0x28, FALSE);

//

// 2. Display on, cursor on, blink cursor

//

SendByte(0x0E, FALSE);

//

// 3. Cursor move auto-increment

//

SendByte(0x01, FALSE);

}

//

// Routine Desc

//

// Print a string of characters to the screen

//

// Parameters:

//

// Text - null terminated string of chars

//

// Returns

//

// void.

//

void PrintStr(char *Text)

{

char *c;

c = Text;

while ((c != 0) && (*c != 0))

{

SendByte(*c, TRUE);

c++;

}

}

//

// Routine Desc

//

// main entry point to the sketch

//

// Parameters

//

// void.

//

// Returns

//

// void.

//

// end of lcd.c file

//…………………………………………………………………………………………..

// create file named called lcd.h and paste below given program

void PulseLcm();

void SendByte(char ByteToSend, int IsData);

void LcmSetCursorPosition(char Row, char Col);

void ClearLcmScreen();

void InitializeLcm(void);

void PrintStr(char *text);

// end of lcd.h file

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote