Using the Data Recorder
<sidebar>Sidebar: What Is a Component?</sidebar>
Contents
Scope Introduction
The Data Scope allows the user to see the results and values from raw data and components such as dials and measures. This data is displayed during simulation and allows you to monitor the state of the various signals plotted to the various scope channels.
The Data Scope can read and display data from various different ports simultaneously during simulation and can be adjusted to view the data at various speeds which allowed for increased accuracy or a larger amount of data to be displayed at any time.
The Scope is very useful for analyzing data as it can accurately display information to identify patterns in the data as well as the speed data is being displayed at. Components such as the DSP range will automatically create their own scope channels allowing for very simple yet powerful means of monitoring and debugging the system.
The Scope window is also used with the ICT (In Circuit Test) which is due to be released early 2014 along with the EB006 version 9 hardware.
Creating a scope group
To create a new scope group you first need to create a global handle type variable to store the reference to the scope group. This is basically a unique number which used to refer to that specific group of the scope window. To do this open the Project Explorer window and select the Globals tab. Next right click the Variables portion of the tree view and select Add New from the menu. In the Create a new variable dialogue that pops up give the variable a meaningful name such as ScopeGroupHandle, then switch the variable type to Object Handle and click OK. You should then get a Object handle variable appearing in the Project Explorer window.
Next we need to assign the handle variable with a value by calling the Simulation API. To do this we add a [[Simulation_Macro_Icon_Properties|simulation macro] icon to the Main flowchart and double click the item on the flowchart to edit the icon's properties. Inside the icon property window we first need to ensure that the Functions tab is selected and then scroll down to the Scope section before clicking the + icon to see all the API calls related to the Scope functionality.
The AddGroup function call creates a new named group of streams on the Scope window. The return value the function call requires a handle type variable, luckily we have already created this above.
The AddStream function call adds a new named stream to the group on the Scope window. The return value the function call requires a handle type variable so we will have to create a new global object handle type variable to store this. This handle must be unique for a single stream so a new object handle variable must exist for every stream on the scope.
When we run the simulation the new group will be created on the scope window ready for data to be streamed in.
By moving the API call from the Main macro to say the simulation initialise event macro we can create a component which will automatically add our new scope group and stream when the component is added to a program. This is the way that components such as the DSP based components add their data to the console window.
Note that a group with no valid stream handles will not show up on the Scope window just to try and avoid potential unnecessary clutter.
Assigning the handle variable with the value of 0 using a Calculation icon or calling the System -> DeleteHandle API call will effectively remove the group or stream from the scope window.
Adding a digital pin or port to a stream
A digital pin or port can be assigned to a stream object handle by using the AddPort function call. The function requires the stream object handle, the port index where PORTA is 0, PORTB is 1 etc. The BitMask parameter is a binary AND mask which selects which bits of the port will be available on the scope stream. The PackMask parameter will move all the active bits together if necessary. The merge parameter allows you to add multiple ports or pins to a single stream.
To monitor a single pin with a LED connected to port pin A0 we can simply call the AddPort function like this.
Here is a simple program to toggle the LED with the signal being replicated on the scope trace.
To monitor a full port with a LED Array connected to PortB we can simply call the AddPort function like this.
Here is a simple program to generate a digital counter on the port with the signal being replicated on the scope trace.
Adding an analogue pin to a stream
An analogue pin can be assigned to a stream object handle by using the AddAnalog function call. The function requires the stream object handle, the analogue channel index where AN0 is 0, AN1 is 1 etc. The subtract parameter allows you to add or subtract multiple analogue signals on a single stream.
To monitor a single analogue pin with a potentiometer connected to pin AN0 we can simply call the AddAnalog function like this.
Here is a simple program to track the value of an analogue input signal based on the position of the potentiometer.