Quantcast
Channel: MSP430 Technical Forums
Viewing all articles
Browse latest Browse all 2077

MSP430F5529LP ADC + UART help! (energia)

$
0
0

Hello!

 

I am a fresh beginner in the domain of embedded systems and this MSP430F5529 is my very first development board. I am now trying to make an ADC conversion and send it through the UART to try a signal treatment algorithm with real-world values.

 

I used an example code in Energia that i modified a little bit:

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // Comment: I see many people preferring the 115200 BR for this board.
  // Is there a particular reason for this choice?
  
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin A3:
  int sensorValue = analogRead(A3);
  // Comment: I think the F5529 actually writes its ADC results on 12 bits.
  // Should i try to use a long, 16-bit integer? 

  // print out the value you read:
  Serial.println(sensorValue);
}

The Energia console gives me expected readings, using an AA battery and an old function generator. For my first UART tests, I tried using Processing, a multipurpose javascript program that i use for drawing. 

import processing.serial.*;

float[] y; // Array to contain the values read through the UART
Serial myPort;  // Create object from Serial class
int val;      // Data received from the serial port

void setup() 
{
  // I define the size of the drawing board to be 600 X 400 pixels.
  size(600, 400);
  // I initialize my 'y' array
  y = new float[width];
  for(int i = 0; i<width; i++){
    y[i] = 0.0;
  }

  // This is to open the correct port. The number in square brackets might vary.
  String portName = Serial.list()[3];
  // Here i define the baudrate, so it's the same as the one in Energia.
  myPort = new Serial(this, portName, 9600);
}

void draw()
{
  // This draws a white background
  background(255);
  // This tells that i want to draw with the color black.
  stroke(0); 
  for (int i = 0; i<width; i++){
    // For every entry in my 'y' array, I draw a black dot.
    point(i,y[i]);
  }
  // I read a new value from the UART and feed it to my "update" routine.
  val = myPort.read();
  update(val);
}

void update(int value){
  // I shift every value to the left in my array.
  // This is to get a "strip-chart" feeling to my graph.
  for (int i = 0; i<width-1; i++){
    y[i] = y[i+1];
  }
  // For the last value, i use the value read from the serial port.
  // I convert it so that i have a correspondance:
  // min(UART) = bottom of screen, max(UART) = 2^12 - 1 = 4095 = top of screen.
  y[width-1] = (float)height - value * (float)height / 4095.0;
  // I also print the UART read value to this software's console for debugging.
  print(value,"\n");
}

What prints on the console is a repetitive pattern of something like 13-10-48-13-10-48-etc. when my pin is grounded. When it's not grounded i get pretty much the same exact numbers with a little bit more variations.

 

At first I thought it was a long int problem with the UART, beacause of the 12-bit ADC conversion, but i'm not so sure anymore.

 

Help me!

Thank you very much!

Attached Files


Viewing all articles
Browse latest Browse all 2077

Trending Articles