Trinity V2 Fan Controller V1.5 Software Update Log

TL;DR: New TFC V1.5 software update fixes some nasty bugs!

While I wait for Nifty Shifter parts to arrive, I spent some free time and finally finished the much needed V1.5 Software Update for Trinity V2 Fan Controllers. As it turns out, there were quite a few pretty nasty bugs in v1.4 so I’m glad to have stomped all the ones I’ve found so far.

So, the summary then; Added a back option to the main sub menu so you can actually go home, tweaked the light sensor value to be more sensitive, Temperature will be more accurate and faster now, fixed an issue where active relays would mess with the temperature, fixed an issue with the GoHome timer getting stuck, and fixed an issue with the Manual Temp Shift option causing havoc when trying to adjust fan temps.

So, from the top then. Figuring out the actual temperature based off a thermistors resistance is tricky, but with some hella nerdy formulas it can be done. I have switched from BetaC to the Steinhart-Hart equation which is the standard for calculating a temp sensors resistance curve. This formula is a lot more accurate then the previous, especially at the far ends of the scale, so expect to see the real temp throughout the entire range now.

With this formula update, so too has the User Adjustable Temp Probe variables been updated. There are now 3 inputs, Coefficient A, B, and C to be adjusted. The menus are broken down into +-0.050 and +-0.001, indicated by the decimal in the title screen, to adjust the numbers more efficiently. To find these 3 numbers you will first need 3 data points of your sensors resistance at a specific temperature, spaced fairly evenly and at least 10ºC apart.

These will get fed into a Steinhart Calculator(Link Below) and it will give you the 3 Coefficients to put into the TFC. Notice these numbers are at negative powers, but still get entered into the TFC directly as shown; A = e-3, B = e-4, C=e-7. It’s a lot I know, but this will guarantee an extremely accurate estimated curve for nearly any sensor you’d like to use through only 3 points.

Accuracy was a common theme here as I have adjusted a lot of other things, like getting a better reference voltage which helps us find better resistance, adjusting the ohm calculation accuracy down to 0.5% now, adjusted the analog limits to stay within range better, and even figured out a basic way to remove temp spikes caused by added relay current.

So more on that last one. I didn’t find this out until many months later, but apparently you do not want to run your sensor analog ground through the same ground wire that might be subject to “large” load changes, in this case the relay coils. Each coil can pull 100mA or more, and each one would throw off the resistance that we read from the sensor. This is problematic because when a relay was activated, the temp would artificially rise and might even trigger the next relay, continuing a domino effect and scaring the crap out of a watchful user. Seeing 245ºF when you’re expecting 225ºF is a big difference! haha.

So I got stupid nerdy on this a while ago and tried to calculate this load based offset curve across the whole input range and eventually got down to a formula that could be offset by the amount of current flowing for near perfect correction, but the issue then became how to calculate the relay current without a reference resistor. The temp sensor changes and the relay current actually changes a bit too as it warms up which just over complicated things too much. So I went KISS and just took the difference before and after a relay is activated and just subtracted that from the current temp for a “close enough” approach. In short, the temp shouldn’t jump around when fans are turned on now, yay.

In the previous update, the temp reading had a fair bit of averaging applied to keep the reading stabile. This also masked the relay problem a bit making it harder to notice. Well now that we have fixed that best we could, I switched to an exponential averaging technique which is dead-nuts simple, requires fewer resources than the old style, and will respond to new temperature faster while still staying fairly smooth. In short, more weight is applied to newer readings, so the average is more biased towards the current reading. Also with infinite-impulse-response based averaging, we only need to keep track of 2 variables instead of an array of 10 or more which saves precious space!

So onto some more mischievous bugs now! I found an issue with the GoHome menu timer that would cause it to bug out and leave the user stuck in the home screen till a power cycle. I found a check flag with a wrong comparator (== instead of = for a normal flag set, opps,) but that still wasn’t it. After digging deeper, I found that the wait time variable was being overloaded and once it looped back to 0 it would always be lower than the current time, trapping the user in the home screen.

For the super nerds, the time variable is stored as a byte (0 – 255 seconds,) then it is expanded to milliseconds (* 1000), and finally added to the millis flag so it knew what time to go home. Well when arduino did the math, even though the final variable was a 32bit, it was only doing the millisecond upscaling at 16bit, so at 35 seconds the 16bit was overloaded and giving us a bogus smaller number. The fix was to force it to convert to 32bit math and then all was happy again, sheesh.

