Teensy 3.0 utilizing all hardware serial

Status
Not open for further replies.

tunahammer

Active member
Good day!

edit:
The point of this is to have 3 Teensy's reading from many rs232 devices (i have a max3232 chip in front of this) and then dump that data to a Due for further processing. Thanks in advance


I am trying to pull in from 2 serial ports (Serial2 and Serial3) a constantly changing stream of 6 bytes. Each set of 6 bytes is separated by a CR or DEC 13. There is no "newline" char to know if I've hit the beginning of a line or not.

After reading that data and storing into a char array, I am then checking to see if the last byte of the array holds my CR to determine if it was a clean transmission (help here to see if I should be doing this differently wouldn't be disregarded, maybe I should check each char of the array to determine if it holds the CR to know if the transmission got scrambled) if it does I am then pushing both sets of 6 bytes out of the Serial1 port.

I am having trouble with stability of this transmission, my serial monitor will often read that the data is coming out incorrectly. It is especially bad if I try to make Serial1 a faster baud than 2&3. I would love to have it output faster as it will need to output the incoming data from both ports.


Output from serial monitor. the numbers in <> are just time stamps. You'll notice that when it doesn't work it ALWAYS is because the for loop messes up or something and it tries to look at an 8 character array instead of a 7 char one (my best interpretation of what is happening)

Code:
<20130415022823.875 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415022823.878 RX>
<LF>105892 [len=7]
<20130415022823.887 RX>
[len=0]
<20130415022823.888 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415022824.001 RX>
<LF>212798 [len=7]
<20130415022824.007 RX>
[len=0]
<20130415022824.008 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415022824.049 RX>
<LF>105892 [len=7]
<20130415022824.049 RX>
[len=0]
<20130415022824.049 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.155 RX>
<LF>2128102 [len=8]
<20130415022824.164 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.207 RX>
<LF>1058981 [len=8]
<20130415022824.207 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.305 RX>
<LF>2128102 [len=8]
<20130415022824.334 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.340 RX>
<LF>1058981 [len=8]
<20130415022824.350 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.470 RX>
<LF>2128102 [len=8]
<20130415022824.471 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.492 RX>
<LF>1058981 [len=8]
<20130415022824.501 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.618 RX>
<LF>2128102 [len=8]
<20130415022824.618 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.643 RX>
<LF>1058981 [len=8]
<20130415022824.652 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.813 RX>
<LF>2128102 [len=8]
<20130415022824.813 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.813 RX>
<LF>1058981 [len=8]
<20130415022824.813 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415022824.910 RX>
<LF>2128102 [len=8]
<20130415022824.919 RX>
<LF>Serial 3 didn't match:  [len=24]
<20130415022824.957 RX>
<LF>1058981 [len=8]
<20130415022824.957 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415022825.057 RX>
<LF>212822 [len=7]
<20130415022825.077 RX>
[len=0]
<20130415022825.077 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415022825.088 RX>
<LF>105904 [len=7]
<20130415022825.096 RX>
[len=0]
<20130415022825.097 RX>



And finally my sketch

Code:
char incOne[7] = {0};
char incTwo[7] = {0};
const int cR = 13;

void setup() {
        Serial1.begin(9600);
        delay(2000);
        Serial2.begin(9600);
        Serial3.begin(9600);
        pinMode(ledPin, OUTPUT);
        delay(1000);
        Serial1.println("Good Morning I am Serial 1 ");
        Serial2.println("Good Morning I am Serial 2 ");
        Serial3.println("Good Morning I am Serial 3 ");
}

void loop() {
      
        
        if (Serial2.available() > 0) {
            if (cR == Serial2.read()) {
                for (byte i=0; i<7; i++) {
          		incOne[i] = Serial2.read();
       	        }
            }
        }
	if (Serial3.available() > 0) {
           if (cR == Serial3.read()) {
                for (byte i=0; i<7; i++) {
          		incTwo[i] = Serial3.read();
                }
           }
	}

//        delay(100);
        if (incOne[6] == cR) {
            Serial1.println("Serial 2 Recieved: ");
            for (byte i=0; i<7; i++){
              Serial1.print(incOne[i]);
            }
          Serial1.println("");            
        }
        else {
           Serial1.println("Serial 2 didn't match: ");
           for (byte i=0; i<7; i++){
             Serial1.print(incOne[i]);
           }
          Serial1.println("");           
        }

        if (incTwo[6] == cR) {
          Serial1.println("Serial 3 Recieved: ");
          for (byte i=0; i<7; i++){
              Serial1.print(incTwo[i]);
            }
          Serial1.println("");
        }
        else {
          Serial1.println("Serial 3 didn't match: ");
          for (byte i=0; i<7; i++){
               Serial1.print(incTwo[i]);
           }
          Serial1.println("");
        }
//     Serial2.flush();
//     Serial3.flush();
     delay(150);
}

A few final notes, it seems pretty stable with all serial ports at the same baud, but it really craps out if I kill that delay at the end too. It almost needs it. I would also like to see if there might be something I'm missing that would optimize the code a bit more, right now my
Code:
       if (Serial2.available() > 0) {
            if (cR == Serial2.read()) {
seems to be causing a 4 second lag on the Serial1 output. This is probably because I'm not catching the CR when I loop?

Thank you for any feedback!


edit:
bumping the last delay to 250 makes the problem even worse, instead of 10 "doesn't match results" I get around 20-30.


edit3:

Trying 19200 with a 250 delay at the end yields this madness:


Code:
<LF>Serial 2 Recieved:  [len=20]
<20130415024443.207 RX>
<LF>210386 [len=7]
<20130415024443.211 RX>
[len=0]
<20130415024443.211 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415024443.221 RX>
<LF>104680 [len=7]
<20130415024443.225 RX>
[len=0]
<20130415024443.225 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415024443.461 RX>
<LF>210386 [len=7]
<20130415024443.467 RX>
[len=0]
<20130415024443.467 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415024443.476 RX>
<LF>104680 [len=7]
<20130415024443.480 RX>
[len=0]
<20130415024443.480 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415024443.711 RX>
<LF>210386 [len=7]
<20130415024443.713 RX>
[len=0]
<20130415024443.713 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415024443.725 RX>
<LF>104686 [len=7]
<20130415024443.728 RX>
[len=0]
<20130415024443.728 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415024443.963 RX>
<LF>210386 [len=7]
<20130415024443.965 RX>
[len=0]
<20130415024443.966 RX>
<LF>Serial 3 Recieved:  [len=20]
<20130415024443.976 RX>
<LF>104686 [len=7]
<20130415024443.980 RX>
[len=0]
<20130415024443.980 RX>
<LF>Serial 2 Recieved:  [len=20]
<20130415024444.210 RX>
<LF>210386 [len=7]
<20130415024444.214 RX>
[len=0]
<20130415024444.214 RX>
<LF>Serial 3 atch:  [len=16]
<20130415024444.223 RX>
dÿÿÿÿÿÿÿ [len=8]
<20130415024444.228 RX>
<LF>6erialri l 2nRecmeveh:  [len=24]
<20130415024444.464 RX>
<LF>21ÿ386ÿ [len=8]
<20130415024444.468 RX>
<LF>Serial 3 Ricieteda  [len=20]
<20130415024444.478 RX>
h1 46ÿ6ÿ [len=8]
<20130415024444.483 RX>
<LF>ÿÿr<LF>al i Re2ievdd:t [len=20]
<20130415024444.716 RX>
<LF>2t038  [len=7]
<20130415024444.719 RX>
[len=0]
<20130415024444.720 RX>
<LF>Sÿriÿl <LF> Rrcaev3d:i [len=20]
<20130415024444.730 RX>
<LF>'0 68t [len=7]
<20130415024444.734 RX>
[len=0]
<20130415024444.734 RX>
:  [len=2]
<20130415024444.954 RX>
rÿaÿÿÿ ÿe<LF>ievidl 2 2i0n9t [len=25]
<20130415024444.968 RX>
m<LF>teh:a [len=7]
<20130415024444.972 RX>
 ÿ ÿÿÿiÿv<LF>S:r [len=13]
<20130415024444.980 RX>
a1 4 8i [len=7]
<20130415024444.984 RX>
n't raalh2 Reÿiÿvÿd: [len=20]
<20130415024445.215 RX>
[len=0]
<20130415024445.215 RX>
S21ia9  [len=7]
<20130415024445.220 RX>
[len=0]
<20130415024445.220 RX>
dSenitl a cec e<LF>eÿ: ÿ<LF>10<LF>68r [len=28]
<20130415024445.237 RX>
[len=0]
<20130415024445.237 RX>
l 3 ialn2  ecteve :<LF> [len=20]
<20130415024445.466 RX>
ÿ2ÿ0ÿ9 [len=6]
<20130415024445.469 RX>
[len=0]
<20130415024445.469 RX>
Serirla2 diRnctemadc :<LF> [len=23]
<20130415024445.482 RX>
<LF>4ÿÿÿ [len=5]
<20130415024445.486 RX>
ÿ<LF> [len=2]
<20130415024445.708 RX>
<LF>riri 2 Rediev'd: a<LF>21:398ÿ [len=27]
<20130415024445.725 RX>
<LF>ÿeri [len=5]
<20130415024445.727 RX>
l 3rRec 2vei:  [len=14]
<20130415024445.734 RX>
<LF>1m4t9h [len=7]
<20130415024445.738 RX>
[len=0]
<20130415024445.738 RX>
[len=0]
<20130415024445.738 RX>
<LF>ÿrÿal ÿ Reeieve :  [len=19]
<20130415024445.973 RX>
<LF>d103 8 [len=7]
<20130415024445.975 RX>
[len=0]
<20130415024445.975 RX>
<LF>Se  [len=4]
<20130415024445.976 RX>
alÿ3ÿÿÿc [len=8]
<20130415024445.980 RX>
<LF>veri l<LF>2 46dn [len=14]
<20130415024445.988 RX>
t<LF>marcal  [len=9]
<20130415024446.215 RX>
 Reÿieÿÿd: e<LF>2a0338 [len=19]
<20130415024446.225 RX>
i<LF>S'riaa 3hRe [len=13]
<20130415024446.232 RX>
ieÿedÿÿ [len=7]
<20130415024446.239 RX>
<LF>1S46i2 [len=7]
<20130415024446.242 RX>
[len=0]
<20130415024446.242 RX>
<LF> diia'   Rtchev [len=16]
<20130415024446.469 RX>
dÿ ÿÿ2ÿ0 [len=8]
<20130415024446.474 RX>
9S [len=2]
<20130415024446.475 RX>
[len=0]
<20130415024446.475 RX>
ialr3ali3nRtcmevcd:  [len=20]
<20130415024446.486 RX>
<LF>1ÿÿÿÿÿÿ [len=8]
<20130415024446.491 RX>
<LF>Serial 2 didi't datch2  [len=24]
<20130415024446.723 RX>
<LF>1ÿÿÿÿÿÿr<LF>Se ial c didd'  [len=25]
<20130415024446.737 RX>
m1tch9  [len=7]
<20130415024446.741 RX>
[len=0]
<20130415024446.741 RX>
ÿÿÿrial 2 Recieve :  [len=20]
<20130415024446.976 RX>
n210m10 [len=7]
<20130415024446.981 RX>
[len=0]
<20130415024446.981 RX>
<LF> eriÿl 3ÿRecSevea: 3<LF>104n92 [len=28]
<20130415024446.994 RX>
m<LF>tcr:al ÿ Rÿcie [len=16]
<20130415024447.224 RX>
ed:r [len=4]
<20130415024447.226 RX>
<LF>2 2410d [len=8]
<20130415024447.233 RX>
<LF>teriac 3 R<LF>cieÿedÿ <LF><LF>e0i6l83 [len=29]
<20130415024447.245 RX>
didnia  2tRhci [len=14]
<20130415024447.473 RX>
veÿ: ÿÿ2 [len=8]
<20130415024447.478 RX>
041r [len=4]
<20130415024447.480 RX>
[len=0]
<20130415024447.480 RX>
l erdal ' Rmctev:d:<LF> [len=20]
<20130415024447.493 RX>
<LF>ÿ04ÿ98<LF> [len=8]
<20130415024447.497 RX>
<LF>riai l d de'i vadc :<LF> [len=22]
<20130415024447.728 RX>
10ÿ1ÿÿ [len=6]
<20130415024447.732 RX>
ÿSeSirla3 2ecienet:m [len=20]
<20130415024447.742 RX>
tc0:6 [len=5]
<20130415024447.744 RX>
<LF>ÿÿÿÿÿÿÿa<LF>S2riel e di:n't2matc0:  [len=33]
<20130415024447.982 RX>
<LF>eÿÿÿÿÿÿ [len=8]
<20130415024447.987 RX>
RSeriald2 d<LF>dn't 8atch:r [len=24]
<20130415024448.226 RX>
al 2 Rÿcievedi  [len=15]
<20130415024448.235 RX>
<LF>21d410 [len=7]
<20130415024448.238 RX>
[len=0]
<20130415024448.238 RX>
 Serial 3 Recÿeved:  [len=20]
<20130415024448.247 RX>
<LF>i04628 [len=7]
<20130415024448.252 RX>
[len=0]
<20130415024448.252 RX>
dn'riml 2 d dn'ÿ maÿch: e<LF>21l422d [len=33]
<20130415024448.490 RX>
<LF>S'riml 3 :eciÿvedÿ  [len=20]
<20130415024448.503 RX>
<LF>10e698 [len=7]
<20130415024448.505 RX>
 <LF> diinlt2mdtdh'  <LF>aÿÿhÿ ÿ [len=26]
<20130415024448.734 RX>
2S0ri2l [len=7]
<20130415024448.739 RX>
3Sdrinlt3mRtci:v [len=16]
<20130415024448.746 RX>
<LF>:ÿÿÿ1ÿÿ6<LF>8er<LF>al iadid 't m'tch:t [len=33]
<20130415024448.982 RX>
<LF>:ÿÿÿÿÿ0 [len=8]
<20130415024448.986 RX>
<LF>Serialr3 d dn'tcmatcd:  [len=24]
<20130415024448.999 RX>
<LF>1ÿÿÿÿÿÿ [len=8]
<20130415024449.005 RX>
<LF>Serial 2 didn't match:  [len=24]
<20130415024449.242 RX>
<LF>2ÿ0422ÿ [len=8]
<20130415024449.245 RX>
<LF>Serial 3 Ricnev da c<LF>:0 [len=24]
<20130415024449.254 RX>
7ÿ4 [len=3]
<20130415024449.255 RX>
ÿÿÿÿ [len=4]
<20130415024449.477 RX>
iae iad dndtdmatcm:t [len=20]
<20130415024449.488 RX>
<LF>:1 [len=3]
<20130415024449.490 RX>
42ÿ2 [len=4]
<20130415024449.492 RX>
ÿÿer<LF>ae 3 lec eied'  [len=20]
<20130415024449.504 RX>
m10c70  [len=7]
<20130415024449.508 RX>
[len=0]
<20130415024449.508 RX>
ÿÿÿÿial [len=7]
<20130415024449.730 RX>
2 eidalt2maich'  [len=16]
<20130415024449.741 RX>
<LF>a104:22 [len=8]
<20130415024449.745 RX>
ÿSeÿial [len=7]
<20130415024449.748 RX>
3 eecalve : d<LF>'0 7at [len=20]
<20130415024449.758 RX>
h:  [len=3]
<20130415024449.977 RX>
<LF>ÿÿÿ ÿÿÿi<LF>Setial 2hdi [len=21]
<20130415024449.989 RX>
n'1 matc [len=8]
<20130415024449.993 RX

note how it starts stable then it goes nuts.
 
Last edited:
Status
Not open for further replies.
Back
Top