Jonas F.
Jonas F.

Reputation: 1

MSP430 UART receiving a string - TX problem

Using MSP430F6736A embedded programming. Code written in Code Composer Studio. I have a problem in my code, but i have no idea what i can do to fix it. When I compile the program in code composer, works well but UART are sending to PC just ".ø€.ø€.€€x" that means i'm getting only strange charracters

#include "msp430g2553.h"
#include <stdio.h>

float RLDR=0, lux=0, v0=0;
unsigned int ADC10_vetor[16]={0};
unsigned int sum=0;
unsigned char i=0;
unsigned char TX_data[32], tx_index = 0, lux_int =0;


void ini_ucon(void);
void ini_p1_p2(void);
void ini_Timer0(void);
void ini_ADC10(void);
void ini_USCI_UART(void);


void ini_ucon(void){
WDTCTL = WDTPW | WDTHOLD;
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL2 = DIVS0 + DIVS1;  //SMCLK = 1MHz
__enable_interrupt();
}

void ini_p1_p2(void){
    P1DIR = 0xFF;
    P1OUT = 0x00;
    P2DIR = 0xFF;
    P2OUT = 0x00;
}


void ini_Timer0(void){
    TA0CTL = TASSEL1 + ID1 + ID0 + MC0;   //SMCLK = 1MHz/8 = 125000
    TA0CCTL1 = OUTMOD0 + OUTMOD1 + OUTMOD2 + OUT;
    TA0CCR0 = 62499; //2Hz = 0.5 secs. , TA0CCR0 = 0.5*125000 - 1 = 62499
    TA0CCR1 = 31249; //PWM = 50%
}

void ini_ADC10(void){
     ADC10CTL0 = ADC10SHT1 + MSC + ADC10ON + ADC10IE;
     ADC10CTL1 = INCH0 + INCH2 + SHS0 + ADC10SSEL1 +  CONSEQ1;
     ADC10AE0 = BIT5; //P1.5 para A5
     ADC10DTC0 = 0;
     ADC10DTC1 = 16;
ADC10SA = &ADC10_vetor[0];
     ADC10CTL0 |= ENC;
}

int main(void){
    ini_ucon();
    ini_p1_p2();
    ini_Timer0();
    ini_ADC10();
    ini_USCI_UART();

    while(1){
    }
}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_RTI(void){
ADC10CTL0 &= ~ENC;
soma = 0;
for(i=0;i<16;i++){
    sum = sum + ADC10_vetor[i];
}
sum = sum >> 4;
    //RLDR = (42625000)/(3*sum)-10000;
    //lux = 500/(RLDR/1000);
    //v0=5*(sum/(sum+10000));

    v0=sum*(3.6/1024);
    RLDR = (10000*(5-v0))/v0;
    lux = (500/(RLDR/1000));
    lux_int = (unsigned char) lux;
    sprintf(&TX_data[0], "LUX = %d \n", lux_int);
    UCA0TXBUF = TX_data[0];
          tx_index++;

    ADC10SA = &ADC10_vetor[0];
    ADC10CTL0 |= ENC; 

}

#pragma vector=USCIAB0TX_VECTOR
__interrupt void RTI_USCI_UART(void)
{
    IFG2 &= ~UCA0TXIFG;

    if(TX_data[tx_index] == '\0'){
        tx_index = 0;
    }else{
        if(tx_index >= 32){
            tx_index = 0;
        }else{
            UCA0TXBUF = TX_data[tx_index];
            tx_index++;
        }
    }
}

void ini_USCI_UART(void){

    UCA0CTL1 |= UCSWRST;

    UCA0CTL0 = 0;

    UCA0CTL1 = UCSSEL0 + UCSSEL1 + UCSWRST;

    UCA0BR0 = 0xA0;
    UCA0BR1 = 0x01;

    UCA0MCTL = UCBRS1 + UCBRS2;

    UCA0STAT = 0;

    P1SEL |= BIT2;
    P1SEL2 |= BIT2;

    UCA0CTL1 &= ~UCSWRST;

    IFG2 &= ~UCA0TXIFG;
    IE2 |= UCA0TXIE;
}

Does anyone have an idea how to fix this?

Upvotes: 0

Views: 169

Answers (0)

Related Questions