Now, if that wasn’t annoying enough, I also found a huge bug with the Manual Temp Offset Shift variable that made it basically unusable and a little dangerous. So in manual mode, you are allowed to pick the on and off temp for all 3 fans. That means you are trying to juggle 6 different temps which is a drag if you just want to move your range up or down a little bit. Well, the Shift variable would let you modify everything up or down by what you select, then you could go in and do more fine tuning later if needed.

Well the first issue was that adding 1 to shift actually added 2 which was our first sign of an issue. Second, if you then tried to edit any of the temps with Shift set, the temps would cycle wildly and you couldn’t adjust them at all. This was especially not good because the EEPROM that saved this value only has a limited lifecycle of like 100k so you really don’t want to go saving over something tons of times per second! Issue turned out to be that Shift was adding to the main temp value every loop, so when we got back to the edit menu loop, that value would be different and so it would save the new value and it would continue again. Now I subtract the offset before it is saved and everything is happy again.

I also adjusted a few things to save some space since we’ve been floating around the 99% full mark for a while, like moving some simple repeated tasks or menus into their own function, and in one case doing a bitshift for division since it was smaller in size then the regular way. Oh the fun of pushing things to their limits, that’s why I’m so relieved that I have tons of space on the REMs now so I don’t have to do this all day! Anyway, my brain is mush so enjoy the TFC V2 closer to what it’s full potential should be now!

Trinity V2 Fan Controller v1.5 update log:

  • switched from betaC to Steinhart equation
  • added better ref voltage calc
  • switched to exponential averaging
  • fixed analog limits
  • 0.5% ohm accuracy
  • fixed bool averaging
  • basic relay drop temp correction
  • added main menu back option
  • fixed GoHome timer overloading on certain numbers
  • adjusted dim sensitivity
  • editTimer Functioned for space
  • tOffset function to fix temp looping and saving issues
  • updated custom temp edit menu to Co A,B,C

Renduinix + II V9.10 change log

Alright, the wait is finally over, Renduinix + II V9.10 is finally ready for testing on V5 and up REMs!

So this update just adds a few little features and improvements, but I think it’s still an exciting one nonetheless. New Gauges for the 4.0L including IAC Rotations and stock o2 AFR, some other gauge tweaks, and the ability to go back one gauge by holding the button down!

The IAC gauge is layed out similar to how STFT and LTFT work, except all the math is done on the REM side for this one. It starts at 128 which is the “middle,” and then the number will count up or down to the number of rotations the ECU is commanding as well as showing an Arrow any time a step command is sent. It’s quite possible that over time this number will hit a limit at 0(Closing) or 255(Opening), so you’ll just have to watch the arrows at that point, but at least it’s something!

The gauge cannot account for rapid fire pulses so if the ECU does some crazy extend or retract routine, this gauge will miss most of it, thank the basic data stream implementations for that. Let me know what you see on your Jeep, as this is a never before seen gauge and even I don’t fully know what it does yet!

Next on the fun list is estimated Air Fuel Ratio (AFR) from the stock o2 sensor! This gauge attempts to put a realistic value to the otherwise basically meaningless o2 Voltage so you can understand it better. For the noobies in the group, 14.7 AFR is a “perfect burn,” while a lower AFR is more fuel (Richer) and a higher AFR is less fuel (Leaner.) The stock o2 sensor is a Narrowband sensor meaning it can only see a fairly small window of AFR, around 14 to 16, and it’s exact repeatability is pretty poor so don’t try tuning your vehicle off this exact number as exhaust temp can sway this number a bit.

This estimation was based off my logs of a stock NTK o2 Sensor being compared to my AEM X-series Wideband, so other brands may have different “profiles.” TBH, these things are really only on/off switches to show Rich or Lean and that’s it, so enjoy this “relative narrowband AFR” gauge, lol.

Besides that, I have updated the way the Rich/Lean gauge works since it seemed to confuse noobies. Snap-on was just using a bit related to the exhaust loop, but it only updated in closed loop making me think the bit was really telling us which directly the closed loop correction was going (STFT,) rather than telling us the actual state of the sensor. A small detail, but an important one if you’re trying to diagnose a goofy o2 sensor that can’t get closed loop. My updated gauge looks at the sensor directly to give the proper result under any loop mode now.

