ShiftX3: Difference between revisions
No edit summary |
|||
Line 5: | Line 5: | ||
[[image:shiftx3_3quarter.jpg|1024px]] | [[image:shiftx3_3quarter.jpg|1024px]] | ||
==Compatibility== | ==Compatibility== | ||
Line 31: | Line 25: | ||
* '''Note''': You can install with the 7 segment display above or below the LED strip; see the setup instructions for selecting the orientation. | * '''Note''': You can install with the 7 segment display above or below the LED strip; see the setup instructions for selecting the orientation. | ||
==Dimensions== | |||
* ShiftX3 with enclosure 136 x 32 x 9.46 mm (5.35 x 1.26 x .37 inches) | |||
* Enclosure DXF and PDF drawing [[file:ShiftX3_enclosure.zip]] | |||
[[image:ShiftX3_enclosure_dimensions.jpg|800px]] | |||
===Plug and Play connection=== | ===Plug and Play connection=== |
Latest revision as of 04:56, 5 September 2023
Introduction
Parts in the Kit
- ShiftX3
Compatibility
ShiftX3 is compatible with:
- RaceCapture/Track MK2,MK3
- RaceCapture/Pro MK2,MK3,MK4
- RaceCapture/Apex
- PodiumConnect MK1,MK2
Note: Not compatible with RaceCapture/Track MK1.
Firmware Requirements
ShiftX3 requires RaceCapture/PodiumConnect firmware 2.15.0 or higher. Download the latest firmware
Connection and Installation
Mounting ShiftX3
Attach ShiftX3 with #6 mounting screws and tighten until snug.
- Note: You can install with the 7 segment display above or below the LED strip; see the setup instructions for selecting the orientation.
Dimensions
- ShiftX3 with enclosure 136 x 32 x 9.46 mm (5.35 x 1.26 x .37 inches)
- Enclosure DXF and PDF drawing File:ShiftX3 enclosure.zip
Plug and Play connection
- Note: ShiftX3 requires 12v power, via RaceCapture's own power connection.
ShiftX3 connects effortlessly into our plug and play connector system, using the recommended cabling accessories:
- Dual CAN splitter
- CAN extension (choose your desired length)
- Inline CAN terminator
Connect the Dual CAN splitter into the CAN1/CAN2 port of your main system:
Then connect your CAN extension cable to the "B" port of the Dual CAN splitter:
At the opposite end of the CAN extension, attach the inline CAN terminator:
Finally, attach ShiftX3 to the other end of the Terminator to complete the installation.
Direct wire connection
You can connect ShiftX3 into a non plug and play system by using the following cabling accessories:
Connect the pigtail wires to your system:
- Green to CAN2 High
- White to CAN2 Low
- Red to +12v (same power connection for your system)
- Black to Ground (same ground connection for your system)
Then connect the pigtail to the inline CAN terminator.
Finally, attach ShiftX3 to the other end of the Terminator to complete the installation.
Using ShiftX3
The LEDs and display on ShiftX3 are controlled by RaceCapture's Lua scripting capabilities. Built-in functions provide access to ShiftX3's capabilities. See the ShiftX3 Lua scripting reference for additional details.
Note: Ready to go scripts may be available as a preset. When in the Scripting view, press the Presets button to access a list of pre-configured scripts. Be sure to press the cloud update button to get the latest set of presets.
Once ShiftX3 is powered and connected via CAN bus, the left and right ShiftX3 buttons will automatically trigger corresponding left and right navigation actions on the RaceCapture dashboard.
[file:]
Disco Lights Demo
This is a test script that exercises all of the LEDs and the 7 segment display on ShiftX3. You can use this as a first time test, as it does not rely on any sensors.
Script
Available as a scripting preset - or you can copy and paste this entire script into the scripting window, replacing any existing script.
This script will randomly set LEDs with different colors and the display will update with random numbers.
setTickRate(10) function rndc() return math.random(0,255) end function onTick() for i=0,9,1 do sxSetLed(i,1,rndc(),rndc(),rndc(),0) end -- ascii characters between 0 and 9 sxSetDisplay(0, math.random(0,9)) end
Sequential shift light + Gear indicator
This script configures just a sequential shift light, and update gear display.
Script (Gear is calculated from RPM and Speed)
Available as a scripting preset - or you can copy and paste this entire script into the scripting window, replacing any existing script.
- Default is reading RPM from the channel named "RPM"
- Default is creating the Gear channel with the channel name "Gear"
setTickRate(30) -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --create gear channel gearId = addChannel("Gear", 10, 0, 0, 6) --config shift light sxCfgLinearGraph(0,0,0,7000) --left to right graph, smooth style, 0 - 7000 RPM range sxSetLinearThresh(0,0,3000,0,255,0,0) --green at 3000 RPM sxSetLinearThresh(1,0,5000,255,255,0,0) --yellow at 5000 RPM sxSetLinearThresh(2,0,6000,255,0,0,10) --red+flash at 6000 RPM function onTick() sxUpdateLinearGraph(getChannel("RPM")) -- calculate gear: tire diameter(cm), final gear ratio, individual gear ratios 1-6 local gear = calcGear(62.7, 3.45, 4.23, 2.52, 1.66, 1.22, 1.0, 0.8) setChannel(gearId, gear) sxSetDisplay(0, gear) end
Script (Gear is provided by an existing channel)
Available as a scripting preset - or you can copy and paste this entire script into the scripting window, replacing any existing script.
- Default is reading RPM from the channel named "RPM"
- Default is reading the Gear channel with the channel name "Gear"
setTickRate(30) -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --config shift light sxCfgLinearGraph(0,0,0,7000) --left to right graph, smooth style, 0 - 7000 RPM range sxSetLinearThresh(0,0,3000,0,255,0,0) --green at 3000 RPM sxSetLinearThresh(1,0,5000,255,255,0,0) --yellow at 5000 RPM sxSetLinearThresh(2,0,6000,255,0,0,10) --red+flash at 6000 RPM function onTick() sxUpdateLinearGraph(getChannel("RPM")) sxSetDisplay(0, getChannel("Gear")) end
Shift Light + Twin Alert + Gear Example (Gear calculated by RPM and Speed)
This script shows a more complete example that demos a sequential shift light + two alerts + Gear indicator.
Available as a scripting preset - or you can copy and paste this entire script into the scripting window, replacing any existing script.
Assumptions:
- Engine Temperature on the 1st alert LED, connected to first analog channel - channel name "EngineTemp"
- Oil Pressure on the 2nd alert LED, connected to second analog channel - channel name "OilPress"
- Gear channel already exists, named "Gear"
Edit the script to change the analog channels you want to monitor.
Script
Copy and paste this entire script into the scripting window, replacing any existing script.
setTickRate(30) -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --config shift light sxCfgLinearGraph(0,0,0,7000) --left to right graph, smooth style, 0 - 7000 RPM range sxSetLinearThresh(0,0,3000,0,255,0,0) --green at 3000 RPM sxSetLinearThresh(1,0,5000,255,255,0,0) --yellow at 5000 RPM sxSetLinearThresh(2,0,6000,255,0,0,10) --red+flash at 6000 RPM --configure first alert (right LED) as engine temperature (F) sxSetAlertThresh(0,0,205,255,255,0,0) --yellow warning at 205F sxSetAlertThresh(0,1,225,255,0,0,10) -- red flash at 225F --configure second alert (left LED) as oil pressure (PSI) sxSetAlertThresh(1,0,0,0,0,255,10) --red flash below 15 psi sxSetAlertThresh(1,1,15,255,255,0,5) --yellow flash 15-20 PSI sxSetAlertThresh(1,2,20,0,0,0,0) --above 20, no alert --create gear channel gearId = addChannel("Gear", 10, 0, 0, 6) function onTick() --update RPM sxUpdateLinearGraph(getChannel("RPM")) -- calculate gear: tire diameter(cm), final gear ratio, individual gear ratios 1-6 local gear = calcGear(62.7, 3.45, 4.23, 2.52, 1.66, 1.22, 1.0, 0.8) setChannel(gearId, gear) sxSetDisplay(0, gear) --update engine temp alert sxUpdateAlert(0, getChannel("EngineTemp")) --update oil pressure alert sxUpdateAlert(1, getChannel("OilPress")) end
Shift Light + Twin Alert + Gear Example (Existing gear channel provided by ECU)
This script shows a more complete example that demos a sequential shift light + two alerts.
Available as a scripting preset - or you can copy and paste this entire script into the scripting window, replacing any existing script.
Assumptions:
- Engine Temperature on the 1st alert LED, connected to first analog channel - channel name "EngineTemp"
- Oil Pressure on the 2nd alert LED, connected to second analog channel - channel name "OilPress"
- Gear channel already exists (provided by ECU) and is named "Gear"
Edit the script to change the analog channels you want to monitor.
Script
Copy and paste this entire script into the scripting window, replacing any existing script.
setTickRate(30) -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --config shift light sxCfgLinearGraph(0,0,0,7000) --left to right graph, smooth style, 0 - 7000 RPM range sxSetLinearThresh(0,0,3000,0,255,0,0) --green at 3000 RPM sxSetLinearThresh(1,0,5000,255,255,0,0) --yellow at 5000 RPM sxSetLinearThresh(2,0,6000,255,0,0,10) --red+flash at 6000 RPM --configure first alert (right LED) as engine temperature (F) sxSetAlertThresh(0,0,205,255,255,0,0) --yellow warning at 205F sxSetAlertThresh(0,1,225,255,0,0,10) -- red flash at 225F --configure second alert (left LED) as oil pressure (PSI) sxSetAlertThresh(1,0,0,0,0,255,10) --red flash below 15 psi sxSetAlertThresh(1,1,15,255,255,0,5) --yellow flash 15-20 PSI sxSetAlertThresh(1,2,20,0,0,0,0) --above 20, no alert function onTick() sxUpdateLinearGraph(getChannel("RPM")) sxSetDisplay(0, getChannel("Gear")) --update engine temp alert sxUpdateAlert(0, getChannel("EngineTemp")) --update oil pressure alert sxUpdateAlert(1, getChannel("OilPress")) end
Predictive Lap Timer Indicator
This script enables predictive lap time visualization.
How it works
A bar extends left or right from the center of the linear graph:
- Green bar extending to the right indicates you're beating the best time
- Red bar extending to the left means you're falling behind.
- When you're close to the best time, the center blue LED illuminates.
Notes:
- The script is designed for a +/- 10 second maximum delta - so if you're ahead or behind by 10 seconds, the linear graph will be fully illuminated center-right, or center-left.
- You will need to complete a a full lap to train the predictive timer before the graph will update.
Script
Copy and paste this entire script into the scripting window, replacing any existing script.
-- Predictive time visualizer --save best lap time bestTime = 0 -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --config shift light sxCfgLinearGraph(1,0,0,200) --center-out graph, linear style, +/- 10.0 seconds in 0.1 sec resolution sxSetLinearThresh(0,0,0,255,0,0,0) --red if you're falling behind best lap sxSetLinearThresh(1,0,80,0,0,255,0) --blue if you're close to best lap sxSetLinearThresh(2,0,110,0,255,0,0) --green if you're beating best lap setTickRate(30) function onTick() local predTime = getPredTime() local timeDiff = (bestTime - predTime) * 60 -- rail values timeDiff = math.max(timeDiff, -10) timeDiff = math.min(timeDiff, 10) --scale values from +/- 10 sec to a 0-200 scale timeDiff = (timeDiff + 10) * 10 sxUpdateLinearGraph(timeDiff) --update best lap time if an updated lap time is available local lastLapTime = getLapTime() if lastLapTime < bestTime or bestTime == 0 then bestTime = lastLapTime end end
Boost Gauge
This script visualizes a single analog input channel on the linear graph.
How it works
The script configures the linear graph, then reads an analog channel and updates the graph with the current value. In this case, the value represents boost level measured from a MAP sensor.
Assumptions
- MAP sensor is on the channel named "MAP"
Script
Copy and paste this entire script into the scripting window, replacing any existing script.
setTickRate(30) -- Set ShiftX3 configuration parameters with default parameters -- orientation: 0=normal, 1=inverted (display above LED bar) -- brightness: 0-100%, 0 = auto brightness -- can bus: 0=CAN1, 1=CAN2 sxSetConfig(0,0,1) --config shift light sxCfgLinearGraph(0,0,0, 20) --left to right graph, linear style, 0 - 20 PSI boost sxSetLinearThresh(0,0,0,0,255,0,0) --green starting at no boost sxSetLinearThresh(1,0,10,255,255,0,0) --yellow starting at 10 PSI boost sxSetLinearThresh(2,0,15,255,0,0,10) --red+flash at 15 PSI boost function onTick() local map = getChannel("MAP") if map ~= nil then --convert to PSI boost local boost = math.max(map - 100, 0) * .145038 sxUpdateLinearGraph(boost) end end
ShiftX3 CAN bus API
Overview
The CAN bus API provides the configuration and control interface for ShiftX3.
Two styles of control are available:
- Low level control of LEDs - the ability to discretely set LED color and flash behavior
- High level control - configuring alert thresholds and linear graph up front, and then providing simple value updates
Hardware / CAN configuration
CAN Termination
CAN termination is disabled by default. To enable termination, bridge the CAN Term jumper on the bottom of the ShiftX3 circuit board.
CAN Base Address
The default CAN base address is 931328 (0xE3600). You can change it by breaking the trace bridging the ADR1 jumper on the bottom of the ShiftX3 circuit board.
ADR1 jumper setting | Base address |
---|---|
Closed (Default setting) | 931328 (0xE3600) |
Open | 931584 (0xE3700) |
CAN Baud Rate
The default CAN baud rate is 1MB. You can switch to 500K by breaking the ADR2 Jumper on the bottom of the ShiftX3 board.
ADR2 jumper setting | Baud Rate |
---|---|
Closed (Default setting) | 1MB |
Open | 500K |
ShiftX3 CAN Protocol
Configuration / Runtime Options
Set Configuration Parameters Group 1
Sets various configuration options.
CAN ID: Base + 3
Offset | What | Value |
---|---|---|
0 | Brightness | 0 - 100; 1 = dimmest; 100 = brightest; 0 = automatic brightness control using built-in light sensor. |
1 | Automatic brightness scaling (Optional) | 0-255; default=61. adjust this value to adjust the relative gain of the built-in light sensor when in automatic brightness mode. |
2 | Display orientation | 0: 7-segment display is below shift light; 1: 7-segment display is above shift light |
Set Display
Directly sets the value of the 7 segment display.
CAN ID: Base + 50
Offset | What | Value |
---|---|---|
0 | Digit index | 0 (must be 0) |
1 | Character | ASCII value of character to display |
The value of the display is set by the ASCII coded value. To set a numeric value, offset the value by 48: e.g. 48 = 0, 49 = 1, etc.
Most alphanumeric characters are supported as well, also via ASCII representation.
Set Discrete LED
A low level function to directly set any LED on the device.
CAN ID: Base + 10
Offset | What | Value |
---|---|---|
0 | LED index | 0 -> # of LEDs on device |
1 | Number of LEDs to set | 0 -> # of LEDs on device (0 = set all remaining) |
2 | Red | 0 - 255 |
3 | Green | 0 - 255 |
4 | Blue | 0 - 255 |
5 | Flash | 0-10Hz (0 = full on) |
Alert Indicators
Alert Indicators are typically single LEDs or a group of LEDs treated as one logical unit. This is defined by the hardware configuration of the device.
Set Alert
Directly set an alert indicator
CAN ID: Base + 20
Offset | What | Value |
---|---|---|
0 | Alert ID | 0 -> # of Alert indicators |
1 | Red | 0 - 255 |
2 | Green | 0 - 255 |
3 | Blue | 0 - 255 |
4 | Flash | 0-10Hz (0 = full on) |
Set Alert Threshold
Configures an alert threshold. Up to 5 thresholds can be configured per alert indicator.
Notes:
- If the current value is greater than the last threshold, then the last threshold is selected.
- The first threshold may have a threshold value >= 0; remaining thresholds must be > 0
CAN ID: Base + 21
Offset | What | Value |
---|---|---|
0 | Alert ID | 0 -> # of Alert indicators |
1 | Threshold ID | 0 - 4 |
2 | Threshold (low byte) | |
3 | Threshold (high byte) | |
4 | Red | 0 - 255 |
5 | Green | 0 - 255 |
6 | Blue | 0 - 255 |
7 | Flash Hz | 0 - 10 (0 = full on) |
Update Current Alert Value
Updates the current value for an alert indicator. The configured alert thresholds will be applied to the current value.
CAN ID: Base + 22
Offset | What | Value |
---|---|---|
0 | Alert ID | 0 -> # of Alert indicators |
1 | Value (low byte) | |
2 | Value (high byte) |
Linear Graph
The linear graph mode provides visualizations for common scenarios:
- Sequential RPM shift light where the progression is stepped
- Linear bar graph to linearly indicate a sensor value
- Center left/right graph to indicate +/- performance against a reference - such as visualizing current predictive time vs best time
Power up default configuration
Upon power up the linear graph is configured:
- Rendering style: left->right
- Linear style: stepped
- Low Range: 0
- High Range: N/A
- Threshold :
- Threshold value: 3000 / segment length: 3 / color RGB: (0, 255, 0) / flash: 0
- Threshold value: 5000 / segment length: 5 / color RGB: (0, 255, 255) / flash: 0
- Threshold value: 7000 / segment length: 7 / color RGB: (255, 0, 0) / flash: 5
Configure Linear Graph
Configures the options for the linear graph portion of the device.
Rendering style:
- If left->right, linear graph illuminates left to right
- If centered, values below the mid-point in the range extend from the center to the left, and values above the mid-point extend from the center to the right.
- If right->left, linear graph illuminates right to left
Linear style:
- if smooth, graph length is updated smoothly by interpolating the current value in-between LEDs
- If stepped, creates the visual effect of stepped progressions by setting the segment length of the threshold configuration. High Range of configuration is ignored.
CAN ID: Base + 40
Offset | What | Value |
---|---|---|
0 | Rendering Style | 0 = left->right, 1=center, 2=right->left |
1 | Linear Style | 0 = Smooth / interpolated, 1 = stepped |
2 | Low Range (low byte) | |
3 | Low Range (high byte) | |
4 | High Range (low byte) | (ignored if linear style = stepped) |
5 | High Range (high byte) | (ignored if linear style = stepped) |
Set Linear Graph Threshold
Configures a linear threshold. Up to 5 thresholds can be configured
Notes:
- If the current value is greater than the last threshold, then the last threshold is selected.
- The first threshold may have a threshold value >= 0; remaining thresholds must be > 0
CAN ID: Base + 41
Offset | What | Value |
---|---|---|
0 | Threshold ID | 0 - 4 |
1 | Segment Length | 0 -> # of LEDs on device (ignored if linear style is ‘smooth’) |
2 | Threshold (low byte) | |
3 | Threshold (high byte) | |
4 | Red | 0 - 255 |
5 | Green | 0 - 255 |
6 | Blue | 0 - 255 |
7 | Flash Hz | 0 - 10 (0 = full on) |
Update Current Linear Graph Value
Updates the current value for the linear graph
CAN ID: Base + 42
Offset | What | Value |
---|---|---|
0 | Value (low byte) | |
1 | Value (high byte) |
Notifications
Notifications related to events broadcasted from ShiftX3
Announcement
Broadcast by the device upon power up
CAN ID: Base + 0
Offset | What | Value |
---|---|---|
0 | Total LEDs | Total number of LEDs on the device |
1 | Alert Indicators | Number of logical alert indicators |
2 | Linear Bar Graph Length | Number of LEDs in linear graph |
3 | Major Version | Firmware major version number |
4 | Minor Version | Firmware minor version number |
5 | Patch Version | Firmware patch version number |
Statistics
Statistics information, broadcast periodically by device
CAN ID: Base + 2
Offset | What | Value |
---|---|---|
0 | Major Version | Firmware major version number |
1 | Minor Version | Firmware minor version number |
2 | Patch Version | Firmware patch version number |
Button State
Indicates a change in the button state
CAN ID: Base + 60
Offset | What | Value |
---|---|---|
0 | Button state | 1 = button is pressed; 0 = button |
1 | Button ID | ID of button |