Difference between revisions of "Component: UART (RS232) (Comms: Interface)"
(XML import BR) |
|||
Line 19: | Line 19: | ||
On a microcontroller the interface will be the onboard UART which will need voltage level shifting using a max2323 to become RS232 compatible. | On a microcontroller the interface will be the onboard UART which will need voltage level shifting using a max2323 to become RS232 compatible. | ||
See the EB015 RS232 E-block for details. | See the EB015 RS232 E-block for details. | ||
+ | |||
+ | ==Detailed description== | ||
+ | |||
+ | ===Overview=== | ||
+ | |||
+ | The RS232 component is in fact nothing more than a TTL level asynchronous serial communications bus which basically means that there is no clock signal. Instead the data is sent out at a precise data rate specified by the Baud which is represented in bits per second. Both devices need to be set to the same rate to allow communications to work correctly. | ||
+ | |||
+ | |||
+ | There are two signals which make up the asynchronous serial connection: RX and TX. The receive RX signal is used for incoming data and the transmit TX signal is used for outgoing data. When connecting two devices together it is important to connect the TX of one device to the RX of the other and visa versa. When inactive the bus defaults to having the TX signal held in the high state. Each data byte sent then starts with a low signal for 1 period of the baud rate to signify that data is to follow. | ||
+ | |||
+ | |||
+ | Each RS232 transaction consists of a byte made up of 8 clock cycles allowing the 8-bits of the byte to be transferred. | ||
+ | |||
+ | [[File:RS232_Bytes.jpg]] | ||
+ | |||
+ | |||
+ | ===TTL=== | ||
+ | |||
+ | By default the RS232 component will provide TTL asynchronous serial data which is best suited for a single device to single device data connection on the same circuit board. An example might be a GSM modem or GPS module. The TTL signals are normally at VCC when the bus is idle and toggles between VCC and Ground when sending data. | ||
+ | |||
+ | |||
+ | ===RS232=== | ||
+ | |||
+ | By adding a driver chip such as a MAX2323 the TTL signals can be upgraded to RS232 which is best suited for single device to single device mid range off board communications. The RS232 signals replace the voltages VCC with +12V and GND with -12V to allow for better noise rejection in noisy environments. | ||
+ | |||
+ | |||
+ | ===RS485=== | ||
+ | |||
+ | By adding a driver chip such as a MAX3078 the TTL signals can be upgraded to RS485 which is best suited for master to multiple slave type mid range off board communications. | ||
+ | |||
+ | |||
+ | ===Auto Baud=== | ||
+ | |||
+ | Some devices feature an auto baud functionality and is commonly triggered by sending a known data byte to the device before any other data is sent allowing the correct baud to be worked out. | ||
+ | |||
+ | |||
+ | ===Importing from v5=== | ||
+ | |||
+ | The RS232 component in Flowcode v6 has a new Initialise macro which will need to be added to your program before any other calls to the component are made. | ||
+ | |||
+ | |||
==Examples== | ==Examples== | ||
− | + | ===Transmit=== | |
+ | |||
+ | This example transmits a string "Hello World". | ||
+ | {{Fcfile|RS232_Example1.fcfx|RS232_Example1}} | ||
+ | The Console window shows the data as it is sent and received. | ||
+ | |||
+ | [[File:RS2321.jpg]] | ||
+ | |||
+ | |||
+ | ===Receive=== | ||
+ | |||
+ | This example receives a character and outputs it to the LCD, an injector has been added to allow you to type data into the console. | ||
+ | {{Fcfile|RS232_Example2.fcfx|RS232_Example2}} | ||
+ | The Console window has tabs for the human interface data injector allowing you to type in data that will be received by the component. | ||
+ | |||
+ | [[File:RS2322.jpg]] | ||
+ | |||
+ | Again the RS232 console tabs reflect the data as it is sent and received. | ||
+ | |||
+ | [[File:RS2323.jpg]] | ||
+ | |||
+ | LCD showing received data. | ||
+ | |||
+ | [[File:RS2324.jpg]] | ||
+ | |||
+ | |||
+ | ===Transmit and Receive=== | ||
+ | |||
+ | This example echoes back any data that is received allowing a nice sanity check when connecting an embedded device to a PC or other source of communications. | ||
+ | {{Fcfile|RS232_Example3.fcfx|RS232_Example3}} | ||
+ | Again the RS232 console tabs reflect the data as it is sent and received. | ||
+ | |||
+ | [[File:RS2325.jpg]] | ||
+ | |||
+ | |||
+ | ===UART Bridge=== | ||
+ | |||
+ | This example allows a microcontroller with two UART peripherals to receive data one one UART and transmit on the other and visa versa in a reliable manner using interrupts. Note that this method will only work with hardware UART channels. A software UART could be done in a similar way using a falling edge type interrupt on the UART RX pin to trigger the receive function. | ||
+ | {{Fcfile|UART_Bridge.fcfx|RS232_Example4}} | ||
+ | ===COM Port=== | ||
+ | |||
+ | The COM port property allows you to attach the RS232 component to a COM port on your PC during simulation allowing real world hardware such as RS232, Bluetooth, GPS to work with the simulation. | ||
+ | |||
+ | |||
+ | ===Injector=== | ||
+ | |||
+ | The Injector property allows you to select an injector component on the panel for use in the simulation. The human interface injector can be used to inject typed in data via the console window and can be seen in examples 2 and 3 above. | ||
+ | |||
+ | There are other pre-made injectors to allow you to do various aspects from simulating a generic AT terminal to simulating a specific remote device. | ||
Latest revision as of 11:24, 28 June 2017
Author | Matrix Ltd |
Version | 2.0 (Release) |
Category | Comms: Interface |
Contents
UART (RS232) component
Low level routines for controlling or interacting with a standard asyncronous serial interface. On a microcontroller the interface will be the onboard UART which will need voltage level shifting using a max2323 to become RS232 compatible. See the EB015 RS232 E-block for details.
Detailed description
Overview
The RS232 component is in fact nothing more than a TTL level asynchronous serial communications bus which basically means that there is no clock signal. Instead the data is sent out at a precise data rate specified by the Baud which is represented in bits per second. Both devices need to be set to the same rate to allow communications to work correctly.
There are two signals which make up the asynchronous serial connection: RX and TX. The receive RX signal is used for incoming data and the transmit TX signal is used for outgoing data. When connecting two devices together it is important to connect the TX of one device to the RX of the other and visa versa. When inactive the bus defaults to having the TX signal held in the high state. Each data byte sent then starts with a low signal for 1 period of the baud rate to signify that data is to follow.
Each RS232 transaction consists of a byte made up of 8 clock cycles allowing the 8-bits of the byte to be transferred.
TTL
By default the RS232 component will provide TTL asynchronous serial data which is best suited for a single device to single device data connection on the same circuit board. An example might be a GSM modem or GPS module. The TTL signals are normally at VCC when the bus is idle and toggles between VCC and Ground when sending data.
RS232
By adding a driver chip such as a MAX2323 the TTL signals can be upgraded to RS232 which is best suited for single device to single device mid range off board communications. The RS232 signals replace the voltages VCC with +12V and GND with -12V to allow for better noise rejection in noisy environments.
RS485
By adding a driver chip such as a MAX3078 the TTL signals can be upgraded to RS485 which is best suited for master to multiple slave type mid range off board communications.
Auto Baud
Some devices feature an auto baud functionality and is commonly triggered by sending a known data byte to the device before any other data is sent allowing the correct baud to be worked out.
Importing from v5
The RS232 component in Flowcode v6 has a new Initialise macro which will need to be added to your program before any other calls to the component are made.
Examples
Transmit
This example transmits a string "Hello World". RS232_Example1 The Console window shows the data as it is sent and received.
Receive
This example receives a character and outputs it to the LCD, an injector has been added to allow you to type data into the console. RS232_Example2 The Console window has tabs for the human interface data injector allowing you to type in data that will be received by the component.
Again the RS232 console tabs reflect the data as it is sent and received.
LCD showing received data.
Transmit and Receive
This example echoes back any data that is received allowing a nice sanity check when connecting an embedded device to a PC or other source of communications. RS232_Example3 Again the RS232 console tabs reflect the data as it is sent and received.
UART Bridge
This example allows a microcontroller with two UART peripherals to receive data one one UART and transmit on the other and visa versa in a reliable manner using interrupts. Note that this method will only work with hardware UART channels. A software UART could be done in a similar way using a falling edge type interrupt on the UART RX pin to trigger the receive function. RS232_Example4
COM Port
The COM port property allows you to attach the RS232 component to a COM port on your PC during simulation allowing real world hardware such as RS232, Bluetooth, GPS to work with the simulation.
Injector
The Injector property allows you to select an injector component on the panel for use in the simulation. The human interface injector can be used to inject typed in data via the console window and can be seen in examples 2 and 3 above.
There are other pre-made injectors to allow you to do various aspects from simulating a generic AT terminal to simulating a specific remote device.
Downloadable macro reference
SendString
Sends out a string of bytes from the UART interface.
Parameters
- <- STRING Data
- This parameter may be returned back to the caller
Return value
- This call does not return a value
SendNumber
Sends out a number as an ASCII String from the UART interface.
Parameters
- <- LONG Number
- This parameter may be returned back to the caller
Return value
- This call does not return a value
SendChar
Sends out a single packet from the UART interface.
Parameters
- INT Char
Return value
- This call does not return a value
ChangeHWBaud
Changes the hardware UART baud rate allowing for dynamic speed changes.
Parameters
- BYTE NewBaud
- 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200
Return value
- This call does not return a value
ReceiveString
Attempts to receive a string of bytes from the UART interface.
Parameters
- BYTE Timeout
- BYTE NumBytes
Return value
Initialise
Sets up the RS232 peripheral, must be called at the start of your program or at least before you start calling any other RS232 macros.
Parameters
- This macro has no parameters
Return value
- This call does not return a value
ReceiveChar
Attempts to receive a single packet from the UART interface.
Parameters
- INT Timeout
- Time to wait for valid data before returning, 0=Dont wait, 255=Wait forever.
Return value
Simulation macro reference
GetConsoleHandle
Gets the handle to the console allowing data displaying on the panel etc.
Parameters
- This macro has no parameters
Return value
Property reference
Channel
This property is of type Fixed list of ints and can be referenced with the variable name CHANNEL.
Onboard UART peripheral to use to perform serial commands.
Software mode available but not recommended for receive applications unless combined with a pin interrupt.
Baud Rate
This property is of type Fixed list of ints and can be referenced with the variable name BAUD_LIST.
Theoretical number of digital bits that can be send or received a second.
Theoretical because it is unlikely you will be constantly sending or receiving data 100% of the time.
Data Bits
This property is of type Fixed list of ints and can be referenced with the variable name DBITS.
Number of data bits in each send/receive packet
Return Type
This property is of type Fixed list of ints and can be referenced with the variable name RETURN.
Specifies the way the receive function indicates a timeout.
8 Bit mode - Timeout is represented by the value 255.
16 Bit mode - Timeout is represented by the value 512 allowing the value 255 to represent valid data
Timeout Value
This property is of type Unsigned integer and can be referenced with the variable name ToutVal.
Value used by the receive macros to indicate a timeout.
Flow Control
This property is of type Fixed list of ints and can be referenced with the variable name FLOWEN.
When enabled adds two extra pins to help control the flow of data between the device and the remote device.
Echo
This property is of type Fixed list of ints and can be referenced with the variable name ECHO.
When enabled automatically resends out any received data to help the remote device know that the data is getting through ok.
Most AT type modems (e.g. Bluetooth modules) will automatically echo back incoming data.
TX
This property is of type Single digital pin and can be referenced with the variable name TX.
UART Transmit Pin
RX
This property is of type Single digital pin and can be referenced with the variable name RX.
UART Receive Pin
Label
This property is of type Line of text and can be referenced with the variable name label.
Textual label shown on the component I/O flasher
Scope Traces
This property is of type True or false and can be referenced with the variable name ScopeTraces.
Selects if the scope traces are automatically generated or not
Console Data
This property is of type True or false and can be referenced with the variable name ConsoleData.
Selects if the console data is automatically generated or not
Console Columns
This property is of type Unsigned integer and can be referenced with the variable name ConsoleColumns.
Number of characters that can be displayed on a single line of the console.
Data Source
This property is of type Fixed list of ints and can be referenced with the variable name DataSource.
Simulation data source used to allow the component to connect to COM port hardware or the the data injector components.
Injector
This property is of type Fixed list of ints and can be referenced with the variable name Injector.
Lists all the current injector components available on the user's panel