In smaller areas, I went back to only using the main Distributor bit so it doesn’t do goofy things when the engine is off. I have removed the A/C Clutch reading from 4.0L since that bit was actually related to A/C idle compensation and reacts quite strangely, only updating when the TPS is closed. I added the option to go back one gauge in the gauge page by holding down a button since it was pretty easy to skip the gauge you wanted and have to do it all again. This however required me to completely revamp how button state detection worked, since now I needed to trigger an advance on the falling edge of a button as to not trigger before a possible hold request was received. Also going both ways on the gauge list required revamping how the out-of-bounds checks worked so that function is now much cooler and pretty too. Overall just some bonuses and fixes the make the REM even cooler than it already was!

Let me know what cool things you find with this new data!

Renduinix+ II V9.10 V5 change log:

  • added IAC gauge and reading
  • Rich/Lean from o2 directly now
  • fixed dizzy gauge incorrectly spinning
  • updated A/C gauge
  • added button state tracking code
  • hold button to go back 1 gauge
  • updated gaugeSkip function
  • estimated AFR gauge from stock o2
  • added more to ECU Readings list

Renduinx II V9.00 is a go!

TL;DR: Renduinix V9.00 is finally live for testing!

Alright, I’m starting to get sick of this update so I think it’s time to go public! As usual, with new code comes a new possibility for bugs, so consider this beta until it’s been proven in the wild. This will work for all REM II + models (V5 – V5.2.) Available on the Downloads page!

If you like the idea of testing new features with the possibility of issues or glitches then give it a go! If you’d like to stay on the safe side, give it a few weeks and see if other users report issues which I can make a hotfix for and release afterwards. You can always go back to older software if needed!

So, onto the goods. For those that don’t know, the REM runs off my custom written Renduinix software and the last time this got a major update was nearly a year ago with v0.891! Since then I’ve wanted to make some major revisions and updates to really fill out the software, so you can consider this update to be a bit of an overhaul. To reflect that, we are finally on to V9.00 baby! No more are the days of beta software numbering, we’re moving up to the real deal.

The short and sweet is that V9.00 is awesome. I’ve added brand new features such as “Readings,” “Tests,” and finally super basic DMM support. I’ve changed up and unified some major menu structures so settings should be much more fluent to navigate. ECU data reading is smarter, and I’ve completely reworked how CELs are detected though I’m unsure how stable this feature is yet. Some readings have more options such as RPM Rounding, Fuel Trim Zeroing, and the A/C gauges has been combined. This is also the first official update to support reading the Bendix 9 ABS system, though a special Renix adapter will be required to make the physical connection. Support for 2.5L TCUs should also work now!

Diving a little deeper, the Readings page should be a welcome sight for deeper diagnostics. All available readings are displayed in a scrollable list and some are broken down into multiple types so you can see things like MAP Pressure as well as MAP Voltage. Scrolling all the way down, you will find Native Error Codes for the selected device which is something I haven’t seen any other Renix scan tool do! These don’t trigger the CEL yet, but it’s worth scrolling down to see what your ECU is detecting, you might be surprised!

Tests is a fun new menu that incorporates some visual diagnostics for a couple sensors. You can monitor if your TPS is working and in sync between ECU and TCU, same for the NSS too! For anyone running the Wideband converter, I’ve added a mode to test if the Output signal is matching the ECUs o2 input so there is less guess work (this only works with the engine running because Renix is goofy)! Side note, my custom Wideband Closed Loop Helper code is also included, so if the ECU is about to fail from a rich condition, the AFR target is automatically adjusted to compensate and will slowly increase back to target when possible!

I finally threw together a really basic DMM mode because a lot of folks ordered that option but haven’t been able to make use of it yet! You can now switch between Volts or Ohms view. You have a live graphing output, a Max reading which can be reset, as well as the option to pause the screen if you wish to temporarily save a reading.

A personal little milestone of mine was completely reworking how ECU data parsing is done. Phil’s code was a great starting point, but it’s shortcomings always nagged at me for not being “proper.” Now it’s not limited by needing to know the ECUs program number, nor the exact stream length. It processes the Renix Protocol the way it should properly be handled, and could even handle a dynamic stream length if needed. It also doesn’t have to oversample in hopes of catching the whole stream, so consider it more efficient and precise! It also processes data as it arrives, rather than waiting for the entire frame which could technically be used to progressively update the data, but this would probably be annoying and only useful for logging purposes.

