View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000624Deviation(No Category)public2015-06-14 17:292016-09-18 11:26
Assigned Tohexfet 
Summary0000624: Nightly-build fcd0669: Heli CCPM 120/120X swashtype: Cyclic 1/2 is interchanged - Cyclic1 is set to AIL instead of ELEV
DescriptionCyclic1 is wrongly assigned to AIL channel.
Cyclic2 is wrongly assigned to ELEV channel.

The following is the right channel assignment:
ELEV: cyclic1
AIL: cyclic2
PIT/CH6: cyclic3 (correctly set)

I had this problem first on CCPM paddle heli setup with Indigos test build devo10-v4.0.1-36cce5c.


Steps To ReproduceSetup a Heli with 120 or 120X swashtype.

Choose simple GUI mode.

Protocols DSM2, DSMx or DEVO make no difference.

Laters change to advanced GUI mode.
If if real-live test the CCPM heli in simple GUI mode you will see that the servos have the wrong travel.
You will NEVER manage to have to servos travel in the right directions for nick=elevator and pitch!

View mixers (after changing to advanced GUI mode).
TagsNo tags attached.
Deviation Version
Attached Files

- Relationships

-  Notes
Thomas.Heiss (reporter)
2015-07-03 18:00

Heli: Blade 450 3D
CCPM: 120

Servos of the Blade heli:
- front: elevator servo
- left: ail / roll servo
- right: pitch servo

I would have to double-check what servo plugs went into the AR8000.
But I believe to remember the order is like above.
Like elevator goes to ELEV port, ail/roll to AIL port and pitch servo goes into AUX1 port.

What channel ordering should one expect when setting up a 120 CCPM heli in the simple or advanced gui?
What channels should be mapped to Cyclic1, Cyclic2 and Cyclic3?

How do you know as an DeviationTX and CCPM cyclic mixer developer if the elevator servo is in front of the heli or if it is back?

Would that (front vs back elevator servo) change anything for assigning ELEV to Cyclic1 vs Cyclic2?

Has anyone of you checked in nightly-builds e.g for the 6CH heli template for CCPM 120 with the advanced mixer GUI if the assignment for elevator and ail/roll servo to cyclic1 and cyclic2 virtual channels is OK and the right ordering?

How can I assist in tracking this down? Maybe I did something wrong...who knows...

I still believe that is a bit annoying that a simple DeviationTX heli GUI sets the elev/ail servos for a specific order which does not work with the Blade 450 3D heli - with the elevator servo in the front.

Yes I know....CCPM paddle helis are not really up to date anymore....noone has one of those helis anymore to test around?

Maybe it would be a good time to try to track the "problem" down together before the next nightly-build release candidate and frozen code?


PS: Yes it works with the correct cyclic1/cyclic2 ordering - but only in the advanced mixer GUI.
Thomas.Heiss (reporter)
2015-07-04 13:37

template=6Ch Helicopter





template=Heli/Standard GUI





Templates mappings are fine.

Working with the "6Ch Helicopter" template works.
No matter if DEVO or DSMx protocols.
No matter if Swashtype None or 120.
It always sets ELEV to Cyclic1 and AIL to Cyclic2. OK, works!


Even the above "Heli/Standard GUI" template seems to be fine, it does NOT work.

As soon as I change from Mixer GUI "Simple" to "Advanced" (to show all the predefined mixers), ELEV is wrongly assigned "Cyclic2" (instead of Cyclic1) and AIL is wrongly assigned "Cyclic1" (instead of Cyclic2).

No matter if DEVO or DSMx protocols.
No matter if Swashtype None or 120.


Additional code bug in swapping from mixer GUI "Advanced" to "Simple" and back:
"Model needs reset for standard mixer".

This will swap Cyclic1/Cyclic2 for the previous working ELEV and AIL channels.
So what was good (ELEV=Cyclic1) before (advanced heli template) becomes !!!WRONG!!! (ELEV=Cyclic2).

You can clearly see that when you change back from mixer GUI "Simple" to "Advanced".

No matter if DEVO or DSMx protocols.
No matter if Swashtype None or 120.


I have no idea why loading the (correct) standard GUI heli template with the correct assignments actually results in wrong Cyclic1/Cyclic2 mappings.

