RS232 and integers
Moderator: Benj
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
RS232 and integers
I use RS232 (software, only TX and RX) between 2 PIC's. I like to send/receive integers. Is that possible? Up to now it seems to me that only the first 8 bits of the integer are send.
Kind regards
Jan Lichtenbelt
Kind regards
Jan Lichtenbelt
-
- Posts: 125
- Joined: Mon Aug 15, 2011 1:54 pm
- Has thanked: 8 times
- Been thanked: 11 times
- Contact:
Re: RS232 and integers
I think you can send two bytes, the order being up to you.
byte = integer
send byte
byte = integer right shift 8
send byte
byte = integer
send byte
byte = integer right shift 8
send byte
- Benj
- Matrix Staff
- Posts: 15312
- Joined: Mon Oct 16, 2006 10:48 am
- Location: Matrix TS Ltd
- Has thanked: 4803 times
- Been thanked: 4314 times
- Contact:
Re: RS232 and integers
Hi Jan,
RS232 in hardware mode can only transfer 8 or 9 data bits in one transaction. The 9th data bit is normally used for addressing using say the RS485 protocol.
This article may help on splitting and recombining large variables into multiple bytes.
http://www.matrixmultimedia.com/article.php?a=366
RS232 in hardware mode can only transfer 8 or 9 data bits in one transaction. The 9th data bit is normally used for addressing using say the RS485 protocol.
This article may help on splitting and recombining large variables into multiple bytes.
http://www.matrixmultimedia.com/article.php?a=366
Regards Ben Rowland - MatrixTSL
Flowcode Product Page - Flowcode Help Wiki - Flowcode Examples - Flowcode Blog - Flowcode Course - My YouTube Channel
Flowcode Product Page - Flowcode Help Wiki - Flowcode Examples - Flowcode Blog - Flowcode Course - My YouTube Channel
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
Is there a flowcode (send and receive part) for RS232 (software based) between 2 PIC's for INTEGERS? I tried it but without succes up to now.
Kind regards
Jan
Kind regards
Jan
- Dan81
- Valued Contributor
- Posts: 268
- Joined: Sun Jan 15, 2006 4:07 pm
- Location: Albi France
- Been thanked: 60 times
- Contact:
Re: RS232 and integers
hello Jan
This flowchart seems to be OK (within Proteus).
It is only for sending, for now.
Can test it in real live ?
Daniel
This flowchart seems to be OK (within Proteus).
It is only for sending, for now.
Can test it in real live ?
Daniel
- Attachments
-
- RS_send16bits.fcf
- not hard tested
- (21.46 KiB) Downloaded 296 times
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
Dear Daniel,
I'm afraid that does not work. What you do is to change a byte into an integer (in some way) and than sending this integer by RS232 in one step. But RS232 will send only lower_byte and not the integer (if I'm correct). If you make a receiver, you will find only the low-byte part of the integer at the receiver site.
But thanks for helping finding a solution.
Kind regards
Jan
I'm afraid that does not work. What you do is to change a byte into an integer (in some way) and than sending this integer by RS232 in one step. But RS232 will send only lower_byte and not the integer (if I'm correct). If you make a receiver, you will find only the low-byte part of the integer at the receiver site.
But thanks for helping finding a solution.
Kind regards
Jan
-
- Posts: 258
- Joined: Wed Nov 29, 2006 6:32 pm
- Location: Finland
- Has thanked: 7 times
- Been thanked: 36 times
- Contact:
Re: RS232 and integers
Hi.
Why you just can't split the int in 2 bytes, send them and combine them back to int? At least that is what I do, I have an Eberspacher ecu, done by flowcode, and it uses rs232 (at the moment, the pcb to join that eber to CAN network, is under way) to communicate with fan controller unit, there is at least 5 int to sent, an it works fine..
I mean like this
byte = int >> 8
sent byte
byte = int
sent byte
and other device
rec byte
int = byte << 8
rec byte
int = int + byte
Like Ben says, the rs232 specs support only up to 9bit transfer...
Even in CAN I need to break int to bytes, to sent int, it's probably possible, by the modification of the software rs232 c code, but it's not rs232 anymore after that...
Mika
Why you just can't split the int in 2 bytes, send them and combine them back to int? At least that is what I do, I have an Eberspacher ecu, done by flowcode, and it uses rs232 (at the moment, the pcb to join that eber to CAN network, is under way) to communicate with fan controller unit, there is at least 5 int to sent, an it works fine..
I mean like this
byte = int >> 8
sent byte
byte = int
sent byte
and other device
rec byte
int = byte << 8
rec byte
int = int + byte
Like Ben says, the rs232 specs support only up to 9bit transfer...
Even in CAN I need to break int to bytes, to sent int, it's probably possible, by the modification of the software rs232 c code, but it's not rs232 anymore after that...
Mika
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: RS232 and integers
Hi Jan,
I only send 10bit integers that are displayed in hyperterminal, but I send them as ACSII string.
RS232 component has to be set to Characters and not bytes.
To send several different integers I use the format as in the screen shot below: Using a temp string Variable saves on ROM being used.
Is is possible for you to send as a string, then the receiver can convert the string to integer using StringToInt$() function
You can use a decision to separate integers by waiting for a ASCII space.
You may not want to do it this way, but I thought I would show an alternative to splitting integers into bytes.
In theory this sending and receiving would work, but not tried it out on real hardware.
I have only ever use sending.
Martin
I only send 10bit integers that are displayed in hyperterminal, but I send them as ACSII string.
RS232 component has to be set to Characters and not bytes.
To send several different integers I use the format as in the screen shot below: Using a temp string Variable saves on ROM being used.
Is is possible for you to send as a string, then the receiver can convert the string to integer using StringToInt$() function
You can use a decision to separate integers by waiting for a ASCII space.
You may not want to do it this way, but I thought I would show an alternative to splitting integers into bytes.
In theory this sending and receiving would work, but not tried it out on real hardware.
I have only ever use sending.
Martin
Martin
- Dan81
- Valued Contributor
- Posts: 268
- Joined: Sun Jan 15, 2006 4:07 pm
- Location: Albi France
- Been thanked: 60 times
- Contact:
Re: RS232 and integers
Hello Jan
In my previous flowchart , the calculation create a variable value with 16 bits.
In this version , I send the (integer) value of the ADC, 16 bits are sent but the last 6 are always "0".
I can only test with Proteus, I don't have an oscilloscope at home.
Daniel
In my previous flowchart , the calculation create a variable value with 16 bits.
In this version , I send the (integer) value of the ADC, 16 bits are sent but the last 6 are always "0".
I can only test with Proteus, I don't have an oscilloscope at home.
Daniel
- Attachments
-
- RS_send16bits_v2.fcf
- (21.38 KiB) Downloaded 215 times
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
Dear Martin,
Thanks for the simple solution. It works. Please find the two Flowcodes used.
Kind regards,
Jan
Thanks for the simple solution. It works. Please find the two Flowcodes used.
Kind regards,
Jan
- Attachments
-
- RS232 Send Integer.fcf
- (6 KiB) Downloaded 214 times
-
- RS232 Receive Integer.fcf
- (7.5 KiB) Downloaded 219 times
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: RS232 and integers
Hi Jan,
Glad you have got what you want to work.
I have made a slight alteration to your flowchart so you can receive all the integer range including 0
Since on your flowchart you can’t receive a 0
Thanks for sharing your soultions and for letting us know.
Martin
Glad you have got what you want to work.
I have made a slight alteration to your flowchart so you can receive all the integer range including 0
Since on your flowchart you can’t receive a 0
Thanks for sharing your soultions and for letting us know.
Martin
- Attachments
-
- RS232 Receive Integer Modified.fcf
- (8 KiB) Downloaded 207 times
Martin
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
string length should be >0 or >=1, instead of >1.
Jan
Jan
- Attachments
-
- RS232 Receive Integer.fcf
- (8 KiB) Downloaded 182 times
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: RS232 and integers
The reason I used >1 is when stepping within flowcode simulator and there is nothing in rs232 buffer, then string always has 1 char that looks like a square which when converts to int produces a 0....hence >1 to get around that. If on real hardware this does not happen then fair enough use >0. I am relying on Flowcode simulator since not tried it on real hardware.Jan Lichtenbelt wrote:string length should be >0 or >=1, instead of >1.
Jan
Thanks for letting me know.
Martin
Martin
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
Can someone tell me, when sending data in this way, there is a need for a delay between two RS232 calls. 10 msec fails and 100 msec is enough. Why is there a delay necessary? And what is the shortest time needed?
Kind regards
Jan Lichtenbelt
Kind regards
Jan Lichtenbelt
Last edited by Jan Lichtenbelt on Mon Nov 14, 2011 11:23 am, edited 1 time in total.
-
- Matrix Staff
- Posts: 9520
- Joined: Sat May 05, 2007 2:27 pm
- Location: Northamptonshire, UK
- Has thanked: 2585 times
- Been thanked: 3815 times
- Contact:
Re: RS232 and integers
That’s Fair enough.Jan Lichtenbelt wrote:With Length>1 you miss all numbers 1-9.
It’s just a case of Flowcode simulator differs from results of real hardware.
Martin
Martin
- Benj
- Matrix Staff
- Posts: 15312
- Joined: Mon Oct 16, 2006 10:48 am
- Location: Matrix TS Ltd
- Has thanked: 4803 times
- Been thanked: 4314 times
- Contact:
Re: RS232 and integers
Hello
I have had a look at your program and you don't seem to be sending any data. You should not need any delays in between RS232 component macro calls in Flowcode.Can someone tell me, when sending data in this way, there is a need for a delay between two RS232 calls. 10 msec fails and 100 msec is enough. Why is there a delay necessary? And what is the shortest time needed?
Regards Ben Rowland - MatrixTSL
Flowcode Product Page - Flowcode Help Wiki - Flowcode Examples - Flowcode Blog - Flowcode Course - My YouTube Channel
Flowcode Product Page - Flowcode Help Wiki - Flowcode Examples - Flowcode Blog - Flowcode Course - My YouTube Channel
-
- Posts: 258
- Joined: Wed Nov 29, 2006 6:32 pm
- Location: Finland
- Has thanked: 7 times
- Been thanked: 36 times
- Contact:
Re: RS232 and integers
No delays should be needed, at least the eber ecu where I use rs-232 sends about 15 bytes with no delays, and it works like charm..Jan Lichtenbelt wrote:Can someone tell me, when sending data in this way, there is a need for a delay between two RS232 calls. 10 msec fails and 100 msec is enough. Why is there a delay necessary? And what is the shortest time needed?
Kind regards
Jan Lichtenbelt
The other end has UART incoming int, and it reads also without delays...
If I don't remember wrong, the bus it tested at least 9600-38600 baud rates, I am not sure about 115200, but I might test it too.
Mika
- Jan Lichtenbelt
- Posts: 797
- Joined: Tue Feb 17, 2009 8:35 pm
- Location: Haren GN, the Netherlands
- Has thanked: 128 times
- Been thanked: 264 times
- Contact:
Re: RS232 and integers
I tried some different conditions and found that:
1) Timeout must be 1 (I do not know why) for the best results. 0 and higher values give bad results.
2) Increasing the baut rate improves the results
3) Sending with time delays < 1 msec gives bad results
Kind regards
Jan Lichtenbelt
1) Timeout must be 1 (I do not know why) for the best results. 0 and higher values give bad results.
2) Increasing the baut rate improves the results
3) Sending with time delays < 1 msec gives bad results
Kind regards
Jan Lichtenbelt