There’s also a lot of little background code refactoring as I try to make it less of a disaster. Button code has been revamped to be cleaner and allow easy support for hold repeating! I’ve tried to unify how special menus works and display, as well as having less hidden options so it’s easier to see what there is to adjust. Overall this is a massive step towards a super decked out scanner, so I’m curious to see what everyone thinks!

Renduinx II V9.00 Update Log: (I’m sure there’s some other little things but you get the idea)

  • Revamped ECU data parsing (Dynamic and Live Processing for 100% proper reading)
  • SD data logging test code (Not Active Yet)
  • fixed MAP diagnose page (Skipped before)
  • added Sensor Readings and Sensor Tests Menu
  • added wideband closed loop helper (variable AFR target if closed loop is about to fail)
  • usb passthrough mode no longer emulated (Echos exact data and timing now)
  • added ABS support (Requires new ABS Renix Adapter)
  • additional readings in readings menu (and Native Error Codes!)
  • fixed spark retard zeroing (Knock bit helps with data sync calc issues)
  • unified button check func (much easier to write, but can cause downstream skips if not paying attention)
  • rpm rounding and fuel trim zero options
  • signal out test menu for Wideband
  • CEL Routine Overhaul (In Beta)
  • CEL History test code (Not Active Yet)
  • Fixed Fan A/C trigger issue
  • restructured options menus (Scrolling)
  • proper button repeating (Saves your fingers)
  • combo A/C gauge
  • removed combo loop gauge (pretty useless legacy idea)
  • added menu back option (helps menu navigation a lot)
  • basic DMM support (Ohms are going to be off a bit)
  • removed nss from gauge screen (cleaning up test code)

Renduinix II V0.88 update, the Data is in!

Oh me oh my, goodies inbound! Renduinix II V0.88 is finally ready! Links in the website.
So, what’s new you may ask, well the answer is lots! Correct data across the board, New 2.5L gauge, Fill-up fixes, CEL Tracking menu, and diagnose menu overhaul. This update was more of a cleanup since my codes been getting pretty messy, so now things are starting to look a bit more palatable in the important areas.
Due to all my recent bit hunting, I actually found a few bugs in my old data code, and even found some new readings as well! EGR should now display correctly for the first time ever (can 2.5L guys confirm this?) and I even found a bit related to the 2.5L Power Steering Pump High Pressure Switch which is awesome so you can watch that go high and low on the gauge page. Now that I’m using BitReads and properly splitting the 2.5L/4.0L streams, it’s much easier to keep track and update them as needed.
The Fuel-up menu has gotten some background fixes, and now displays the consumption error as a base zero instead of 100. I have also added the option for manual or no fuel correction in the vehicle menu now incase the fill-up code is still wonky. Hopefully fixed NSS based saving triggers, but I’m still not sure how much more accurate it makes anything.
I think I may have finally nailed my stupid lean start-up issue with my wideband converter code. Pretty sure it was going closed loop before the sensor was ready, and it defaults rich so the ECU was leaning the hell out of it to try and get a change that would never happen. Now if no signal is present it will default lean so it will run rich instead of lean and you can at least drive it.
TCU Screen has been slightly adjusted so the Error bytes in the bottom will now read the number of errors, not the raw byte, and the TCU error screen is hopefully not buggy when scrolling anymore. The GEAR gauge has been updated to show the Torque Converter Lock-up as well for a more useful reading.
The first page of Diagnose now features the newly added REM Code Tracker which will show why that pesky CEL is actually on now! Hitting “i” will bring you to the ECU error screen so you can scroll through previous and current codes that were stored during the current trip. This will probably need some extra tuning so don’t loose your mind over it for now, but take a look and see what you find. I will be adding more advanced errors to this in the next update.
I have updated the CEL to run on all menus now, with the only exception being that in the TCU screen it will only be for TCU and in the diagnose menu it will only light up if the currently selected sensor is acting up. It can still be tuned or shut-off if needed.
The Diagnose menu has gotten a bit of an overhaul with newly discovered mystery bits and other useful readings being scattered through out. It’s not as clean looking, but I think not having to switch pages is worth having more data. The CTS and IAT now show some weird offset variable for what it’s worth. 4.0L guys get an experimental Spark Retard reading which is using a knock mask mystery byte i found. It will show a K when the knock bit is active. There is also the Injector Warmup offset displayed so you can see why cold startup is so obnoxiously rich. 2.5L guys get an RPM offset which may be useful if yours doesn’t want to idle occasionally, and I think some sort of ISM offset so you can watch it play with the TPS.
The Mystery Bytes page has been overhauled to show remaining mysteries as well as Mystery BITs now too. Each byte can hold 8 Bits, which will correlate to 8 boxes that will light up when they read 1. If you care, they are in LSB order with the top row starting from bit 7 and the bottom row starting from bit 3. 2.5L and 4.0L will also show their appropriate mysteries too!
The Detected ECU page has been updated to BitReads and RAW bits for 2.5L. 2.5L guys, if you could tell me your vehicle specs and the number it reads, maybe I can figure out what they actually mean!
In the littler things, I’ve been switching to more function based coding which makes the front end look a little more readable. I have updated LCD character creation a bit so the Temp chars only take up 1 CG Ram spot now, and Arrows have been switched over to the LCD library versions to save 2 more spots. I also adjusted a TCU port value so now everything is finally in one little chunk of code so porting between v4 and v4.1 is a snap and a clock speed change now.
There’s still a lot more to be done, but this seems like a good stopping point for now. I’ve just been feeling guilty that not all the readings have been accurate until now, but hopefully this is the update to finally fix that! Well, as always, let me know what you think and if you find any bugs! Guess I’m out of excuses so I think it’s high time I finally start work on V5 next week!
Renduinix II V0.88 Plus Update Log:
– fixed NSS based fuel saving
– AFR 1 dec
– fill-up menu fixes
– Wideband defaults to Lean
– Separate 4.0L/2.5L calcs
– Fixed EGR
– switched calcs to bitRead
– updated TCU stream
– Functions Tab
– cleaned up Get_Data
– updated TCU error display
– updated Gear gauge
– updated Mystery Bytes
– Digital Bytes display as bit symbols
– added User Fuel Cal option
– added trip ECU CEL Error memory
– Diagnose menu updated
– 2.5L PS Sw Gauge added
– CEL runs on all screens
– tidier createChar code
– easier porting defines

