mirror of
https://github.com/pConst/basic_verilog.git
synced 2025-01-28 07:02:55 +08:00
1468 lines
72 KiB
Plaintext
1468 lines
72 KiB
Plaintext
|
||
<EFBFBD> Copyright 2012-2014, Xilinx, Inc. All rights reserved.
|
||
This file contains confidential and proprietary information of Xilinx, Inc. and is
|
||
protected under U.S. and international copyright and other intellectual property laws.
|
||
|
||
Disclaimer:
|
||
This disclaimer is not a license and does not grant any rights to the materials
|
||
distributed herewith. Except as otherwise provided in a valid license issued to you
|
||
by Xilinx, and to the maximum extent permitted by applicable law: (1) THESE MATERIALS
|
||
ARE MADE AVAILABLE "AS IS" AND WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL
|
||
WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED
|
||
TO WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR
|
||
PURPOSE; and (2) Xilinx shall not be liable (whether in contract or tort, including
|
||
negligence, or under any other theory of liability) for any loss or damage of any
|
||
kind or nature related to, arising under or in connection with these materials,
|
||
including for any direct, or any indirect, special, incidental, or consequential
|
||
loss or damage (including loss of data, profits, goodwill, or any type of loss or
|
||
damage suffered as a result of any action brought by a third party) even if such
|
||
damage or loss was reasonably foreseeable or Xilinx had been advised of the
|
||
possibility of the same.
|
||
|
||
CRITICAL APPLICATIONS
|
||
Xilinx products are not designed or intended to be fail-safe, or for use in any
|
||
application requiring fail-safe performance, such as life-support or safety devices
|
||
or systems, Class III medical devices, nuclear facilities, applications related to
|
||
the deployment of airbags, or any other applications that could lead to death,
|
||
personal injury, or severe property or environmental damage (individually and
|
||
collectively, "Critical Applications"). Customer assumes the sole risk and
|
||
liability of any use of Xilinx products in Critical Applications, subject only to
|
||
applicable laws and regulations governing limitations on product liability.
|
||
|
||
THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE AT ALL TIMES.
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
PicoTerm v1.97
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
|
||
____ _ _____
|
||
| _ \(_) ___ __|_ _|__ _ __ _ __ ____
|
||
| |_) | |/ __/ _ \| |/ _ \ '__| '_ ` _ \
|
||
| __/| | (_| (_) | | __/ | | | | | | |
|
||
|_| |_|\___\___/|_|\___|_| |_| |_| |_|
|
||
|
||
|
||
|
||
|
||
11th April 2014
|
||
|
||
Ken Chapman - Xilinx Ltd - email:chapman@xilinx.com
|
||
|
||
|
||
PicoTerm is primarily a simple PC based terminal ideally suited for communication with PicoBlaze
|
||
based designs that utilise the UART macros connected to a USB/UART port on a development
|
||
board or evaluation kit. However, given that PicoTerm is a simple terminal that can be used to
|
||
communicate with any 'COM' port it could be used with virtually any hardware and design.
|
||
|
||
The primary motivation for the development of PicoTerm was to provide a quick and reliable way
|
||
to establish a working connection with a PicoBlaze based UART design. Whilst this should be
|
||
easy to achieve with any terminal application, correctly setting all the communication and
|
||
ASCII options often makes this a challenge. PicoTerm has been pre-configured to match with the
|
||
parameters required for a PicoBlaze/UART designs and has a default BAUD rate of 115200. This
|
||
means that in most cases only the COM port needs to be specified and it even helps to make
|
||
that easier to do.
|
||
|
||
PicoTerm also has some features that you would not expect to find with a normal terminal. These
|
||
special features are described later in this document and will hopefully appeal to users of
|
||
PicoBlaze for fun, education or serious applications. The 'PicoTerm_routines.psm' file
|
||
provided with PicoTerm contains a set of KCPSM6 routines with descriptions ready to be used with
|
||
PicoTerm. What will you use the virtual 7-Segment Display for?
|
||
|
||
|
||
Summary of PicoTerm Features
|
||
----------------------------
|
||
|
||
- Easy setup
|
||
- 1.6:1 aspect ratio (47 lines of 144 characters)
|
||
- 8 text colours
|
||
- Virtual 7-Segment Display (4-Digits)
|
||
- Virtual LED Display (8 Red + 8 Amber + 8 Green)
|
||
- Virtual Switches Window (16-Switches)
|
||
- 256 x 256 graphic display
|
||
- Date and Time information
|
||
- Random numbers
|
||
- Writing log files
|
||
- Reading text files
|
||
|
||
|
||
In this file
|
||
------------
|
||
|
||
System Requirements
|
||
Usage
|
||
Quick Start Method <- This is all you really need
|
||
How To Find The COM Port Number <- to start using PicoTerm
|
||
Closing PicoTerm
|
||
Opening PicoTerm with command line options
|
||
PicoTerm Features
|
||
Control Codes (Characters)
|
||
Special Features and Control
|
||
Escape Sequences
|
||
Device Control Strings
|
||
'Ping' Sequences
|
||
Time String Sequence
|
||
Time Value Sequence
|
||
Date String Sequence
|
||
Date Value Sequence
|
||
Pseudo Random Number Sequence
|
||
Opening and closing a LOG file
|
||
Hide DCS Transactions Window
|
||
PicoTerm Application Control
|
||
Virtual LED Display
|
||
Virtual 7-Segment Display
|
||
Virtual Switches
|
||
Graphic Display
|
||
Reading Text Files
|
||
Invalid Characters and Control Sequences
|
||
BAUD Rates and Character Rates
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
System Requirements
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
Windows-XP or Windows-7 Operating System.
|
||
|
||
A 'COM' port to communicate with - This appears to be obvious but do remember that when using a
|
||
USB/UART connection a driver may need to be installed to
|
||
provide you with a 'virtual COM port'. You also need to have
|
||
the hardware connected to your PC and power turned on.
|
||
|
||
You need to know the number of the COM port and the required BAUD rate (see 'Usage' section).
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
Usage
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
|
||
Quick Start Method
|
||
------------------
|
||
|
||
PicoTerm has the communication fixed to 8-bit, 1 Stop Bit, No Parity and No Handshake which is
|
||
immediately compatible with the UART macros provided with PicoBlaze. This means that the only
|
||
two variables are the number of the COM port and the BAUD rate. However, even the BAUD rate
|
||
defaults to 115200 so if you use this in your design (e.g. as set in the reference designs
|
||
provided with the KCPSM6 version of PicoBlaze) then you don't have to worry about that either.
|
||
|
||
So if the required BAUD rate is indeed 115200 then simply execute PicoTerm and it will prompt
|
||
you to enter a COM Port number. All you need to do is enter the correct COM number.
|
||
|
||
|
||
How To Find The COM Port Number
|
||
-------------------------------
|
||
|
||
Although the COM port number is the only piece of information that you need, this vital piece
|
||
of information may not be so obvious especially when using a USB/UART where a virtual COM port
|
||
number has been automatically allocated by the driver. But don't worry, we can look that
|
||
information up and it is then quick and easy way to make connection attempts with PicoTerm.
|
||
|
||
To find the possible COM port number on your PC make sure your hardware is connected and
|
||
has the power turned on....
|
||
|
||
Right click on 'My Computer' and select 'System Properties'
|
||
Select the 'Hardware' tab.
|
||
Click on 'Device Manager'
|
||
Scan down the list to find 'Ports (COM & LPT)
|
||
Click on '+' to open this section and review COM port numbers.
|
||
|
||
For example, a Xilinx Evaluation Kit such as the VC707 board will show something like...
|
||
|
||
Silicon Labs (CP210x USB to UART Bridge (COM13)
|
||
|
||
Hint - Temporarily disconnecting the USB cable connected to a USB/UART port will typically
|
||
cause the COM port list in the 'Device Manager' to update so you can see which COM
|
||
port disappears and reappears as you unplug and reconnect it.
|
||
|
||
|
||
Having entered a COM port number into PicoTerm, it will attempt to open that port. If it is
|
||
unable to open that port then it will tell you. It may be that you specified an invalid port
|
||
number but you should also remember to check that you have no other applications open that are
|
||
already accessing the same port before trying again.
|
||
|
||
When a COM port is opened successfully then a message similar to the following will be displayed.
|
||
|
||
COM13 is open for communication at 115200 baud.
|
||
|
||
Then as soon as anything is received from that port, or any key is pressed on the keyboard, the
|
||
screen will automatically clear and start displaying any received characters. So don't expect
|
||
to see the message above if your hardware is transmitting information as you connect (it will
|
||
be obvious that it is working anyway!).
|
||
|
||
|
||
|
||
Closing PicoTerm
|
||
----------------
|
||
|
||
To close PicoTerm press the 'Esc' key or close the window. Although no issues have been
|
||
encountered when simply closing the PicoTerm window, using the 'Esc' key is preferred as it
|
||
does result in a definitive closing of the COM port at the end of the session.
|
||
|
||
The application (e.g. PicoBlaze) can also issue a 'Device Control String' (DCS) forcing
|
||
PicoTerm to close (full description later in this file).
|
||
|
||
|
||
|
||
Opening PicoTerm with command line options
|
||
------------------------------------------
|
||
|
||
There are three optional command line options available.
|
||
|
||
PicoTerm -c<port> -b<baud> -w
|
||
|
||
You can invoke PicoTerm from a command line in a 'Command Prompt' window or within a Batch
|
||
file. However, it is probably easier to create a PicoTerm shortcut (or several shortcuts)
|
||
and edit the properties.
|
||
|
||
How to create a short cut and edit its properties...
|
||
Locate 'PicoTerm.exe' in Explorer.
|
||
Right click on 'PicoTerm.exe' and select 'Create Shortcut'.
|
||
This should make a shortcut in the same directory.
|
||
In Win7 the file name is called 'PicoTerm.exe - Shortcut'.
|
||
Note that the icon has a small arrow inside a white box on it.
|
||
If you wish, modify the name of the shortcut (e.g. 'PicoTerm for COM13').
|
||
Then Right click on the shortcut and select 'Properties'.
|
||
Append the required options to the 'Target'.
|
||
e.g. Target: C:\utilities\PicoTerm\PicoTerm.exe -c13 -b9600 -w
|
||
If you want the shortcut on your desktop then simply drag the icon to it.
|
||
|
||
Valid command line options...
|
||
|
||
-c<port>
|
||
|
||
This option is useful when you always want to open the same COM port. Providing you specify
|
||
a COM port which is accessible (i.e. make sure any USB/UART bridge is connected and powered)
|
||
then your PicoTerm session will start immediately.
|
||
|
||
-b<baud>
|
||
|
||
As previously explained, PicoTerm defaults to a BAUD rate of 115200. However, PicoTerm
|
||
can support the following BAUD rates when specified using this option.
|
||
1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 and 921600.
|
||
Note that not all COM ports (real or virtual) support all of these rates. Also be aware
|
||
that higher BAUD rates don't necessarily mean high average data rates will be achieved.
|
||
Please take a while to read the 'BAUD Rates and Character Rates' section later in this
|
||
document if you anticipate the transmission of reception of significant quantities of data.
|
||
|
||
-w
|
||
|
||
This option instructs PicoTerm to open a LOG file in the same directory in which the
|
||
PicoTerm executable (PicoTerm.exe) is located. All visible characters displayed in the
|
||
main terminal window will also be written to the LOG file. The LOG file is automatically
|
||
given a name containing the date and time consistent with when it was opened. For example,
|
||
'PicoTerm_08May2013_154530.txt' is a LOG file opened at 15:45:30 on the 8th May 2013.
|
||
The writing of LOG files can also be controlled by Device Control Strings (DCS). Please
|
||
see 'Opening and closing a LOG file' later in this document for details.
|
||
|
||
|
||
Examples
|
||
|
||
PicoTerm -c5 Open COM5 with default baud rate of 115200
|
||
|
||
PicoTerm -c 13 Open COM13 with default baud rate of 115200
|
||
|
||
PicoTerm -c13 -b9600 Open COM13 with baud rate of 9600
|
||
|
||
PicoTerm -b9600 Set baud rate to 9600 but still prompt for port number.
|
||
|
||
PicoTerm -w Write a LOG file but still prompt for port number.
|
||
|
||
PicoTerm -c13 -w Open COM13 with baud rate of 115200 and write a LOG file.
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
PicoTerm Features
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
PicoTerm is first and foremost a simple terminal application but even as a basic terminal it does
|
||
incorporate some features that make it more compatible with typical PicoBlaze applications as
|
||
well as for general use.
|
||
|
||
Wide display with 1.6:1 aspect ratio - Fits well on most landscape monitors and supports 47 lines
|
||
of 144 characters. As with most applications, the physical window size can be adjusted by
|
||
dragging the borders with your mouse but the active terminal size remains 144 x 47 characters.
|
||
No characters are displayed once the end of a line has been reached (i.e. line wrapping has been
|
||
deliberately prevented from occurring) but will automatically scroll.
|
||
|
||
|
||
Control Codes (Characters)
|
||
--------------------------
|
||
|
||
The following commonly used control codes (characters) are supported...
|
||
|
||
'CR' - Carriage return with automatic Line Feed with. Note that this avoids
|
||
(0D hex = 13) the requirement for Line Feed characters (0A hex = 10) to be
|
||
Carriage Return transmitted (except for special circumstances) which helps to keep
|
||
PicoBlaze programs smaller and easier to develop. Whilst other
|
||
terminals can support this automatic line feed functionality it can
|
||
often be difficult to find an ASCII setup option to enable it and your
|
||
display can be a real mess until you do!
|
||
|
||
'LF' Line Feed - Feeds a new line but the cursor remains at the same position
|
||
(0A hex = 10) along the new line as it was on the previous line.
|
||
Line Feed
|
||
|
||
'VT' - Moves cursor up one line. Note that the cursor cannot move up if
|
||
(0B hex = 10) it is already located on the top line of the visible screen.
|
||
Vertical Tab (i.e. the cursor has to have space to move up into, it will not
|
||
cause the display to scroll downwards within the visible screen).
|
||
|
||
'BS' or 'DEL' - Moves the cursor one position to the left and deletes any character
|
||
(08 hex = 8) previously in that position. If the cursor is already at the start
|
||
(7F hex = 127) of a line then any character at the start of the line will be
|
||
Back Space or Delete deleted and the cursor will not move (i.e. start of the current line).
|
||
|
||
'HT' - Advances the cursor to the start of the next column automatically
|
||
(09 hex = 9) clearing any previously displayed characters between the current
|
||
Horizontal Tab cursor position and its new position. Each column is 8 characters
|
||
wide so the display width of 144 characters is exactly 18 columns.
|
||
|
||
'BEL' (07 hex = 7) - Will make a short sound (providing your speaker is turned on!).
|
||
|
||
'NUL' (00 hex = 0) - This does nothing at all!
|
||
|
||
|
||
Hint - CR, LF, VT, BS, DEL, HT, BEL and NUL are predefined constants in the KCPSM6 assembler.
|
||
|
||
All other control codes (i.e. other codes in the range 01 to 1F hex) are automatically replaced
|
||
with a '*' character. The display of this visible character makes it easier to observe and
|
||
debug applications during development. (See also 'Invalid Characters and Control Sequences'
|
||
later in the document).
|
||
|
||
|
||
|
||
Special Features and Control
|
||
----------------------------
|
||
|
||
The application (e.g. PicoBlaze) is able to control the main PicoTerm terminal window and
|
||
to open and control a variety of independent features such as virtual LEDs and Switches.
|
||
A selection of 'Escape Sequences' and 'Device Control Strings' (DCS) enable the application
|
||
to exert control over PicoTerm features whilst not being displayed as characters in their
|
||
own right (i.e. in much the same way that a 'CR' control character starts a new line but
|
||
is itself invisible).
|
||
|
||
The remainder of this document describes each of the features available and the sequences used
|
||
to control them. The scale of the documentation may appear a little daunting at first but the
|
||
majority of features are actually straightforward to use and examples are provided in the
|
||
PicoBlaze for Spartan-6, Virtex-6 and 7-Series (KCPSM6) package. Remember that everything
|
||
beyond this point is optional but it is very much hoped that you will enjoy using the special
|
||
features available and that they will enhance your projects.
|
||
|
||
As with most technology, it is possible to encounter difficulties especially when using the
|
||
more advanced features. This document ends with two sections to help you when developing
|
||
applications using the special features. The first is called 'Invalid Characters and
|
||
Control Sequences' and explains what PicoTerm will do if you should make a mistake and how it
|
||
tries to be as helpful as it can under those circumstances. The second section is called 'BAUD
|
||
Rates and Character Rates' which you are advised to read if you anticipate the use of
|
||
prolonged periods of communication at relatively high data rates such as when writing or reading
|
||
information to or from files on your PC.
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
Escape Sequences
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
|
||
PicoTerm supports the following 'Escape Sequences'....
|
||
|
||
Move cursor to HOME position (upper-left of screen) and set text colour to black.
|
||
|
||
'ESC' (1B hex = 27)
|
||
'[' (5B hex = 91)
|
||
'H' (48 hex = 72)
|
||
|
||
Clear screen, move cursor to HOME position and set text colour to black.
|
||
|
||
'ESC' (1B hex = 27)
|
||
'[' (5B hex = 91)
|
||
'2' (32 hex = 50)
|
||
'J' (4A hex = 74)
|
||
|
||
|
||
Set the colour for the display of characters that follow.
|
||
|
||
'ESC' (1B hex = 27)
|
||
'[' (5B hex = 91)
|
||
colour (Where 'colour' is one of the following values)
|
||
( 1E hex = 30'd Black )
|
||
( 1F hex = 31'd Red )
|
||
( 20 hex = 32'd Green )
|
||
( 21 hex = 33'd Yellow )
|
||
( 22 hex = 34'd Blue )
|
||
( 23 hex = 35'd Magenta )
|
||
( 24 hex = 36'd Cyan )
|
||
( 25 hex = 37'd Grey )
|
||
( 26 hex = 38'd White )
|
||
|
||
|
||
Hint - ESC is predefined constant in the KCPSM6 assembler.
|
||
|
||
Hint - 'White' is the background colour so it cannot be seen! It may be used to clear
|
||
previously displayed text but spaces (20 hex) in any colour would do this as well.
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
Device Control Strings
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
|
||
PicoTerm also implements some 'Device Control Strings' (DCS) that can be useful in PicoBlaze
|
||
applications. When PicoTerm receives one of the DCS sequences then it will perform a special
|
||
operation. Some DCS commands will result in PicoTerm responding with another Device Control
|
||
String containing appropriate information such as the time on the PC whilst others are used
|
||
to open and control separate windows such as the virtual 7-Segment digits display.
|
||
|
||
When a DCS is used to facilitate the transfer of information between PicoBlaze (or similar)
|
||
and the PC (e.g. a request for time) then a 'PicoTerm DCS Transactions' window will automatically
|
||
open and display a message confirming the request and information exchanged. This ensures
|
||
that all communications with PicoTerm results in something visible on the PC screen which is
|
||
often reassuring as well as useful during PicoBlaze (or similar) code development.
|
||
|
||
The contents of a Device Control String may contain bytes of any value (i.e. data in the range
|
||
00 to FF hex). The following characters that begin and end all 'Device Control Strings' have
|
||
codes that are also beyond the normal 7-bit ASCII range.
|
||
'DCS' = 'Device Control String' character (90 hex = 144).
|
||
'ST' = 'String Terminator' character (9C hex = 156).
|
||
|
||
Hint - DCS and ST are predefined constants in the KCPSM6 assembler.
|
||
|
||
Hint - When PicoTerm responds with a Device Control String it always starts with the same
|
||
character that was used to make the request. Although PicoBlaze (or similar) would have
|
||
made the request, and therefore should know what response to expect, it is often convenient
|
||
to implement a DCS handing routine that can operate fairly independently. Therefore, having
|
||
the first character of the response string to identify the meaning of the information can
|
||
be very useful for such a handling routine. Note that the 'ping' sequence is a special
|
||
case (see description below).
|
||
|
||
Hint - Even if PicoTerm makes a DCS request for some information, the PicoTerm DCS response
|
||
may not be the very next thing waiting to be read from the UART receiver. Other keyboard
|
||
characters may still be waiting in the receiver FIFO buffer and need to be processed
|
||
first.
|
||
|
||
Note that PicoTerm will always transmit a complete DCS response. Keyboard entries can be made
|
||
during the time that a DCS request and response is taking place but keyboard characters will
|
||
always be transmitted either before or after the DCS response (i.e. will never become part
|
||
of the response string).
|
||
|
||
|
||
Summary of 'Device Control Strings' (DCS) available in this version (full details below).
|
||
|
||
D - Read Date string
|
||
d - Read Date value
|
||
G - Plot point in graphic display
|
||
g - Plot character in graphic display
|
||
h - Hide transaction window
|
||
L - LED display
|
||
N - Request a Pseudo Random Number
|
||
P - 'Ping' with PicoTerm version request
|
||
p - 'Ping'
|
||
q - Force PicoTerm to restart
|
||
Q - Force PicoTerm application to quit
|
||
R - Read default text file
|
||
r - Read any text file with auto prompt
|
||
S - Read switches
|
||
s - Set switches
|
||
T - Read Time string
|
||
t - Read Time value
|
||
V - Fill a box in the graphic display
|
||
v - Draw a line in the graphic display
|
||
W - Open a LOG file
|
||
w - Close the LOG file
|
||
7 - Seven segment display
|
||
|
||
|
||
|
||
|
||
'Ping' Sequences
|
||
----------------
|
||
|
||
A 'Ping' sequence provides a simple way for PicoBlaze (or similar) to determine if it
|
||
is communicating with PicoTerm rather than a different terminal. It is a good idea to
|
||
check that PicoTerm is being used if your application goes on to use any of its special
|
||
features provided. There are two forms of 'Ping' request which are shown below (note
|
||
the specification of either lower case 'p' or upper case 'P').
|
||
|
||
Simple 'Ping' 'Ping' with version
|
||
Request to PicoTerm Request to PicoTerm
|
||
|
||
|
||
'DCS' (90 hex = 144) 'DCS' (90 hex = 144)
|
||
'p' (50 hex = 80 ) 'P' (70 hex = 112)
|
||
'ST' (9C hex = 156) 'ST' (9C hex = 156)
|
||
|
||
Depending of the type of 'Ping' request that PicoTerm receives, it will display 'Ping!'
|
||
or 'Ping! v1.93' in the 'PicoTerm DCS Transaction' window. It will then respond with
|
||
the appropriate DCS sequence shown below.
|
||
|
||
Simple 'Ping' 'Ping' with version
|
||
Response from PicoTerm Response from PicoTerm
|
||
|
||
'DCS' 'DCS'
|
||
'P' (upper case) 'p' (lower case)
|
||
'ST' 'v' version text string
|
||
'1' e.g. v1.93
|
||
'.'
|
||
'9'
|
||
'3'
|
||
'ST'
|
||
|
||
Following the 'DCS', the first character of the response contains the opposite case of
|
||
letter to that used in the request. For example, the simple 'Ping' request contains a
|
||
lower case 'p' (70 hex = 112) and the response contains an upper case 'P' (50 Hex = 80).
|
||
This case reversal ensures that a simple echo or loop-back connection cannot be confused
|
||
with a connection to PicoTerm. All other DCS responses made by PicoTerm begin with the
|
||
exact same character used in the request so this is only a special case for 'Ping'.
|
||
|
||
The set of special features provided by PicoTerm is increasing over time. When an
|
||
application requires a specific feature to be present, the 'Ping' with version
|
||
request enables the application to verify that PicoTerm is connected and to verify that
|
||
it is of a suitable version. The response contains the version in the form of a 5-character
|
||
ASCII text string. Note that the version request was introduced in PicoTerm v1.93 so
|
||
earlier versions will report that a 'P' request is an 'Invalid string!'.
|
||
|
||
|
||
|
||
Time String Sequence
|
||
--------------------
|
||
|
||
Request to PicoTerm
|
||
|
||
|
||
'DCS' (90 hex = 144)
|
||
'T' (54 hex = 84 ) upper case 'T'
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm response is a string of 8 ASCII characters describing the current time
|
||
on the PC. The time is 24-hour with an hour value range of '00' to '23'.
|
||
For example... 14:27:58
|
||
|
||
'DCS'
|
||
'T'
|
||
'1'
|
||
'4'
|
||
':'
|
||
'2'
|
||
'7'
|
||
':'
|
||
'5'
|
||
'8'
|
||
'ST'
|
||
|
||
|
||
Time Value Sequence
|
||
-------------------
|
||
|
||
Request to PicoTerm
|
||
|
||
'DCS' (90 hex = 144)
|
||
't' (74 hex = 116) lower case 't'
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm response is a series of 3 byte values representing the current time on the
|
||
PC in hours, minutes and seconds.
|
||
|
||
'DCS'
|
||
't'
|
||
hours (byte value 00 to 17 hex = 0 to 23)
|
||
minutes (byte value 00 to 3B hex = 0 to 59)
|
||
seconds (byte value 00 to 3B hex = 0 to 59)
|
||
'ST'
|
||
|
||
|
||
Date String Sequence
|
||
--------------------
|
||
|
||
Request to PicoTerm
|
||
|
||
'DCS' (90 hex = 144)
|
||
'D' (44 hex = 68 ) upper case 'D'
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm response is a string of 11 ASCII characters describing the current date
|
||
on the PC. The day is always represented by 2 characters, the month by 3 characters
|
||
and the year by 4 characters. For example... 02 May 2012
|
||
|
||
'DCS'
|
||
'D'
|
||
'0'
|
||
'2'
|
||
' '
|
||
'M'
|
||
'a'
|
||
'y'
|
||
' '
|
||
'2'
|
||
'0'
|
||
'1'
|
||
'2'
|
||
'ST'
|
||
|
||
|
||
Date Value Sequence
|
||
-------------------
|
||
|
||
Request to PicoTerm
|
||
|
||
'DCS' (90 hex = 144)
|
||
'd' (64 hex = 100) lower case 'd'
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm response is a series of 3 byte values representing the current date on the
|
||
PC as year, month and day.
|
||
|
||
'DCS'
|
||
'd'
|
||
year (byte value 00 to 63 hex = 0 to 99) e.g. '12' for the year 2012.
|
||
month (byte value 01 to 0C hex = 1 to 12)
|
||
day (byte value 01 to 1F hex = 1 to 31)
|
||
'ST'
|
||
|
||
|
||
|
||
Pseudo Random Number Sequence
|
||
-----------------------------
|
||
|
||
The following sequence includes a 24-bit value (3-bytes) which defines the maximum value
|
||
which the random number returned by PicoTerm can be.
|
||
|
||
'DCS' (90 hex = 144)
|
||
'N' (4E hex = 78 )
|
||
max(0) (maximum value[7:0])
|
||
max(1) (maximum value[15:8])
|
||
max(2) (maximum value[23:16])
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm will respond with the following sequence containing a 24-bit (3-byte) pseudo random
|
||
number in the range 0 up to, and including, the maximum value specified during the request.
|
||
|
||
'DCS'
|
||
'N'
|
||
random(0) (random number[7:0])
|
||
random(1) (random number[15:8])
|
||
random(2) (random number[23:16])
|
||
'ST'
|
||
|
||
A message will be displayed in the 'PicoTerm DCS Transaction' indicating that a request was
|
||
received and showing both the maximum value and random number returned (as 6-digit hex values).
|
||
For example, the message 'Random (0003FF) -> 000142' indicates that the maximum value
|
||
specified in the request was 0003FF hex and the random number generated and returned on
|
||
this occasion was 000142 hex.
|
||
|
||
|
||
Analysis of a significant quantity of random numbers returned by PicoTerm would reveal that
|
||
their values are evenly distributed across the 0 to 'maximum value' range.
|
||
|
||
Hint - Specifying an appropriate 'maximum value' ensures that ALL responses will be valid
|
||
and suitable for immediate use in your application.
|
||
|
||
Hint - Exercise great care if you request a larger number than your application actually
|
||
needs. Reducing a series of larger values to make a series of smaller values can
|
||
easily result in an uneven distribution of values. This is why the DCS request
|
||
allows you to define a 'maximum value' and it is strongly recommended that you
|
||
use this feature.
|
||
|
||
Hint - Requesting a value within the full 24-bit range ('DCS', 'N', 255, 255, 255 'ST') can
|
||
be used to obtain three random byte values each with the range 0 to 255 and the
|
||
property of even distribution. This only works because EVERYTHING is consistent with
|
||
a power of two but again care should be taken not to extract smaller values from
|
||
each byte unless out of range values are discarded.
|
||
|
||
|
||
|
||
|
||
Opening and closing a LOG file
|
||
------------------------------
|
||
|
||
PicoBlaze (or similar) can use the following DCS sequence to instruct PicoTerm to open a
|
||
LOG file. Once a LOG file is open, all visible characters displayed in the main terminal
|
||
window will also be written to the LOG file. Whilst the LOG file cannot reflect the full
|
||
effect of all control characters and escape sequences, it attempts to provide a clean
|
||
and logical representation which is typically ideal for capturing automatically generated
|
||
information.
|
||
|
||
Request PicoTerm to open a LOG file
|
||
|
||
'DCS' (90 hex = 144)
|
||
'W' (57 hex = 87 ) upper case 'W'
|
||
'ST' (9C hex = 156)
|
||
|
||
When PicoTerm receives this sequence it will open a LOG file in the same directory in which
|
||
the PicoTerm executable (PicoTerm.exe) is located. PicoTerm automatically names the LOG file
|
||
'PicoTerm' followed by a date and time stamp (consistent with when it was opened) and with a
|
||
'.txt' file extension. For example, 'PicoTerm_08May2013_154530.txt' is the name of a LOG
|
||
file opened at 15:45:30 on the 8th May 2013.
|
||
|
||
An 'Opening LOG file' message will be displayed in DCS Transactions window when a LOG file
|
||
is opened. The file name and location will also be displayed in the DCS Transactions window.
|
||
|
||
Note that if the open LOG file sequence is received whilst a LOG file is already open then
|
||
PicoTerm will automatically close the current file and open a new one.
|
||
|
||
Request PicoTerm to close the LOG file
|
||
|
||
'DCS' (90 hex = 144)
|
||
'w' (77 hex = 119) lower case 'w'
|
||
'ST' (9C hex = 156)
|
||
|
||
When PicoTerm receives this sequence it will close the LOG file. This will be confirmed by a
|
||
by a 'Closing LOG file' message in the is displayed in DCS Transactions window. If this
|
||
sequence is received whilst no LOG file is currently open then an 'Attempt to close a LOG file
|
||
that is not open!' message will be displayed.
|
||
|
||
|
||
Hide DCS Transactions Window
|
||
----------------------------
|
||
|
||
The messages displayed in the 'DCS Transactions Window' can be very useful during the
|
||
development of an application. They show you the values being sent back to you in
|
||
response to your requests and will also help you to see when mistakes have been made.
|
||
However, this window can be distracting once an application is fully developed and stable
|
||
so this sequence can be used to close the 'DCS Transactions Window' or to prevent it from
|
||
opening in the first place. PicoTerm will not issue a DCS response to this request.
|
||
|
||
'DCS' (90 hex = 144)
|
||
'h' (68 hex = 104)
|
||
'ST' (9C hex = 156)
|
||
|
||
|
||
PicoTerm Application Control
|
||
----------------------------
|
||
|
||
The DCS shown below can be used to force the PicoTerm application on the PC to close (Quit).
|
||
One situation in which this may be used is when a design uses PicoTerm to display various
|
||
information during initialisation and then automatically closes PicoTerm if everything
|
||
works correctly or stays open to display an initialisation error.
|
||
|
||
'DCS' (90 hex = 144)
|
||
'Q' (51 hex = 81 ) upper case 'Q'
|
||
'ST' (9C hex = 156)
|
||
|
||
The following DCS effectively forces the PicoTerm application to restart (a soft quit). The
|
||
main window will remain open but the screen will be cleared and the cursor set in the HOME
|
||
position (equivalent to the '[2J' escape sequence). Any PicoTerm feature windows that are
|
||
open will be closed (e.g. virtual LED window). It can be useful to use this DCS during
|
||
code development.
|
||
|
||
'DCS' (90 hex = 144)
|
||
'q' (71 hex = 113) upper case 'q'
|
||
'ST' (9C hex = 156)
|
||
|
||
|
||
|
||
Virtual LED Display
|
||
-------------------
|
||
|
||
The PicoTerm Virtual LED Display is a pop-up window containing 24 virtual LEDs. There are 8 red,
|
||
8 yellow (amber) and 8 green LEDs arranged in 3 rows as shown below.
|
||
|
||
|
||
7 6 5 4 3 2 1 0
|
||
|
||
Red O O O O O O O O
|
||
Amber O O O O O O O O
|
||
Green O O O O O O O O
|
||
|
||
|
||
The virtual display is opened and updated using a 'Device Control String' (DCS) sequence. When
|
||
PicoTerm receives the first virtual LED display DCS sequence it will open the virtual LED window
|
||
with the specified LEDs 'turned on'. Subsequent virtual LED display DCS sequences will modify
|
||
the LEDs to reflect the new control values provided. Note that PicoTerm does not transmit
|
||
a DCS sequence back to the COM port.
|
||
|
||
The DCS sequence for the virtual LED display is as follows (please read the 'Device Control
|
||
Strings' section above if you are unfamiliar with this concept)...
|
||
|
||
'DCS' (90 hex = 144)
|
||
'L' (4C hex = 76 )
|
||
RED_control_byte
|
||
YELLOW_control_byte
|
||
GREEN_control_byte
|
||
'ST' (9C hex = 156)
|
||
|
||
The virtual LEDs of each colour are controlled by the corresponding bits contained in each of
|
||
control bytes. For example the least significant bit of 'GREEN_control_byte' will control the
|
||
virtual LED in the lower right hand corner of the display.
|
||
|
||
|
||
|
||
|
||
Virtual 7-Segment Display
|
||
-------------------------
|
||
|
||
The PicoTerm Virtual 7-Segment Display is a pop-up window containing a virtual 4-digit,
|
||
7-segment display. The digits and their segments are identified below.
|
||
|
||
|
||
Digit 3 Digit 2 Digit 1 Digit 0
|
||
|
||
a a a a
|
||
___ ___ ___ ___
|
||
| |
|
||
f | | b f | | b f | | b f | | b
|
||
| g | | g | | g | | g |
|
||
___ ___ ___ ___
|
||
|
||
| | | | | | | |
|
||
e | | c e | | c e | | c e | | c
|
||
| d | | d | | d | | d |
|
||
___ p ___ p ___ p ___ p
|
||
|
||
|
||
The virtual display is opened and updated using a 'Device Control String' (DCS) sequence. When
|
||
PicoTerm receives the first virtual display DCS sequence it will open the window and display
|
||
the digits with the specified segments 'turned on'. Subsequent virtual display DCS sequences
|
||
will modify the display to reflect the new control values provided. Note that PicoTerm does
|
||
not transmit a DCS sequence back to the COM port.
|
||
|
||
The DCS sequence for the virtual 7-Segment display is as follows (please read the 'Device Control
|
||
Strings' section above if you are unfamiliar with this concept)...
|
||
|
||
'DCS' (90 hex = 144)
|
||
'7' (37 hex = 55 )
|
||
digit0_segment_control_byte
|
||
digit1_segment_control_byte
|
||
digit2_segment_control_byte
|
||
digit3_segment_control_byte
|
||
'ST' (9C hex = 156)
|
||
|
||
The segments of each digit are controlled by the bits contained in the control bytes. Each
|
||
digit has 7 segments and a decimal point and a segment will be 'turned on' when the corresponding
|
||
bit of the control byte is High (1).
|
||
|
||
Segment Bit
|
||
|
||
a 0
|
||
b 1
|
||
c 2
|
||
d 3
|
||
e 4
|
||
f 5
|
||
g 6
|
||
p 7 decimal point
|
||
|
||
|
||
Hint - See the 'nibble_to_7seg' routine provided in the 'PicoTerm_routines.psm' file.
|
||
|
||
|
||
|
||
|
||
Virtual Switches
|
||
----------------
|
||
|
||
PicoTerm Virtual Switches is a pop-up window containing 16 virtual switches. Each switch has
|
||
the appearance of a square black button with an embedded green LED. Clicking on a virtual
|
||
button will toggle the state of the switch and the virtual LED will indicate the current
|
||
state, i.e. LED on means switch is turned on ('1').
|
||
|
||
|
||
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
||
|
||
O O O O O O O O O O O O O O O O
|
||
|
||
There are two 'Device Control String' (DCS) sequences that can be used in conjunction with the
|
||
virtual switches. The first time either sequence is received by PicoTerm the Virtual Switches
|
||
display will be opened.
|
||
|
||
The first and most useful DCS sequence is used to read the current states of switches. If this
|
||
is also used to open the window then all 16 switches will initially be off ('0').
|
||
|
||
Request to PicoTerm to read virtual switches
|
||
|
||
'DCS' (90 hex = 144)
|
||
'S' (53 hex = 83 ) upper case 'S'
|
||
'ST' (9C hex = 156)
|
||
|
||
In response to each use of the above DCS sequence, PicoTerm will respond with the following
|
||
DCS sequence reporting the current states of all 16 switches.
|
||
|
||
PicoTerm response
|
||
|
||
'DCS'
|
||
'S'
|
||
switches(0) (current states of switches[7:0])
|
||
switches(1) (current states of switches[15:8])
|
||
'ST'
|
||
|
||
Note that whilst the effect of clicking on a switch is immediately reflected by its indicator
|
||
LED, PicoTerm will only generate a DCS sequence in response to a DCS request. Hence, PicoBlaze
|
||
must issue a DCS request in order to determine the current states of the switches (this is
|
||
similar to the way in which PicoBlaze would need to read an input port to determine the current
|
||
states of physical switches).
|
||
|
||
In the top right of the virtual switches window is an small dot. When this dot is green it
|
||
indicates that the current switch settings have not changed since the last DCS request and
|
||
response occurred and implies that PicoBlaze has up to date information (of course the
|
||
PicoBlaze program is responsible for processing and using the information correctly). When
|
||
a virtual switch is changed the dot will become red until the time of the next DCS request.
|
||
Hence a red dot indicates that PicoBlaze has not read the latest states of the switches.
|
||
|
||
The second DCS sequence shown below can be used to set the 16 virtual switches either when
|
||
opening the window or during operation. PicoTerm will set the indicator LEDs on each switch as
|
||
defined by the two byte values provided.
|
||
Request to PicoTerm to set virtual switches
|
||
|
||
'DCS' (90 hex = 144)
|
||
's' (73 hex = 115) lower case 's'
|
||
switches(0) (new states for switches[7:0])
|
||
switches(1) (new states for switches[15:8])
|
||
'ST' (9C hex = 156)
|
||
|
||
PicoTerm does not generate a DCS response to this sequence because the state of the switches
|
||
is known.
|
||
|
||
|
||
|
||
Graphic Display
|
||
---------------
|
||
|
||
This display contains a grid of 256 x 256 points allowing simple graphs, shapes and patterns
|
||
to be plotted using 9 colours. Characters can also be displayed enabling graphs to be annotated
|
||
with scales and labels etc.
|
||
|
||
There are four 'Device Control String' (DCS) sequences available for use with the graphic
|
||
display. The 'PicoTerm Graphic Display' pop-up window will automatically open the first time
|
||
any one of these sequences is used.
|
||
|
||
G - Plot a single point.
|
||
v - Draw a line between two points.
|
||
V - Fill the box defined by two points.
|
||
g - Display a character at a specified position.
|
||
|
||
|
||
Each sequence is described in greater detail below. However, all sequences require one or two
|
||
points to be specified as X-Y coordinates. Although a 256 x 256 display does not provide the
|
||
kind of high resolution we have become used to these days, the primary objective of PicoTerm
|
||
is to be easy to use. With that in mind, the X-Y coordinates are simple byte values (00 to FF
|
||
hex (0'd to 255'd) which are a natural fit with both UART communication and PicoBlaze.
|
||
|
||
Y |(0,255) (255,255)
|
||
| As illustrated, the lower-left corner is the
|
||
| (X,Y) display origin (0,0) is the lower-left corner
|
||
| which feels natural and easy to work with.
|
||
|(0,0) (255,0)
|
||
--------------------
|
||
X
|
||
|
||
|
||
Likewise, all sequences require you to specify the colour of the object to be displayed.
|
||
The following values define each of the 9 colours available.
|
||
|
||
1E hex = 30'd Black (also used if colour value provided is outside normal range)
|
||
1F hex = 31'd Red
|
||
20 hex = 32'd Green
|
||
21 hex = 33'd Yellow
|
||
22 hex = 34'd Blue
|
||
23 hex = 35'd Magenta
|
||
24 hex = 36'd Cyan
|
||
25 hex = 37'd Grey
|
||
26 hex = 38'd White
|
||
|
||
Hint - This is the same colour palette available for text in the main PicoTerm window.
|
||
In this case, 'white' can really be useful because it will be visible when plotting
|
||
in an area previously set to a different colour. Alternatively, you can think in
|
||
terms of White allowing you to 'clear' points. Regardless, 'white' soon becomes a
|
||
useful colour in the display window.
|
||
|
||
|
||
|
||
Sequence to set a single point
|
||
------------------------------
|
||
|
||
'DCS' (90 hex = 144)
|
||
'G' (47 hex = 71 ) upper case 'G'
|
||
x
|
||
y
|
||
colour
|
||
'ST' (9C hex = 156)
|
||
|
||
This sequence can be used to set any of the 65,536 points to one of the 9 colours. It is
|
||
typically used when plotting simple graphs but its simplicity actually provides you with
|
||
the flexibility to do anything.
|
||
|
||
It is worth noting that when operating with a default baud rate of 115200, it will take
|
||
~521us to transmit this 6-character DCS sequence. This implies a plotting rate of 1,920
|
||
points per second. Hence a simple line graph consisting of 256 points can be plotted in
|
||
133ms which is reasonable. However, attempting to set all 65,536 point (e.g. to display
|
||
a 256x256 image) would take over 34 seconds and generally a technique to avoid!
|
||
|
||
|
||
|
||
Sequence to draw a line between two points.
|
||
-------------------------------------------
|
||
|
||
'DCS' (90 hex = 144)
|
||
'v' (76 hex = 118) lower case 'v'
|
||
x1 Start of line (x1,y1)
|
||
y1
|
||
x2 End of line (x2,y2)
|
||
y2
|
||
colour
|
||
'ST' (9C hex = 156)
|
||
|
||
This sequence defines the points at the start (x1,y1) and end (x2,y2) of a line. PicoTerm
|
||
works out the vector and sets all the points required to form a continuous line of the
|
||
colour specified. Although this 8-character DCS sequence will take slightly longer to
|
||
transmit (~694us at 115200 baud) it could set up to 256 points in one transaction and is
|
||
a faster way to draw lines than plotting individual points. Note that there are no
|
||
restrictions concerning the relative positions of the start and end points; PicoTerm will
|
||
draw a connecting line of whatever length and in whatever direction is needed to connect them.
|
||
|
||
Hint - Even though vertical and horizontal lines (e.g. graph axes) are easy to plot as
|
||
a series of individual points, using this sequence makes plotting faster and much
|
||
easier to define. When plotting a graph, you may find the overall appearance is
|
||
improved when using short connecting lines rather than isolated points.
|
||
|
||
|
||
|
||
Sequence to fill a box defined by two points.
|
||
---------------------------------------------
|
||
|
||
'DCS' (90 hex = 144)
|
||
'V' (56 hex = 86 ) upper case 'V'
|
||
x1 First Corner (x1,y1)
|
||
y1
|
||
x2 Second Corner (x2,y2)
|
||
y2
|
||
colour
|
||
'ST' (9C hex = 156)
|
||
|
||
This sequence defines the points at two diagonally opposite corners of a rectangular (or
|
||
square) box which PicoTerm will completely fill with the specified colour. As with drawing
|
||
lines, there are no restrictions concerning the relative positions of the two points but it
|
||
is generally easier to think in terms of the first point (x1,y1) being in the lower-left
|
||
corner and the second point (x2,y2) being in the upper-right corner.
|
||
|
||
This sequence can dramatically improve the speed at which large areas can have all points
|
||
set to the same colour. For example, specifying points (0,0) and (255,255) and the colour
|
||
white will effectively 'clear' the entire display in one transaction (~694us at 115200 baud).
|
||
|
||
Hint - A grey rectangle can be a good background for a graph. When presenting more than one
|
||
graph at a time (e.g. one at the top and another at the bottom) the grey rectangles
|
||
can really help define the plotting area of each.
|
||
|
||
|
||
|
||
Sequence to display a character.
|
||
--------------------------------
|
||
|
||
'DCS' (90 hex = 144)
|
||
'g' (67 hex = 103) lower case 'g'
|
||
x
|
||
y
|
||
colour
|
||
character
|
||
'ST' (9C hex = 156)
|
||
|
||
This sequence allows a character to be displayed at any position using any colour. There are
|
||
two font sizes available (small and large). The X-Y coordinates specifies the lower-left
|
||
corner of a small 'virtual box' which the character will occupy.
|
||
|
||
* * * * .
|
||
The 'virtual box' of a large font character is 5-points * . . . *
|
||
wide and 7-points tall. The specified X-Y coordinate always * . . . * 5 x 7
|
||
defines the lower-left corner even if that point is not * * * * . character
|
||
used by the character. The image on to the right illustrates * . . . . 'box'
|
||
the 15 points out of a possible 35 points that PicoTerm will * . . . .
|
||
set to the specified colour in order to display a capital 'P'. y* . . . .
|
||
x
|
||
|
||
Small font size characters are exactly half the size of the large font size characters with
|
||
a 'virtual box' that is 2.5 points wide and 3.5-points tall. In practice, PicoTerm uses the
|
||
same 5 x 7 bit map for each character but then divides each regular point into four smaller
|
||
points.
|
||
|
||
Hint - When displaying text or a label, space small characters at 3-point intervals and large
|
||
characters at 6-point intervals.
|
||
|
||
Note that when each character is displayed, only the points required to form the character are
|
||
set and all other points within the 'virtual box' will remain the same. When using the small
|
||
font size then only the required quarters of each regular point will be set so even the
|
||
remainder of a regular point will remain the same. This is equivalent to writing on a piece
|
||
of paper with a pen and means that labels can be added to a graph (or refreshed) without
|
||
obliterating all the information that has been previously plotted.
|
||
|
||
Hint - The above may sound natural and obvious but it is completely different to the way in
|
||
which characters are displayed in the main PicoTerm window. Displaying a space (20 hex)
|
||
in the main window will completely clear a previous character at the same location
|
||
whereas displaying a space in the graphic window has no effect at all. If you do
|
||
really need to clear the whole 'virtual box' of a character in the graphic window
|
||
then use the solid 5x7 'box' character (see later) with colour set to white.
|
||
|
||
The 'character' value is based on standard ASCII codes and indeed values in the range 20 to
|
||
7E hex (32'd to 126'd) will all result in the display of the expected ASCII character.
|
||
However, codes in the range 00 to 1F hex (0'd to 31'd) and 7F (127'd) are traditionally
|
||
associated with control which is not relevant to the graphic window so some other useful
|
||
characters, symbols and shapes have been assigned to these codes as shown in the table below.
|
||
|
||
A small font size character will be displayed when the code in the range 00 to 7F hex (0'd to
|
||
127'd). Simply add 80 hex (128'd) to the normal codes to display the character using the
|
||
large font size (i.e. codes in the range 80 to FF hex (128'd to 255'd) are large font).
|
||
|
||
|
||
Non-standard 'character' codes
|
||
|
||
Hex Dec character
|
||
|
||
00 0 edged 5x7 'virtual box'
|
||
01 1 up arrow
|
||
02 2 right arrow
|
||
03 3 down arrow
|
||
04 4 left arrow
|
||
05 5 degrees
|
||
06 6 micro
|
||
07 7 pi
|
||
08 8 ohm
|
||
09 9 British Pound
|
||
0A 10 Euro
|
||
0B 11 Sigma (upper case)
|
||
0C 12 Sigma (lower case)
|
||
0D 13 divide
|
||
0E 14 Hourglass
|
||
0F 15 Bus cross
|
||
10 16 Bus lines
|
||
11 17 reserved (solid box)
|
||
12 18 reserved (solid box)
|
||
13 19 reserved (solid box)
|
||
14 20 reserved (solid box)
|
||
15 21 reserved (solid box)
|
||
16 22 reserved (solid box)
|
||
17 23 reserved (solid box)
|
||
18 24 single point (0,0)
|
||
19 25 single point (1,0)
|
||
1A 26 single point (0,1)
|
||
1B 27 single point (1,1)
|
||
1C 28 solid 5x5 triangle (upper-left)
|
||
1D 29 solid 5x5 triangle (lower-left)
|
||
1E 30 solid 5x5 triangle (upper-right)
|
||
1F 31 solid 5x5 triangle (lower-right)
|
||
7F 127 solid 5x7 'virtual box'
|
||
|
||
|
||
Hint - The four 'single point' characters used with a small font size enable each
|
||
quadrant of the regular point specified in the X-Y coordinate to be set.
|
||
This opens the potential to implement a scheme that increases the plotting
|
||
resolution to 512 x 512 points (262,144 virtual points).
|
||
|
||
|
||
|
||
|
||
Reading Text Files
|
||
------------------
|
||
|
||
PicoTerm provides two DCS commands that enable PicoBlaze (or similar) to read text files from
|
||
the PC on which PicoTerm is running. Although the scheme is straightforward, it should be
|
||
appreciated that the act of reading a text file will typically require PicoBlaze (or similar)
|
||
to receive and process a relatively high number of characters in a timely manner. It is therefore
|
||
recommended that you consider how your application will ensure that its UART receiver buffer will
|
||
always be read at a rate that ensures that it does not overflow when PicoTerm is continuously
|
||
reading characters from the text file and transmitting them to your application.
|
||
|
||
The PicoTerm definition of a 'text file' is that it should primarily contain only characters with
|
||
ASCII codes 20 to 7E hex (32 to 126 decimal). This is all the normal visible characters including
|
||
'A' to 'Z', 'a' to 'z', '0' to '9', a space and various standard symbols. PicoTerm will also read
|
||
and transmit a carriage return (0D hex = 13 decimal) which is generally understood to mean the
|
||
end of a line. However, if PicoTerm reads a horizontal tab (09 hex = 9 decimal) from a file it
|
||
will automatically replace it with a space (20 hex = 32 decimal) before it is transmitted. If
|
||
PicoTerm reads any of the other character codes it will ignore them and they will not be
|
||
transmitted.
|
||
|
||
Both of the DCS commands read the contents of a text file and transmit them to the COM port in
|
||
exactly the same way. The only difference between the commands is the way in which the file to
|
||
be read is specified...
|
||
|
||
This first DCS sequence requests PicoTerm to read a file with the name 'picoreadfile.txt'
|
||
which must be located in the same directory as 'PicoTerm.exe'. Although this requires you
|
||
to have previously provided the correctly named file in the correct location, this command
|
||
allows your application to automatically read the file without any delay. For example, this
|
||
can be a good way to load a set of parameters for an application as part of an initialisation
|
||
procedure
|
||
|
||
'DCS' (90 hex = 144)
|
||
'R' (52 hex = 82 ) upper case 'R'
|
||
'ST' (9C hex = 156)
|
||
|
||
|
||
The second DCS sequence shown below will also request PicoTerm to read a file but this
|
||
command will result in PicoTerm prompting the user to 'Specify file to be read:'. The prompt
|
||
will appear in a new 'PicoTerm Read File' window that will pop up. Whilst this command is
|
||
flexible about the file to be read, waiting for the file to be specified will effectively
|
||
cause PicoTerm to freeze and that will generally force your application to wait as well.
|
||
Waiting is normally acceptable but it is clearly quiet different behavior to the 'R' command.
|
||
|
||
'DCS' (90 hex = 144)
|
||
'r' (72 hex = 114) lower case 'r'
|
||
'ST' (9C hex = 156)
|
||
|
||
|
||
When specifying the file to be read...
|
||
- Any file extension can be used (e.g. .hex or .mcs) providing the actual contents
|
||
of the file conform to the definition of a 'text file' as previously described.
|
||
- By default, PicoTerm will look for the file in the same directory as that in
|
||
which 'PicoTerm.exe' is located.
|
||
- The file specification may include an absolute path to the location of the file
|
||
e.g. C:\Designs\PicoBlaze\kc705_kcpsm6_i2c_eeprom.mcs
|
||
- The file specification may include a path relative to the location of 'PicoTerm.exe'
|
||
e.g. read_files\eeprom_data_files\filter_coefficients.hex
|
||
|
||
Hint - It is possible to paste a file specification into the 'PicoTerm Read File' window
|
||
using Ctrl+V which can save typing and help avoid mistakes.
|
||
|
||
|
||
As soon as PicoTerm has received either command it will immediately acknowledge that it is
|
||
entering the read file mode by transmitting 'DCS' followed by 'R' or 'r' to the COM port. The
|
||
application should then be aware that an attempt is being made to read a file. When the 'r'
|
||
command is used there will then be a pause whilst the user specifies the file to be read.
|
||
|
||
Providing PicoTerm is able to open the file specified, each character is read and transmitted
|
||
by PicoTerm and the application must receive and process them until the end of the file is
|
||
reached which will be indicated by PicoBlaze transmitting an 'ST' character. Hence the normal
|
||
complete response to a read file command is...
|
||
'DCS', 'R' (or 'r'), 'c', 'c', 'c', 'c', 'c', 'c', ......, 'c', 'c', 'ST'
|
||
Where 'c' represents a character from the text file and clearly the number of characters in
|
||
the response depends on the size of the file being read.
|
||
|
||
If PicoTerm is unable to locate and open the file (or the file is empty) then the response
|
||
will be as shown below and the application should recognise this to be a failure to read
|
||
the file and take suitable actions.
|
||
'DCS', 'R' (or 'r'), 'ST'
|
||
|
||
Throughout the read file process, PicoTerm will display messages in the 'PicoTerm DCS
|
||
Transactions' window which can be useful when developing your application. As each character
|
||
is read from a file and transmitted it will also be displayed in the 'PicoTerm Read File'
|
||
window providing a clear indication of progress. On completion, a message is displayed in the
|
||
transactions window and the 'PicoTerm Read File' window will close automatically.
|
||
|
||
When a file is in the process of being read, PicoTerm is still able to receive characters
|
||
from the application but there are limitations and special cases which are important to
|
||
understand and often key to the implementation of a successful application.
|
||
|
||
During the reading of a file, the application can only display plain text in the main terminal
|
||
window. It is not possible to use any other Device Control Strings (DCS) or Escape sequences
|
||
until the read command has completed (i.e. 'ST' has been received). In practice, the primary
|
||
focus of the application should be receiving the file being read so the amount of characters
|
||
sent for display in the terminal window should normally be limited to that of status information
|
||
using as few characters as practically possible. Remember that the 'PicoTerm Read File' window
|
||
already indicates progress.
|
||
|
||
Hint - A common mistake is that PicoBlaze (or similar) tries to transmit too many characters
|
||
to PicoTerm resulting in the buffer of its transmit UART becoming full. Then while
|
||
PicoBlaze waits for space to appear in the transmit buffer the buffer its UART
|
||
receiver overflows because it is no longer keeping up with the continuous flow of
|
||
characters PicoTerm is reading from the file.
|
||
|
||
If the application is unable to receive and process all the characters at the rate at which
|
||
PicoTerm is reading and transmitting them then it is possible for the application to stop and
|
||
start the flow by transmitting 'XOFF' and 'XON' control characters.
|
||
|
||
'XON' (11 hex = 17) Also known as control character 'DC1'
|
||
'XOFF' (13 hex = 19) Also known as control character 'DC3'
|
||
|
||
If for any reason the application would like to terminate the reading of the file early then
|
||
it simply needs to transmit a 'DCS' and PicoTerm will stop reading and transmitting characters
|
||
from the file, display a message in the transaction window and close the 'PicoTerm Read File'
|
||
window. PicoTerm will then continue to process the DCS command that has been started so it
|
||
is good practice to use a valid sequence (e.g. the 'ping' sequence).
|
||
|
||
When PicoTerm receives 'XOFF' it will stop reading and transmitting the file. PicoTerm will
|
||
then wait until it receives 'XON' before it resumes. PicoTerm will continue to receive and
|
||
display characters in the main terminal window so that the application can still display status
|
||
information. The 'PicoTerm Read File' window provides a visual indication of how the reading
|
||
of the file is being interrupted (i.e. it may appear to be making slow progress or even stop
|
||
if the is a significant time between 'XOFF' and 'XON' control codes).
|
||
|
||
In many cases, the need to interrupt the file read and flow of characters from PicoTerm to
|
||
the application is related to the performance of something else in the system. For example,
|
||
programming a FLASH memory is typically performed one 'page' at a time. A page of data
|
||
(typically 256 or 512 bytes) can be quickly loaded into a RAM buffer but it can then take several
|
||
milliseconds for the page to program the FLASH memory cells. If the buffer in the UART receiver
|
||
is liable to overflow whilst the application is forced to wait for the FLASH memory to be ready
|
||
then 'XOFF' and 'XON' flow control could be the solution.
|
||
|
||
When PicoTerm receives an 'XOFF' character it will immediately stop transmitting characters.
|
||
However, there may be a quite considerable latency in the system and the application should
|
||
expect to continue receiving characters. How many characters are received before the flow stops
|
||
really depends on the system and some experimentation is advisable to establish whether the
|
||
buffer in the UART receiver is adequate or if it necessary to issue 'XOFF' early so that
|
||
takes effect in time. The following is an indication of where the latency can be in a system.
|
||
a) PicoBlaze sends 'XOFF' to its UART transmitter.
|
||
b) The UART Transmitter has a 16-character buffer so maybe there are up to 15 other
|
||
characters to be transmitted before the 'XOFF' is actually on its way (note the
|
||
application will benefit from limiting the transmission of status information when
|
||
reading a file).
|
||
c) When a USB/UART bridge is used then these devices also have a buffer which may
|
||
be holding characters in front of the 'XOFF'.
|
||
d) On your PC, the COM port (or virtual COM port in the case of a USB/UART bridge)
|
||
almost certainly has a buffer which may further delay PicoTerm receiving characters .
|
||
e) When PicoTerm transmits characters read from the file then also pass to the COM port
|
||
which has a buffer. In the case of a virtual COM port it is possible that several
|
||
characters are queued up before transmission in a burst.
|
||
f) A USB/UART bridge device has a buffer such that bursts of characters received from
|
||
the USB can be transmitted by the UART.
|
||
|
||
Although the above description can make this sound like a potentially nasty problem, it is rarely
|
||
an issue in practice when a USB/UART bridge and corresponding Virtual COM port driver is being
|
||
used. This is because the average character transmission rate is often much less than the
|
||
BAUD rate of the UART implies. The PicoTerm default BAUD rate is 115200 and this means that a
|
||
character (start bit, 8 data bits and a stop bit) is transmitted in ~87us. This implies that
|
||
PicoTerm could be reading and transmitting 11,520 characters per second. If you actually use
|
||
a PC with a traditional RS232 serial port then you may actually observe a character rate close
|
||
to this but the interaction of Virtual COM port driver with the USB/UART device typically
|
||
results in relatively large gaps between the transmission of each character or large gaps
|
||
between small bursts of characters. The actual character rate very much depends on the
|
||
manufacturer of the USB/UART device and the Virtual COM port driver they provide.
|
||
|
||
The following experimental observation have been made by reading a large text file...
|
||
|
||
The Spartan-6 ATLYS board has an EXAR XR21V1410 USB/UART bridge device.
|
||
Average read rate of ~2,000 characters per second.
|
||
|
||
KC705 board with a Silicon Labs CP2103GM USB/UART bridge device.
|
||
Average read rate of ~1,960 characters per second.
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
Invalid Characters and Control Sequences
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
In an ideal world your application will only transmit valid characters and valid escape and DCS
|
||
sequences to PicoTerm and everything will work precisely as intended. However, mistakes do
|
||
happen especially during code development so it is useful to know how PicoTerm has been designed
|
||
to react when it receives unexpected characters and sequences.
|
||
|
||
Any control codes (i.e. codes in the range 01 to 1F hex) and all 8-bit codes (80 to FF hex)
|
||
not supported by PicoTerm are automatically replaced with a '*' character. The display of
|
||
this visible character makes it easier to observe and debug applications during development.
|
||
|
||
The most common mistakes when developing an application are the incorrect preparation of a
|
||
character code (e.g. when converting a binary value into its ASCII representation) or the
|
||
incorrect implementation of a Device Control String (DCS) resulting in raw 8-bit values then
|
||
being interpreted by PicoTerm as ASCII characters (see below).
|
||
|
||
When an escape sequence does not match with any of those supported then PicoTerm will abandon
|
||
the processing of the sequence at the earliest opportunity with any subsequent characters being
|
||
displayed in the main terminal window. For example, if a mistake is made when attempting to
|
||
issue a clear screen sequence...
|
||
|
||
invalid sequence 'ESC' '[' '3' 'J' is transmitted to PicoTerm
|
||
correct sequence 'ESC' '[' '2' 'J' (contains '2' rather than '3')
|
||
|
||
... PicoTerm will abandon the sequence as soon as '3' is received and then both '3' and 'J' will
|
||
be displayed in the main terminal window. Not what you expected, but being observable helps.
|
||
|
||
In a similar way, when a DCS sequence does not match with any of those supported then PicoTerm
|
||
will abandon the processing of the sequence at the earliest opportunity. 'Invalid string! will
|
||
be displayed in the 'PicoTerm DCS Transactions' window and any subsequent characters will be
|
||
displayed in the main terminal window. Since some DCS sequences are associated with byte data,
|
||
the subsequent characters displayed could be anything and quite often '*' would be observed
|
||
because byte values can easily be in the range 128 to 255 (80 to FF hex).
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
BAUD Rates and Character Rates
|
||
-------------------------------------------------------------------------------------------------
|
||
|
||
The BAUD rate defines the number of bits per second transmitted or received when a 'character'
|
||
(or byte) is transferred between PicoTerm and a device (e.g. PicoBlaze). The serial transfer of
|
||
each 'character' consists of a start bit, 8 data bits and a stop bit. So at the default BAUD rate
|
||
of 115200 bits/s it will take 10/115200 = 86.8us to transmit or receive one 'character'. It is
|
||
therefore reasonable and tempting to assume that 115200/10 = 11,520 characters can be transferred
|
||
per second. However, this is not always the case and it also means that higher BAUD rates do NOT
|
||
always result in faster communication rates of multiple characters (or bytes).
|
||
|
||
When using PicoTerm with a USB/UART bridge and Virtual COM port, the typical maximum CONTINUOUS
|
||
communication rates achieved are in the region of 2,000 characters per second from the PC running
|
||
PicoTerm to a peripheral and 4,000 characters per second from a peripheral to PicoTerm. These
|
||
rates far exceed the requirements of applications involving simple human interaction but reading
|
||
and writing files, or heavy use of some of the special features (e.g. the graphics window), can
|
||
lead to issues or otherwise unexpected results. So if you have applications for which you
|
||
anticipate potentially high character rates then please review the descriptions below.
|
||
|
||
|
||
Character Rate from a PC running PicoTerm to the Peripheral
|
||
-----------------------------------------------------------
|
||
|
||
When PicoTerm is used with a USB/UART device then it is typical for the Virtual COM port driver
|
||
to leave additional gaps between characters (or between bursts of characters). These gaps lower
|
||
the average character rate. Maximum rates in the region of 2,000 characters per second are
|
||
typical. In practice, this rate reduction will normally only be noticed when an application
|
||
attempts to read files containing a significant amount of data (i.e. many thousands of
|
||
characters). Whilst this rate reduction can be disappointing, it often makes it easier for your
|
||
application to cope with the data flow without resorting to large buffers of flow control
|
||
mechanisms. Please see 'Reading Text Files' section earlier in this file for further descriptions.
|
||
|
||
Ultimately, the communication rate from PicoTerm running on the PC to the peripheral is a self-
|
||
regulating limitation that must be accepted when using a virtual COM port. It simply means that
|
||
it will probably take longer to read a file than you may have expected to take.
|
||
|
||
|
||
Character Rate from the Peripheral to a PC running PicoTerm
|
||
-----------------------------------------------------------
|
||
|
||
In this direction the limitation is less obvious and affords your application a reasonable
|
||
degree of flexibility. However, it is the application that is ultimately responsible for the
|
||
character rate and this must be kept within certain limits for reliable communication to take
|
||
place.
|
||
|
||
Hint - High character or data rates are most likely to occur when attempting to write a
|
||
large amount of information to a LOG file but can also be attributed to high usage of
|
||
certain Device Control Strings (DCS) used to control one or more of the special PicoTerm
|
||
features. A high transfer rate can be beneficial when writing a lot of information to a
|
||
file or plotting a complex graphic but in these cases it may be necessary to accept the
|
||
limitations and implement a scheme that will deliberately lower the overall data rate.
|
||
However, there are situations in which it high data rates occur which relate to
|
||
inappropriate use of DCS and can easily be avoided. For example, it is theoretically
|
||
possible transmit the DCS to update the virtual 7-Segment over 1,600 times a second but
|
||
there is no way that the user would observe more than a few changes of the display per
|
||
second so such a high update rate is therefore unnecessary. Likewise, it is pointless
|
||
polling the virtual switches more than a few times a second as no user would change
|
||
them that fast.
|
||
|
||
When using the default BAUD rate of 115200 the maximum communication rate that can be achieved
|
||
is 11,520 characters per second. A virtual COM port working with a USB/UART device is able to
|
||
operate at this rate but PicoTerm will only be able to process in the region of 4,000 characters
|
||
per second. Virtual buffers in PicoTerm and the virtual COM port driver are able to accumulate a
|
||
backlog of characters when the received data rate is of a higher than PicoTerm can process.
|
||
However, the backlog cannot be allowed to grow indefinitely and therefore it is the responsibility
|
||
of the application to ensure that the AVERAGE character rate is suitable for PicoTerm.
|
||
|
||
Hint - When developing an application it is helpful to think in terms of an average character
|
||
rate relative to a period of ~10 seconds. As such, the transmission of <4,000 characters
|
||
every second is ideal but the transmission of 40,000 characters in 3.5 seconds is also
|
||
acceptable providing very few characters are transmitted during the next 6.5 seconds to
|
||
achieve the same average rate over a 10 second period.
|
||
|
||
If the application CONTINUOUSLY transmits 11,520 characters per second to PicoTerm, which only
|
||
processes 4,000 characters per second, the backlog will grow by 6,520 characters per second.
|
||
If this is sustained then the backlog will reach 60,000 characters after ~9 seconds and PicoTerm
|
||
will display a 'WARNING - High Average Data Rate!' message in the DCS Transactions Window (the
|
||
DCS Transactions will pop up if not already open). The warning is a clear indication that the
|
||
communication rate is unsustainable; it would take at least as long again before any data would
|
||
be lost but it is recommended that the application is modified to avoid this message from ever
|
||
being displayed. If the warning message is generated then a 'Good News - Average Data Rate has
|
||
reduced!' message will be displayed when the backlog falls back below 20,000 characters.
|
||
|
||
Hint - It would take PicoTerm up to 15 seconds to clear a backlog of 60,000 characters. Whilst
|
||
PicoTerm will reliably clear such a large backlog, it is often undesirable for your
|
||
PicoTerm display(s) to be that far behind your application. So in general, it is far
|
||
better to craft your application so that it does not transmit more than ~4,000 characters
|
||
in any one second as this will result in the timely display of all information.
|
||
|
||
Hint - When transmitting large amounts of information from an application to PicoTerm (e.g.
|
||
writing information to a LOG file) you could issue a 'ping' request after every few
|
||
thousand characters have been transmitted and then wait for the 'ping' response. In this
|
||
way your application would wait for PicoTerm to clear any backlog before it continued
|
||
ensuring that the PicoTerm display(s) was never more than a second behind the application.
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------
|
||
End of 'PicoTerm_README.txt'
|
||
-------------------------------------------------------------------------------------------------
|