10 years, 7 months ago.

LabVIEW and mbed serial interface problem

// LabVIEW and mbed serial interface test
#include "mbed.h"
#define samplePeriod 40         // 40 ms
#define sampleRate 25           // 25 Hz

Serial pc (USBTX, USBRX);

int main() {
    pc.baud (19200); 
    Timer timerPeriod; 
    timerPeriod.start();
    while (1) {
        timerPeriod.reset();
        pc.printf("%f,%f,%f,%d\n", 0.333333, 0.555555, 0.777777, sampleRate);        
        while (timerPeriod.read_ms() < samplePeriod);                  
    }
}

When the arguments in the printf statement in the above program are received in LabVIEW on the Array of String and Array of Number interfaces of the mbed-read.vi, the first argument is quite often very strange. The value could, for example, be 70.333.333. The last three arguments are always received correctly on the mbed-read.vi interface.

Any ideas on how to solve the problem?

Best regards Henrik Larsen

2 Answers

10 years, 7 months ago.

A pragmatic solution would be just to add a dummy character before your numeric values, and just ignore it on the labview side.

To actually investigate to problem:

1) Ensure that the serial port settings are the same on both sides. Not just the baud rate, but the # of data bits and stop bits and the parity setting.

2) Try slower and faster baud rates and see if the problem persists

3) Download a serial port monitor program for the PC side. These programs "sniff" the serial traffic and let you see what bytes are being seen at the serial port.

Not sure what you mean by "mbed-read.vi interface", but if this is some other client and it gets the data OK, that seems to indicate that the problem is not on the mbed side, it's on the labview side.

Accepted Answer

Thanks Dave. I have once again checked my data communication setting; they are correct and the test program runs fine with TeraTerm. By mbed-read.vi I refer to the LavbVIEW serial communication described in http://mbed.org/cookbook/Interfacing-with-LabVIEW. I think you are wright, the problem relates most likely LabVIEW or more specifically to either the unit mbed-read or the unit Serial Port VISA. Henrik

posted by Henrik Larsen 16 Oct 2013

Ah - "vi" as in "virtual instrument" in the LabVIEW parlance. You should download a serial port monitor program and use it to look at what bytes are really going across the wire.

I believe I have used this one: http://www.serial-port-monitor.com

But people also recommend this one: http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx

This will tell you which side of the system is making the mistake.

posted by Dave Bracey 16 Oct 2013
10 years, 7 months ago.

I would try, 0%3.3f for the first variable, forcing out an extra zero as text, also, I always add \n\r, so it works in most terminal programs.

as a test replace the first result with text..

"0.3333, %3.3f. .........

hope this helps,

Ceri

Thanks Ceri. I will use your solution and then delete the first (dummy) argument in my LabVIEW arrays and waveform charts.

Henrik

posted by Henrik Larsen 14 Oct 2013