Renduinix V0.87 ready for action!

TL;DR: Renduinix II V0.87, Tank tracking, Sensor Graphing, Wideband support, and an NSS Gauge. woohoo!

New Renduinix II Update V0.87 inbound! Lots of goodies in here and I’m getting sick of it so time to push it! Get it here:

Main changes include Tank Fuel and Mileage Tracking(Majorly Beta), Wideband o2 sensor support, Diagnostic Sensor graphing, a new found NSS gauge, and lots of fixes!

I found some funny bugs in the Fan Control code so I’ve done a lot of rework. First off, GO CHECK YOUR SETTINGS, I have updated how the temperature is saved so they won’t read the same. It now saves raw just like the ECU reading, so switching from ºC to ºF won’t toast your engine. I found some goofs on pin selection as well, so now selecting a pin should actually select that pin for a fan.

I have also added 2 SPEED FAN SUPPORT, so for those that need low to turn off when high turns on, that is now possible. All in the Fan Setup menu so have a peek! Also turned all the fan menus into functions so coding is streamlined and guaranteed to be consistent, yay!

I’ve gotten a few reports of the Bluetooth app lagging behind the REM on some phones, so I have added BT Speed options now. If you notice a delay then turn the speed to slow and you should stay current.

Added an option for the CEL to become a shift light for those M/T guys that want it. Also adjusted the 2.5L stream length so it should read smoother now. The vHT CEL has been adjusted so it doesn’t trigger during WOT when the ECU commands it off. I’ve also revamped the vHT math so it should be much more accurate, even at very low voltages(damn diode drop).

The Diagnose menu now has SENSOR GRAPHING. This is SO cool. So if you hit the “M” Mode button, you have the option to see the Min/Max of the sensor as usual, but hit it again and you get a sick nasty 8 block graph to watch! It’s most useful on the o2 sensor, so go check it out! For now, old readings are retained forever, so switching sensors will look funny at first. Since these are custom characters, it will override the Temp symbols so they get replaced with regular letters until you hit home.

The biggest(and most complicated) update by far is the new Tank Tracking and Fillup features! Keeping tabs on a virtual fuel tank is rather complicated, especially when you don’t want to burn out the EEPROM by writing to it constantly. So, in the diagnose menu there is the current trip Miles/Fuel, but pressing “M” shows the saved Miles/Fuel over the whole tank now! These values only save ever 0.5Miles/0.05Gallons, or if you shift into Park.

