Target gear miss

A forum for discussing applications and implementations of the MegaShift transmission controller code for the GPIO from B&G. This can control up to 8-speeds and 6 shift solenoids (plus a 16x9 table for controlling a PWM line pressure valve). It has manual and fully automatic modes (16x9 load x speed table), with under and over rev-limit protection, and full data logging of all inputs and outputs (among many other abilities). A TransStim to test your completed board is also available.
Post Reply
tobmag
Posts: 206
Joined: Mon Jan 02, 2012 4:22 am

Target gear miss

Post by tobmag »

Lance.

Long time no seen :mrgreen:

Just loaded the 4.145 code and had a run (first in a long time) I can see some strange behaviour in revese according to the log.
The car it self is behaving as it should though.

While in reverse cgear shows -1 but tgear shows 1 and just "blipping" down to -1.

There are some spikes in the vss but that is coming from my eletrical cooling fan (controlled by the MSIII) that by some strange reason is going on and off depending of gear lever position.....I'm tying to sort that out as well.....
Attachments
CurrentTune.msq
(45.85 KiB) Downloaded 454 times
2014-08-09_15.02.56.msl
(613.1 KiB) Downloaded 455 times
tobmag
Posts: 206
Joined: Mon Jan 02, 2012 4:22 am

Re: Target gear miss

Post by tobmag »

This is screen dump from MSIII under CAN-bus / Test modes.

Anyone any idea what VSS1 offset, Data Size and Gear# offset should be?


//Tobmag
Attachments
VSS set-up.jpg
VSS set-up.jpg (39.68 KiB) Viewed 8530 times
Bernard Fife
Posts: 1696
Joined: Fri Apr 04, 2008 1:28 pm

Re: Target gear miss

Post by Bernard Fife »

Tobmag,

Yes, the target gear is still a positive number. It represents the gear the trans will shift to once MShift has control in the forward gears. In P, N, and R MShift is not controlling the target gear, it is just mirroring the gear lever position. So the target gear should be 1 under these conditions, because that is likely the gear you want once you shift to a controlled (i.e. forward) gear. It shouldn't really jump to -1, but it will do that if there are any gear lever errors such as the fan issue you mention (or remaining bugs in the code).

There offsets are in fourth column of the OutputChannels section of the INI:

Code: Select all

[OutputChannels]
; These are from the outpc. structure in the main.c file of the source code
; the size and format are the same as above

   deadValue        = { 0 } ; Convenient unchanging value.

   ochBlockSize     = 72
   
 #if CAN_COMMANDS
;full version that works anywhere
   ochGetCommand    = "r\x01\x07%2o%2c"
#else
   ochGetCommand    = "a\x00\x06"
#endif 
  
  seconds           = scalar, U16,    0,     "sec",      1.000, 0.0 
#if SI_LENGTHS
  speedo            = scalar, U16,    2,     "kph",      0.16093, 0.0
  odometer          = scalar, U32,    4,      "km",      0.00161, 0.0 
#else
  speedo            = scalar, U16,    2,     "mph",      0.100, 0.0
  odometer          = scalar, U32,    4,   "miles",      0.001, 0.0 
#endif 
  auto_mode         = scalar, U08,    8,       " ",      1.000, 0.0 
  downbutton        = bits,   U08,    9,   [0:0]
  upbutton          = bits,   U08,    9,   [1:1]
  downshift_request = bits,   U08,    9,   [2:2]
  upshift_request   = bits,   U08,    9,   [3:3]
  error             = scalar, U08,   10,       " ",      1.000, 0.0
  serialComm        = bits,   U08,   10,   [0:0]
  CAN error         = bits,   U08,   10,   [1:1]
  revshiftblock     = bits,   U08,   10,   [2:2] 
  VSSreset          = bits,   U08,   10,   [3:3] 
  VSSerr            = bits,   U08,   10,   [4:4] 
  gearRangeErr      = bits,   U08,   10,   [5:5] 
  lowVolts          = bits,   U08,   10,   [6:6]
  noBrake           = bits,   U08,   10,   [7:7]        
  manual_gear       = scalar, S08,   11,       " ",      1.000, 0.0
  current_gear      = scalar, S08,   12,       " ",      1.000, 0.0
  target_gear       = scalar, S08,   13,       " ",      1.000, 0.0
  engine_rpm        = scalar, U16,   14,     "rpm",      1.000, 0.0
#if LOAD_KPA
  LOAD              = scalar, S16,   16,     "kpa",      0.100, 0.0
#else
  LOAD              = scalar, S16,   16,       "%",      0.100, 0.0
#endif  
#if CELSIUS
  clt               = scalar, S16,   18,    "ºC",        0.055556, -320.0
#else
  clt               = scalar, S16,   18,    "ºF",        0.100, 0.0
#endif
#if SI_LENGTHS
  linepressure      = scalar, S16,   20,     "bar",      0.00689, 0.0
#else
  linepressure      = scalar, S16,   20,     "psi",      0.10, 0.0
#endif
  lock_TCC          = scalar, U08,   22,       " ",      1.000, 0.0
  brake             = bits,   U08,   23,   [0:0]
  burnstatus        = bits,   U08,   23,   [1:1]
  FWD               = bits,   U08,   23,   [2:2]
  forceUP			= bits,   U08,   23,   [3:3]
  forceDWN			= bits,   U08,   23,   [4:4]
  JakeBrake         = bits,   U08,   23,   [5:5]
#if LOAD_KPA
  LOAD_short        = scalar, U16,   24,     "kpa",      0.100, 0.0
#else
  LOAD_short        = scalar, U16,   24,       "%",      0.100, 0.0