So my further tests confirm my notes and steps to reproduce statements.

I also have found several threads on the forum that people have had problems with CCPM (flybar) setups which go back >1 year.

I guess therefore that this must be a bug which eventually have been living in the code for a longer time?


Thomas.Heiss (reporter)
2015-07-04 13:44
edited on: 2015-07-04 13:46

Side note:

What I really do not understand is:

2-AIL: Cyclic2 (DSmx)
3-ELE: Cyclic1
CH6: Cyclic3


Why is the assignment "3-ELE: Cyclic1" working when "CYC-ELE" is used to be Virtual2 = Cyclic2?

Is there any relevance for "Cyclic1" being Virtual1 and therefore actually being "CYC-AIL"???

To what virtual channel of the 2 above is Cyclic1 and Cyclic2 really mapped to?

CH6 Cyclic3 = Virtual3 = "CYC-COL" seems to be very much logical for me.

I just can repeat:
Mapping ELEV to Cyclic1 (as is by the advanced heli template) seems to be working with my Blade CCPM flybar setup!


Thomas.Heiss (reporter)
2015-07-04 18:28
edited on: 2015-07-04 18:30

Code src/mixer_standard.c - lines 96/97:

MIXER_SetTemplate(mapped_std_channels.aile, MIXERTEMPLATE_CYC1);
MIXER_SetTemplate(mapped_std_channels.elev, MIXERTEMPLATE_CYC2);

May that be the problem?

The standard mixer is hardcoded mapped in mixer_standard.c so the heli standard gui template.ini and text provided mappings are ignored even???


That would make sense according to the scenario described in my first post:

The "real problem" is NOT (only) the SWITCHING between advanced and standard GUI but more the fact that the cyclic servos where not running in the right direction
- when the mixer was set to "Standard"
- or the model was manually setup / loaded from the standard GUI heli template.ini.

Thomas.Heiss (reporter)
2015-07-04 18:47

I am on Mode3 btw.
Thomas.Heiss (reporter)
2015-07-05 08:24

To reproduce you can simply use the channel monitor (successful test today).

When you move the nick (elevator) stick you can clearly see that for the standard heli mixer GUI the AIL channel is getting all the nick-movement (full/long throws).
Thomas.Heiss (reporter)
2015-07-14 05:30

Found some more threads:

GUI Cyclic1-Cyclic3 + PB's channel servo test: [^]

Cyclic1-3 mixer documentation: [^]

Cyclic1-2 Reversed on standard gui: [^]
Thomas.Heiss (reporter)
2015-07-14 09:54

Excerpt from thread "Are cyclic1 &2 reversed on Standard GUI 120 swash": [^]

The mixer_standard.c header tells that "most code is derived from er9x and th9x".
Have there been any code fixes on those projects? Code basis quite different...

void STDMIXER_Preset() or STDMIXER_SetChannelOrderByProtocol()
mapped_simple_channels.aile = NUM_OUT_CHANNELS; // virt 1 (=CYC_AIL with AIL AS SRC)
mapped_simple_channels.elev = NUM_OUT_CHANNELS +1; // virt 2 (=CYC_ELEV with ELEV as SRC)

When is this code within the function called? What does it do?
Does it set ail channel to Cyclic1 and Elev to Cyclic2?

Where is the difference from the above code to

void STDMIXER_SetChannelOrderByProtocol()
MIXER_SetTemplate(mapped_std_channels.aile, MIXERTEMPLATE_CYC1);
MIXER_SetTemplate(mapped_std_channels.elev, MIXERTEMPLATE_CYC2);
Thomas.Heiss (reporter)
2015-08-03 04:41
edited on: 2015-08-03 04:42

More active CCPM threads:

Can't figure out CCPM settings for flybar: [^]

Nightly build channel reordering and template Virtual1/Virtual2 input corrections: [^]

hexfet (developer)
2015-08-05 01:16
edited on: 2015-08-05 01:26

The problem is in the CCPM mixing calculation. The equation for the aileron servo is being used to calculate the value used for elevator, and vice-versa. As best I can tell from the commit log it's always been this way.

A fix is in my repo [^] Beware that it will break all existing model files with a swashtype other than None.

The fix is based on the information at, [^], [^] and [^] I've also flown my 450 with the updated firmware.