Pressing “M” once more will show estimated Miles/Gallons till empty! NOW, this is extremely beta so take all this with a grain of salt. These readings won’t be accurate until the fuel tank is properly calculated, and honestly I haven’t had the time to road test this much yet. The accuracy will depend on the Fuel Calibration and how many trips you take during a tank, as each trip increases the error percentage when it comes to saving the Miles/Gallons used. I have tried offsetting the latter by saving the values when it detects the vehicle is in park so A/T guys might have more accuracy. I can’t save too often as the EEPROM has limited life, and there are no easy ways to implement saving values before the REM loses power so this will have to do for now.

I’ve also added the option to show the Trip AVG MPG or the Tank AVG MPG on the AVG Gauge for those that want it so check the unit menu for that!

Check the Vehicle menu and set your tank size first. So now when it comes time to Fill-up, there is a new Fill-up menu in settings! You have the option of a complete FIll-Up, Partial Fill, and a Missed Fill. Input the amount of fuel added and the fill type, then hit save. The REM will attempt to keep track of a digital tank and update it depending on what you pick. The REM needs two consecutive complete Fill-ups before it will update the Fuel Calibration displayed in %. If the Tank tracking error was low, then you should be able to get a much more accurate GPH/MPG/AVG reading once the fuel cal has updated. I have no idea how well this will work yet so feedback is welcome!

Going along with the previous post, I was able to crack another segment of the 4.0L Stream now that the byte storage makes more sense! This one was completely undocumented so this is awesome! So I found hiding in the A/C Byte was also a single Bit that changed with the shifter. As it turns out, this looks to be connected to the Neutral Safety Switch! So the NSS gauge will show if the Jeep is in Park/Neutral or if it’s in a drive gear. The cool thing here is that this could help with no start situations to see if the NSS is preventing a start! This is also exciting because it’s an ECU value and is completely separate from the TCU! I have no idea what this does on M/T jeeps, so let me know! I would assume it will always read park though.

Last big feature is Wideband o2 Sensor support! So now in the advanced settings you can turn on Wideband AFR readings with 2 AEM profiles supported, and pick which pin it reads on. You will need to use the voltage divider to safely read the 5v analog signal from your gauge. This could conflict with Fan Control so make sure everything is on separate pins! Turning this on will display an AFR gauge and output a Narrowband signal on the Signal Out Pin for tuning purposes!

In the Diagnose menu there is a new AFR menu which allows you to see the Target AFR for the narrow band signal, and the AFR range that the signal will cross over, along with AFR and o2 graphing. Hitting the “E” button brings you to the edit menu for these values. The Target AFR is the ratio where the o2 output will switch from rich to lean so changing this will adjust your fuel trim. The AFR Range allows you to adjust how quickly the output will change from rich to lean. A smaller range will mean a more sensitive signal in a more narrow AFR range.

Since the Signal Out is it’s own pin, you could cut the Signal trace to separate it from A2 and solder a wire to the jumper pad to have 4 free lines instead of 3. The Signal Out will run to the stock o2 signal wire in the harness. I cut an old o2 sensor pigtail and just wired onto that so I could go back to stock if needed. If you need help or any custom features, let me know so I can add them!

Now as a little safety bonus, I have also added a Voltage Brownout feature for REM Clocks that suffer from toasty regulators. I found an interesting pin on the teensy I can use to monitor the input voltage, so when the pin starts to dip from an overheating regulator, the code will automatically set the Clock to the lowest brightness level so the regulator can recover. I have done some bench testing and it seems to work rather well at keeping the unit functional, but it may need some tuning to not go off undesired. So if you notice your clock get really dim when you didn’t mess with it, the REM probably turned it down due to a voltage drop. Going into the clock menu or using the auto dim feature will set it back.

That’s all for now, hoping to have lots more in the next update when I finally get the time so let me know what ya think!

-Renduinix II V0.87+ Change Log:
– added LCD formatting functions
– fan menu functions
– fixed fan pin control
– added 2 speed fan option
– fixed 2.5L stream length
– added BT Speeds
– added shift light
– diagnose graphing
– updated vht reading
– added tank mpg tracking
– added fuel tank size option
– updated vht cel
– added fill-up menu
– added wideband AFR gauge
– wideband diag menu
– wideband to narrowband output
– added tankAVG gauge option
– temp symb function
– NSS gauge
– added clock brownout dim