- Support for up to 8 LED display units (8 x up to 4) on the I2C bus
- Extend support for SLC OEM to cover sensor temperature and support both LSU 4.2 and 4.9 versions (automatic detection)
- Generic sensors (9) with calibration tables (4)
- Serial comm for tuning + CAN passthrough
- Extended RC servo range (0.5-2.5ms)
- Add virtual I/Os
- Change 'AND' condition in programmable on/off outputs to use hysteresis: res = ((val & threshold) == hysteresis)
Some of the changes are a bit more involved than the simple description above.
The code is available here. The zip file contains the new s19 file, ini file and a default msq file. To upgrade, the latest port scanner should be used.
Note: Some issues do exist when using this new TinyIOx firmware with old versions of MS2/Extra: TunerStudio and MS2/Extra older than 3.3.0 are not compatible with loading calibration tables in CAN passthrough.
The LED display support is a result of previous work done on the IOx with Rod S: viewtopic.php?f=9&t=1360. This allows the use of up to 8 display units. One of those units is the Adafruit display (https://www.adafruit.com/products/878 for the red display; other colors are available):

The other units are boards I have designed that are yet to be released. They have four 4-digit displays and come in 0.56" height (same as the Adafruit display) and in the smaller 0.36" height:

(thanks to Rod for the picture)
With my boards, the TinyIOx can display up to 32 different values. I'll come back to what exactly can be displayed.
The other major change is the serial port. It is now possible to use the serial port to communicate between the PC and the TinyIOx for tuning and datalogging. That means that the TinyIOx can be used in a standalone configuration where it will not be connected to the CAN bus to an MS2 or MS3 but will be connected to sensors, LED displays, wideband controllers, and other devices.
By default, the serial port is configured in this "tuning" mode so that a standalone setup can upgrade the firmware and continue to be operational. For those who are using the TinyIOx as a CAN device and need to connect to an Innovate chain (LC-1/LC-2), it will be necessary to change this setting after the code upgrade. Obviously, a standalone setup will not allow the use of the serial port for an Innovate chain.
The code changes have resulted in some changes in the menus. The following will go through these changes with some explanation on how to set and use the new parameters.

The "TinyIOx setup" menu now has a "Serial port settings" item. The picture on the left shows the default settings while the picture on the right shows what to change for using the serial port for an Innovate chain. The baud rates are independently set and should not need to be changed from the default.


Since the serial port settings have been set in their own screen, the AFR data settings have been changed slightly. The picture below shows the AFR reading feature disabled.

When configured as a CAN device, the LC-1 AFR settings are the same as they were before.

When configured either as a CAN device or a standalone device, the SLC OEM settings now include an option to read the sensor temperature from the SLC OEM. The temperature is in the datalog and can be displayed on a LED display (as well as the AFR or Lambda value). For an LSU 4.2, the normal operating temperature should be 750 C and for the LSU 4.9, it should be 780 C.

The Extended Control menu and settings remain the same except for the virtual I/Os as will be shown later.

There is a new menu for the LED Displays.

The LED Display settings allow the user to select the type of display connected to the I2C port; it can either be the Adafruit display or one of my boards (QuadLED) shown at the top of the post. For each display, the brightness can be adjusted from 0 to 15 where 0 is the dimmest and 15 the brightest. When the Adafruit display is selected, a single value is displayed and when the QuadLED display is selected, up to 4 values can be displayed.

The possible displayed values are:
- AFR data
- SLC OEM sensor temperature
- Calibrated sensor data
- RPM
- Lambda value
- No data (display turned off)
The calibrated sensor data will be explained next. The RPM value is only available when connected to the CAN bus to an MS2 (with MS2/Extra) or an MS3 (or an ECU based on these 2). The RPM is read from the ECU over the CAN bus.
The 8 displays correspond to the I2C address selected on the displays. Both types of display have 3 address bits (A0-2) that can be selected so the resulting 0-7 addresses correspond to the 1-8 display numbers in the settings. Also, the code assumes that the displays have consecutive addresses starting from 0 without any missing address. So a single display will have to be display 1 at address 0; 2 displays will be at addresses 0 and 1 and displays 1 and 2; and so forth.
The calibrated sensor data is the data from one of the 9 ADC (analog) inputs that has been translated using one of the 4 calibration tables (below in the post). There is also the hardcoded option of using the ADC data as an EGT value; this correspond to an input circuit where 0V = 0C and 5V = 1250C. If another EGT calibration is needed, one of the calibration table will have to be used.

Since the data in the calibration tables has a range of -3276.7 to 3276.7, it is impossible to display the entire range on a 4-digit display. Therefore, it is possible to display the data with 1 decimal value or with no (0) decimal value. With one decimal value, the actual displayed range will be from -99.9 to 999.9 and with no decimal value, the range will be -999 to 3277 (value is rounded up from 3276.7). When the calibrated data is outside the displayable range, the display will show either -9.9.9 or 9.9.9.9. depending on whether the value is negative or positive.
The EGT calibration is hardcoded at no decimal value.
If a calibration has not been chosen for a displayed sensor, the display will show -.-.-.-.
The calibration tables can be uploaded from the Tools menu (TunerStudio adds a "Calibrate TPS" option that is irrelevant and unused with the TinyIOx).

To change the table, it is first necessary to unlock them. They should be locked again once the changes have been made; this will prevent unwanted changes.

Once the tables are unlocked, you will be able to go to the calibration table screen and select which of the 4 tables you want to update.

There are 3 possible types of calibration. The first one is for a NTC thermistor which is what most temperature sensors used on an engine are. The screen is the same one used for the other Megasquirt products and allow the use of predefined sensors or some custom values for a generic thermistor.

The second calibration type is for linear sensors. This only requires entering the voltage and calibrated data for 2 points and TunerStudio will compute the other values. Note that the strange formatting is due to using the same screen for different calibration types.

The last calibration type is the custom calibration. This require the creation of a file that will define the complete calibration curve of the calibration values with respect to the voltage.

Please note that these calibration tables are not saved when updating the firmware nor is the data used to create them. There is also no way to read them back from the TinyIOx at this time. So you will need to note how your tables have been created and you will need to re-upload them after each firmware upgrade. Failure to do so will result in random calibration data.
The last new feature for this new firmware are the virtual I/Os. These are similar to the "Loop" parameters available in MS2/Extra and MS3 but with a wider usage. These can be used in the programmable on/off outputs instead of using actual physical output pins. These can then be used in conditions for other on/off outputs. That allows the use of more than 3 condition to affect the state of an output pin.

It is also possible to use the same virtual I/Os in the digital I/O ports. That way, I/Os on the TinyIOx can be transferred over the CAN bus to and from the ECU without wasting a physical port. If a virtual I/O is used as a channel for an output port, the data from the ECU will be used in another function on the TinyIOx. If it is used as a channel for an input port, the result of another TinyIOx function will transferred to the ECU.

Jean