#endif
  aux_volts         = scalar, U16,   26,       "V",      0.001, 0.0
  PC_duty           = scalar, U08,   28,     "pct",      1.000, 0.0
  slip              = scalar, U08,   29,     "pct",      1.000, 0.0
  dbug              = scalar, U16,   30,       " ",      1.000, 0.0 
  In1adc            = scalar, U16,   32,   "volts",      0.00488, 0.0
  In2adc            = scalar, U16,   34,   "volts",      0.00488, 0.0
  In3adc            = scalar, U16,   36,   "volts",      0.00488, 0.0  
  solst             = scalar, U08,   38,       " ",      1.000, 0.0
  Output1           = bits,   U08,   38,   [0:0]
  Output2           = bits,   U08,   38,   [1:1]
  Output3           = bits,   U08,   38,   [2:2]
  Output4           = bits,   U08,   38,   [3:3]	
  Output5           = bits,   U08,   38,   [4:4]
  Output6           = bits,   U08,   38,   [5:5]
  Output7           = bits,   U08,   38,   [6:6]
  Output8           = bits,   U08,   38,   [7:7]  
  chcksum           = scalar, U08,   39,       " ",      1.000, 0.0
  mileage           = scalar, U16,   40,     "mpg",      0.010, 0.0       
  FuelAdj           = scalar, S16,   42,       "%",      0.100, 0.0
  SpkAdj            = scalar, S16,   44,       "°",      0.100, 0.0
  IdleAdj           = scalar, S16,   46,       " ",      1.000, 0.0
  SprAdj            = scalar, S16,   48,       " ",      1.000, 0.0
  In1               = bits,   U08,   50,   [0:0]
  In2               = bits,   U08,   50,   [1:1]
  In3               = bits,   U08,   50,   [2:2]
  In4               = bits,   U08,   50,   [3:3]
  sp1PWM            = scalar, U08,   51,      "%",       1.000, 0.0 
  is_rpm            = scalar, U16,   52,    "rpm",       1.000, 0.0  
  butADC            = scalar, U16,   54,  "volts",     0.00488, 0.0  
  sp2PWM            = scalar, U08,   56,      "%",       1.000, 0.0
  TCC_count         = scalar, U08,   57,    "sec",       0.100, 0.0
  sp0PWM   			= scalar, U08,   58,      "%",       1.000, 0.0
  sp09inx           = scalar, U16,   59,       ""'       0.100, 0.0 
  sp016inx          = scalar, U16,   61,       ""'       0.100, 0.0 
  ms2tps            = scalar, U08,   63,       "",       1.000, 0.0
  LED1              = bits,   U08,   64,   [0:0]
  LED2              = bits,   U08,   64,   [1:1]
  LED3              = bits,   U08,   64,   [2:2]
  LED4              = bits,   U08,   64,   [3:3] 
  dbugout7          = scalar, U08,   65,       "",       1.000, 0.0
  dbugout6          = scalar, U08,   66,       "",       1.000, 0.0
  dbugout5          = scalar, U08,   67,       "",       1.000, 0.0
  dbugout4          = scalar, U08,   68,       "",       1.000, 0.0
  dbugout3          = scalar, U08,   69,       "",       1.000, 0.0
  dbugout2          = scalar, U08,   70,       "",       1.000, 0.0
  dbugout1          = scalar, U08,   71,       "",       1.000, 0.0
  ;     pageSize =  71 + U08 = 72

So VSS (= speedo) is 2, the gear is in 11, 12, or 13 depending on whether you want the lever position, the current gear, or the target gear (so probably 12).

If I understand this correctly, the data size you are looking for is in the Uxx or Sxx term in the third column. S08 is 8 bits (1 byte), U16 is 16 bits (2 bytes). Uxx means an unsigned value (no negative numbers), and Sxx means signed (plus and minus numbers, but the maximum is only 1/2 as much). The speedo value is U16, so 16 bits. The gear value is S08 so 8 bits (the current gear value needs to allow negative numbers to have a reverse gear, and we certainly don't need a gear range over 127 in any case!).

The table should be 7 (but 6 might work too)

Lance.
"Never wrestle with pigs. You both get dirty and the pig likes it." - George Bernard Shaw
tobmag
Posts: 206
Joined: Mon Jan 02, 2012 4:22 am

Re: Target gear miss

Post by tobmag »

Lance.

Thanks for promt reply, well with data size I can only choose 8bit or 16bit from the dropdown table, Explanations says "How the data is stored on the expansion board. See documentation"

12 is probably correct for Gear# since the fan by some reason is going on/off depending of where I put the lever, not correct so will adress that at MSIII forum.


BR//Tobmag
gui67
Posts: 134
Joined: Tue Oct 05, 2010 11:58 am
Location: Strasbourg, France

Re: Target gear miss

Post by gui67 »

Hello,
Here is how my MS3 is set.
MS3 CAN.PNG
It works right for speed and gear
tobmag
Posts: 206
Joined: Mon Jan 02, 2012 4:22 am

Re: Target gear miss

Post by tobmag »

Thanks gui67, Ill give it a try next weekend.

Do you use MSIII to control any electrical cooling fan? I have my wired up that way using NOS1 output, it behaves very strange when I use 16bit.
If fan is running and I put it in anything but P or N it will cut the fan.......

Very soon I'll have the car in the new house I'm moving in to, 75m3 garage/workshop in the basement :D (instead of driving 45km to the garage....)

//Tobmag
gui67
Posts: 134
Joined: Tue Oct 05, 2010 11:58 am
Location: Strasbourg, France

Re: Target gear miss

Post by gui67 »

Yes, I use MS3 to control a fan, but it nearly never goes on. I never noticed such a behaviour, but I will check next time.
Guillaume
Post Reply