hexfet (developer)
2015-08-05 13:11

While the solution in 0000624:0001488 is the simplest and cleanest it would be better not to break models. Haven't figured out how to do that, but there is an alternative that would only break some models.

It's possible change the code so cyclic1 is elevator and cyclic2 aileron. The only visible change would be the swapping of the CYC-ELE and CYC-AIL in the mixer list, and anyone who's made a working CCPM model file probably already ended up with cyclic1 as the source for ELE (or swapped servo connections, or fixed it in the mixers manually!). But they could've assigned cyclic2 and 3 either way to AIL and PIT and made it work, so it's likely at least some model files would break (like the one I already had for my 450).

This fix requires more code (probably the swashmix numbering should change correspondingly) and is more complicated. Also the RC convention seems to be servo1/cyclic1 is aileron, 2 is elevator, and 3 is collective.
hexfet (developer)
2015-08-13 03:05

I pm'd PB and changes will await implementation of model file
versioning, which will allow changes witout breaking model files. Until
then the situation is as follows.

For the advanced GUI, the data flow is:
AIL input -> virtchan1 -> cyclic2 -> AIL channel/servo
ELE input -> virtchan2 -> cyclic1 -> ELE channel/servo
THR input -> virtchan3 -> cyclic3 -> PIT channel/servo

EXCEPT when swashtype is None. Then cyclic1 -> AIL and cyclic2 ->
ELE. This is important because some CCPM heli setup procedures are
done with tx ccpm disabled (at least with my 3GX).

For the standard GUI, a problem exists when reading the template file.
The bug is somewhere in lines 1429-1434 of src/config/model.c but don't
have time to track it down right now. The end effect is that the
template file has to be written with virtchan1 sourced from ELE and
virtchan2 from AIL to make the final sources end up the other way
Thomas.Heiss (reporter)
2016-03-08 11:11

As Tim - struggeling for help - PMed me, here is another heli CCPM120 mixer and channel assignment thread with lots of explanations from Hexfet after his code changes in nightly-build (use heli or CCPM for search keywords on BitBucket commit textfield): [^]
Thomas.Heiss (reporter)
2016-09-18 11:26

Short heli summary - starting version 4.0.1-nightly-build b9edc4c + release 5.0.0: [^] [^]

Newer "Heli summary analysis - problem spots - templates" developer thread is linked there.

- Issue History
Date Modified Username Field Change
2015-06-14 17:29 Thomas.Heiss New Issue
2015-07-03 18:00 Thomas.Heiss Note Added: 0001465
2015-07-04 13:37 Thomas.Heiss Note Added: 0001466
2015-07-04 13:44 Thomas.Heiss Note Added: 0001467
2015-07-04 13:46 Thomas.Heiss Note Edited: 0001467 View Revisions
2015-07-04 18:28 Thomas.Heiss Note Added: 0001468
2015-07-04 18:30 Thomas.Heiss Note Edited: 0001468 View Revisions
2015-07-04 18:47 Thomas.Heiss Note Added: 0001469
2015-07-05 08:24 Thomas.Heiss Note Added: 0001470
2015-07-14 05:30 Thomas.Heiss Note Added: 0001479
2015-07-14 09:54 Thomas.Heiss Note Added: 0001480
2015-08-03 04:41 Thomas.Heiss Note Added: 0001487
2015-08-03 04:42 Thomas.Heiss Note Edited: 0001487 View Revisions
2015-08-05 01:16 hexfet Note Added: 0001488
2015-08-05 01:17 hexfet Assigned To => hexfet
2015-08-05 01:17 hexfet Status new => confirmed
2015-08-05 01:18 hexfet Note Edited: 0001488 View Revisions
2015-08-05 01:25 hexfet Note Edited: 0001488 View Revisions
2015-08-05 01:26 hexfet Note Edited: 0001488 View Revisions
2015-08-05 13:11 hexfet Note Added: 0001489
2015-08-13 03:05 hexfet Note Added: 0001492
2016-03-08 11:11 Thomas.Heiss Note Added: 0001529
2016-09-18 11:26 Thomas.Heiss Note Added: 0001623

Copyright © 2000 - 2018 MantisBT Team
Powered by Mantis Bugtracker