- Posts: 2633
C-17 Transport
- goebish
-
- Offline
- NRF Weirdo
Less
More
02 Jul 2019 17:58 #74642
by goebish
Replied by goebish on topic C-17 Transport
why didn't you just reverse throttle channel ?
- planger
-
Topic Author
- Offline
02 Jul 2019 19:31 #74643
by planger
Pascal
Replied by planger on topic C-17 Transport
Interresting another compatible model. But with reverse throttle.tianma780 wrote: The protocol gd00x v1 fly my zc-z50
Pascal
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 06:55 - 03 Jul 2019 07:28 #74646
by tianma780
Replied by tianma780 on topic C-17 Transport
Hello goebish and planger,I have make a mistake.
There is the test report:D7e 256 gd00x_nrf24l01.c(with v1&v2)
1.zc-z50 RX
gd00x v1 can bind and gd00x v2 can not bind
zc-z50 fly not well ,so I change the
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
to
"u16 channel=scale_channel(CHANNEL1, 1000, 2000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
then set reverse aileron and it work well .
or change the
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
to
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 2000, 1000); // aileron"
and not need to reverse aileron and it work well.
2.C-17 RX V1
gd00x v1 can bind and gd00x v2 can not bind
it work well. good job!
3.C-17 RX V2
gd00x v2 can bind and gd00x v1 can not bind
it do not work well,I will keep test tonight.
so I suggest the protocol add "z50" "v1" "v2" to choose and fix the part of z50,thank you very much.
There is the test report:D7e 256 gd00x_nrf24l01.c(with v1&v2)
1.zc-z50 RX
gd00x v1 can bind and gd00x v2 can not bind
zc-z50 fly not well ,so I change the
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
to
"u16 channel=scale_channel(CHANNEL1, 1000, 2000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
then set reverse aileron and it work well .
or change the
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 1000, 2000); // aileron"
to
"u16 channel=scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel=scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel=scale_channel(CHANNEL1, 2000, 1000); // aileron"
and not need to reverse aileron and it work well.
2.C-17 RX V1
gd00x v1 can bind and gd00x v2 can not bind
it work well. good job!
3.C-17 RX V2
gd00x v2 can bind and gd00x v1 can not bind
it do not work well,I will keep test tonight.
so I suggest the protocol add "z50" "v1" "v2" to choose and fix the part of z50,thank you very much.
Last edit: 03 Jul 2019 07:28 by tianma780.
- planger
-
Topic Author
- Offline
03 Jul 2019 07:53 #74648
by planger
Replied by planger on topic C-17 Transport
So Throttle is not reversed now anymore but Aileron is reversed. Still this is something to address in the radio mixers not in the code...
Pascal
Pascal
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 07:57 - 03 Jul 2019 08:08 #74649
by tianma780
Replied by tianma780 on topic C-17 Transport
yes, the code for C-17 v1 and z50 is ok,but c-17 v2 I think the code have some problem,I will test tonight
thank you Pascal
thank you Pascal
Last edit: 03 Jul 2019 08:08 by tianma780.
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 13:01 - 03 Jul 2019 13:34 #74651
by tianma780
Replied by tianma780 on topic C-17 Transport
Hello goebish,Can you help to check this protocol
gd00x_nrf24l01.c(with V1,V2,ZC)
gd00x_nrf24l01.c(with V1,V2,ZC)
=====================================================
/*
This project is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Deviation is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Deviation. If not, see <http://www.gnu.org/licenses/>.
*/
#include "common.h"
#include "interface.h"
#include "mixer.h"
#include "config/model.h"
#include "config/tx.h" // for Transmitter
#ifdef PROTO_HAS_NRF24L01
#ifdef EMULATOR
#define USE_FIXED_MFGID
#define GD00X_BIND_COUNT 20
#define GD00X_PACKET_PERIOD 100
#define dbgprintf printf
#else
#define GD00X_BIND_COUNT 857 // 3sec
#define GD00X_PACKET_PERIOD 3500 // Timeout for callback in uSec
// printf inside an interrupt handler is really dangerous
// this shouldn't be enabled even in debug builds without explicitly
// turning it on
#define dbgprintf if(0) printf
#endif
// #define FORCE_GD00X_ORIGINAL_ID
#define GD00X_INITIAL_WAIT 500
#define GD00X_RF_BIND_CHANNEL 2
#define GD00X_PAYLOAD_SIZE 15
#define GD00X_V2_BIND_PACKET_PERIOD 1700
#define GD00X_V2_RF_BIND_CHANNEL 0x43
#define GD00X_V2_PAYLOAD_SIZE 6
#define GD00X_ZC_INITIAL_WAIT 500
#define GD00X_ZC_RF_BIND_CHANNEL 2
#define GD00X_ZC_PAYLOAD_SIZE 15
static const char * const gd00x_opts[] = {
_tr_noop("Format"), "V1", "V2","ZC", NULL,
NULL
};
enum {
PROTOOPTS_FORMAT = 0,
LAST_PROTO_OPT,
};
enum {
FORMAT_V1 = 0,
FORMAT_V2,
FORMAT_ZC,
};
ctassert(LAST_PROTO_OPT <= NUM_PROTO_OPTS, too_many_protocol_opts);
static u8 tx_power;
static u8 packet[GD00X_PAYLOAD_SIZE];
static u8 hopping_frequency_no;
static u8 rx_tx_addr[5];
static u8 hopping_frequency[4];
static u16 bind_counter;
static u16 packet_period;
static u8 packet_count;
static u8 packet_length;
static u8 phase;
static u8 len;
enum{
GD00X_BIND,
GD00X_DATA
};
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08
#define GD00X_FLAG_LIGHT 0x04
// flags going to packet[4]
#define GD00X_V2_FLAG_DR 0x40
#define GD00X_V2_FLAG_LIGHT 0x80
// flags going to packet[11]
#define GD00X_ZC_FLAG_DR 0x08
#define GD00X_ZC_FLAG_LIGHT 0x04
// For code readability
enum {
CHANNEL1 = 0,
CHANNEL2,
CHANNEL3,
CHANNEL4,
CHANNEL5,
CHANNEL6,
};
#define CHANNEL_LIGHT CHANNEL5
// Bit vector from bit position
#define BV(bit) (1 << bit)
#define CHAN_RANGE (CHAN_MAX_VALUE - CHAN_MIN_VALUE)
static u16 scale_channel(u8 ch, u16 destMin, u16 destMax)
{
s32 chanval = Channels[ch];
s32 range = (s32) destMax - (s32) destMin;
if (chanval < CHAN_MIN_VALUE)
chanval = CHAN_MIN_VALUE;
else if (chanval > CHAN_MAX_VALUE)
chanval = CHAN_MAX_VALUE;
return (range * (chanval - CHAN_MIN_VALUE)) / CHAN_RANGE + destMin;
}
#define GET_FLAG(ch, mask) (Channels[ch] > 0 ? mask : 0)
static void GD00X_send_packet()
{
static u8 prev_CH6 = 0;
switch (Model.proto_opts[PROTOOPTS_FORMAT]) {
case FORMAT_V1:
packet[0] = (phase == GD00X_BIND) ? 0xAA : 0x55;
memcpy(packet+1, rx_tx_addr, 4);
u16 channel = scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel = scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel = scale_channel(CHANNEL1, 1000, 2000); // aileron
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
| GET_FLAG(CHANNEL5, GD00X_FLAG_LIGHT);
packet[12] = 0x00;
packet[13] = 0x00;
packet[14] = 0x00;
break;
case FORMAT_V2:
if (phase == GD00X_BIND) {
for (u8 i = 0; i < 5; i++)
packet[i] = rx_tx_addr[i];
}
else
{
packet[0] = scale_channel(CHANNEL3, 0, 100); // throttle 0..100
#define CHANNEL_MAX_100 1844
#define CHANNEL_MIN_100 204
#define GD00X_V2_DB_MIN 1024-40
#define GD00X_V2_DB_MAX 1024+40
// Deadband is needed on aileron
u16 aileron = scale_channel(CHANNEL1, CHANNEL_MAX_100, CHANNEL_MIN_100);
if (aileron > GD00X_V2_DB_MIN && aileron < GD00X_V2_DB_MAX) {
packet[1] = 0x20; // Send the channel centered
}
else // Ail: 0x3F..0x20..0x00
{
if (aileron > GD00X_V2_DB_MAX)
packet[1] = 0x1F-((aileron-GD00X_V2_DB_MAX)*(0x20)/(CHANNEL_MAX_100+1-GD00X_V2_DB_MAX)); // 1F..00
else
packet[1] = 0x3F-((aileron-CHANNEL_MIN_100)*(0x1F)/(GD00X_V2_DB_MIN-CHANNEL_MIN_100)); // 3F..21
}
// Trims must be in a seperate channel for this model
packet[2] = 0x3F-(scale_channel(CHANNEL5, 0, 255)>>2); // Trim: 0x3F..0x20..0x00
u8 seq = ((packet_count*3)/7)%5;
packet[4] = seq | GD00X_V2_FLAG_DR;
if (GET_FLAG(CHANNEL6, 1) != prev_CH6)
{ // LED switch is temporary
len = 43;
prev_CH6 = GET_FLAG(CHANNEL6, 1);
}
if (len)
{ // Send the light flag for a couple of packets
packet[4] |= GD00X_V2_FLAG_LIGHT;
len--;
}
packet[3] = (packet[0]+packet[1]+packet[2]+packet[4])^(rx_tx_addr[0]^rx_tx_addr[1]^rx_tx_addr[2]);
if ((packet_count%12) == 0 )
hopping_frequency_no ^= 1; // Toggle between the 2 frequencies
packet_count++;
if (packet_count > 34) packet_count = 0; // Full period
if ( seq == (((packet_count*3)/7)%5) )
{
if (packet_period == 2700)
packet_period = 3000;
else
packet_period = 2700;
}
else
packet_period = 4300;
}
packet[5] = 'D';
break;
case FORMAT_ZC:
packet[0] = (phase == GD00X_BIND) ? 0xAA : 0x55;
memcpy(packet+1, rx_tx_addr, 4);
u16 channel = scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[5 ] = channel;
packet[6 ] = channel>>8;
channel = scale_channel(CHANNEL3, 1000, 2000); // throttle
packet[7 ] = channel;
packet[8 ] = channel>>8;
// dynamically driven aileron trim
channel = scale_channel(CHANNEL1, 2000, 1000); // aileron
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
| GET_FLAG(CHANNEL5, GD00X_FLAG_LIGHT);
packet[12] = 0x00;
packet[13] = 0x00;
packet[14] = 0x00;
break;
}
// Power on, TX mode, CRC enabled
XN297_Configure(BV(NRF24L01_00_EN_CRC) | BV(NRF24L01_00_CRCO) | BV(NRF24L01_00_PWR_UP));
if (phase == GD00X_DATA) {
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
if (Model.proto_opts[PROTOOPTS_FORMAT] == FORMAT_V1) {
hopping_frequency_no++;
hopping_frequency_no &= 3; // 4 RF channels
}
}
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
NRF24L01_FlushTx();
XN297_WritePayload(packet, packet_length);
if (tx_power != Model.tx_power) {
// Keep transmit power updated
tx_power = Model.tx_power;
NRF24L01_SetPower(tx_power);
}
}
static void GD00X_init()
{
NRF24L01_Initialize();
NRF24L01_SetTxRxMode(TX_EN);
switch (Model.proto_opts[PROTOOPTS_FORMAT]) {
case FORMAT_V1:
XN297_SetTXAddr((u8*)"\xcc\xcc\xcc\xcc\xcc", 5);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, GD00X_RF_BIND_CHANNEL);
break;
case FORMAT_V2:
XN297_SetTXAddr((u8*)"GDKNx", 5);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, GD00X_V2_RF_BIND_CHANNEL);
break;
case FORMAT_ZC:
XN297_SetTXAddr((u8*)"\xcc\xcc\xcc\xcc\xcc", 5);
NRF24L01_WriteReg(NRF24L01_05_RF_CH, GD00X_RF_BIND_CHANNEL);
break;
}
NRF24L01_FlushTx();
NRF24L01_FlushRx();
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowldgement on all data pipes
NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only
NRF24L01_SetBitrate(NRF24L01_BR_250K); // 250Kbps
NRF24L01_SetPower(tx_power);
}
static void GD00X_initialize_txid()
{
u32 lfsr = 0xb2c54a2ful;
u8 i,j;
#ifndef USE_FIXED_MFGID
u8 var[12];
MCU_SerialNumber(var, 12);
dbgprintf("Manufacturer id: ");
for (i = 0; i < 12; ++i) {
dbgprintf("%02X", var[i]);
rand32_r(&lfsr, var[i]);
}
dbgprintf("\r\n");
#endif
if (Model.fixed_id) {
for (i = 0, j = 0; i < sizeof(Model.fixed_id); ++i, j += 8)
rand32_r(&lfsr, (Model.fixed_id >> j) & 0xff);
}
// Pump zero bytes for LFSR to diverge more
for (i = 0; i < sizeof(lfsr); ++i) rand32_r(&lfsr, 0);
switch (Model.proto_opts[PROTOOPTS_FORMAT]) {
case FORMAT_V1:
// tx address
for (i = 0; i < 2; i++)
rx_tx_addr[i] = (lfsr >> (i*8)) & 0xff;
rx_tx_addr[2] = 0x12;
rx_tx_addr[3] = 0x13;
u8 start = 76+(rx_tx_addr[0]&0x03);
for (i = 0; i < 4; i++)
hopping_frequency[i] = start-(i << 1);
#ifdef FORCE_GD00X_ORIGINAL_ID
rx_tx_addr[0] = 0x1F;
rx_tx_addr[1] = 0x39;
rx_tx_addr[2] = 0x12;
rx_tx_addr[3] = 0x13;
for (i = 0; i < 4; i++)
hopping_frequency[i] = 79-(i << 1);
#endif
break;
case FORMAT_V2:
// Generate 64 different IDs
rx_tx_addr[1] = 0x00;
rx_tx_addr[2] = 0x00;
rx_tx_addr[1+((lfsr&0x10)>>4)] = lfsr&0x8F;
rx_tx_addr[0] = 0x65;
rx_tx_addr[3] = 0x95;
rx_tx_addr[4] = 0x47; // 'G'
// hopping calculation
hopping_frequency[0] = (0x15+(rx_tx_addr[0]^rx_tx_addr[1]^rx_tx_addr[2]^rx_tx_addr[3]))&0x1F;
if (hopping_frequency[0] == 0x0F)
hopping_frequency[0] = 0x0E;
else if ((hopping_frequency[0]&0xFE) == 0x10)
hopping_frequency[0] += 2;
hopping_frequency[1] = 0x20+hopping_frequency[0];
#ifdef FORCE_GD00X_ORIGINAL_ID
// ID 1
rx_tx_addr[0] = 0x65;
rx_tx_addr[1] = 0x00;
rx_tx_addr[2] = 0x00;
rx_tx_addr[3] = 0x95;
rx_tx_addr[4] = 0x47; // 'G'
hopping_frequency[0] = 0x05;
hopping_frequency[1] = 0x25;
// ID 2
rx_tx_addr[0] = 0xFD;
rx_tx_addr[1] = 0x09;
rx_tx_addr[2] = 0x00;
rx_tx_addr[3] = 0x65;
rx_tx_addr[4] = 0x47; // 'G'
hopping_frequency[0] = 0x06;
hopping_frequency[1] = 0x26;
// ID 3
rx_tx_addr[0] = 0x67;
rx_tx_addr[1] = 0x0F;
rx_tx_addr[2] = 0x00;
rx_tx_addr[3] = 0x69;
rx_tx_addr[4] = 0x47; // 'G'
hopping_frequency[0] = 0x16;
hopping_frequency[1] = 0x36;
#endif
break;
}
}
static u16 GD00X_callback()
{
if (phase == GD00X_BIND) {
if (--bind_counter == 0) {
PROTOCOL_SetBindState(0);
phase = GD00X_DATA;
}
}
GD00X_send_packet();
return packet_period;
}
static void initialize()
{
CLOCK_StopTimer();
tx_power = Model.tx_power;
packet_period = Model.proto_opts[PROTOOPTS_FORMAT] == FORMAT_V1?GD00X_PACKET_PERIOD:GD00X_V2_BIND_PACKET_PERIOD;
packet_length = Model.proto_opts[PROTOOPTS_FORMAT] == FORMAT_V1?GD00X_PAYLOAD_SIZE:GD00X_V2_PAYLOAD_SIZE;
packet_count = 0;
len = 0;
hopping_frequency_no = 0;
bind_counter=GD00X_BIND_COUNT;
phase = GD00X_BIND;
PROTOCOL_SetBindState((GD00X_BIND_COUNT * packet_period)/1000);
GD00X_initialize_txid();
GD00X_init();
CLOCK_StartTimer(GD00X_INITIAL_WAIT, GD00X_callback);
}
uintptr_t GD00X_Cmds(enum ProtoCmds cmd)
{
switch(cmd) {
case PROTOCMD_INIT: initialize(); return 0;
case PROTOCMD_DEINIT:
case PROTOCMD_RESET:
CLOCK_StopTimer();
return (NRF24L01_Reset() ? 1 : -1);
case PROTOCMD_CHECK_AUTOBIND: return 1;
case PROTOCMD_BIND: initialize(); return 0;
case PROTOCMD_NUMCHAN: return 5;
case PROTOCMD_DEFAULT_NUMCHAN: return 5;
case PROTOCMD_CURRENT_ID: return Model.fixed_id;
case PROTOCMD_GETOPTIONS: return (uintptr_t)gd00x_opts;
case PROTOCMD_TELEMETRYSTATE: return PROTO_TELEM_UNSUPPORTED;
case PROTOCMD_CHANNELMAP: return AETRG;
default: break;
}
return 0;
}
#endif
Last edit: 03 Jul 2019 13:34 by goebish. Reason: BBcode
- goebish
-
- Offline
- NRF Weirdo
Less
More
- Posts: 2633
03 Jul 2019 13:12 - 03 Jul 2019 14:01 #74652
by goebish
Replied by goebish on topic C-17 Transport
Please don't post long chunk of codes without proper BBcode, it's unreadable as it is, and I don't know what you want me to check.
As Pascal said, there's no need to modify the source code, everything can be done with the mixer.
Last edit: 03 Jul 2019 14:01 by goebish.
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 13:17 #74653
by tianma780
Replied by tianma780 on topic C-17 Transport
sorry,
I just want to add V1 V2 Z50 in this protocol, just like MJXQ protocol
I dont known how to do
I just want to add V1 V2 Z50 in this protocol, just like MJXQ protocol
I dont known how to do
- goebish
-
- Offline
- NRF Weirdo
Less
More
- Posts: 2633
03 Jul 2019 13:46 #74654
by goebish
Replied by goebish on topic C-17 Transport
Ok, that's dynamic trims that need to be reversed for ZC, try that:
gist.github.com/goebish/a57875dabfd686dffd5733ce1637ab16
gist.github.com/goebish/a57875dabfd686dffd5733ce1637ab16
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 14:11 #74655
by tianma780
Replied by tianma780 on topic C-17 Transport
thank you goebish
but it is error
when I make DFU in docker
""docker start -i deviation_build""
but it is error
when I make DFU in docker
""docker start -i deviation_build""
- goebish
-
- Offline
- NRF Weirdo
Less
More
- Posts: 2633
03 Jul 2019 14:19 #74656
by goebish
Replied by goebish on topic C-17 Transport
retry, there was some garbage and a missing parenthesis
gist.github.com/goebish/a57875dabfd686dffd5733ce1637ab16
gist.github.com/goebish/a57875dabfd686dffd5733ce1637ab16
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 15:28 - 03 Jul 2019 15:35 #74657
by tianma780
Replied by tianma780 on topic C-17 Transport
this time is ok ,I test zc and v1 is ok,
just a little bug:
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <---V1 force high rate motor run so fast ,it hard to land the plane,but ZC force high rate motor run not so fast ,it is ok,
#define GD00X_FLAG_LIGHT 0x04
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
so can you change :
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <--- ---change this, it is full power ,I want half power
#define GD00X_FLAG_LIGHT 0x04
// flags going to packet[4]
#define GD00X_V2_FLAG_DR 0x40
#define GD00X_V2_FLAG_LIGHT 0x80
// flags going to packet[11]
#define GD00X_ZC_FLAG_DR 0x08
#define GD00X_ZC_FLAG_LIGHT 0x04
just a little bug:
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <---V1 force high rate motor run so fast ,it hard to land the plane,but ZC force high rate motor run not so fast ,it is ok,
#define GD00X_FLAG_LIGHT 0x04
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
so can you change :
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <--- ---change this, it is full power ,I want half power
#define GD00X_FLAG_LIGHT 0x04
// flags going to packet[4]
#define GD00X_V2_FLAG_DR 0x40
#define GD00X_V2_FLAG_LIGHT 0x80
// flags going to packet[11]
#define GD00X_ZC_FLAG_DR 0x08
#define GD00X_ZC_FLAG_LIGHT 0x04
Last edit: 03 Jul 2019 15:35 by tianma780.
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 15:57 - 03 Jul 2019 16:04 #74658
by tianma780
Replied by tianma780 on topic C-17 Transport
V2 test report:
when binded, theThrottle -100 to -99 but motor run fast , -99 to -67 nothing change ,-67 to 100 it work well,I reverse Throttle ,it is the same
when binded, theThrottle -100 to -99 but motor run fast , -99 to -67 nothing change ,-67 to 100 it work well,I reverse Throttle ,it is the same
Last edit: 03 Jul 2019 16:04 by tianma780.
- planger
-
Topic Author
- Offline
03 Jul 2019 16:00 - 03 Jul 2019 16:00 #74659
by planger
Does the motor speed change when you move the throttle?
Replied by planger on topic C-17 Transport
What plane are you testing V2 on?tianma780 wrote: V2 test report:
when binded, theThrottle -100 but motor run fast ,I reverse Throttle ,it is the same
Does the motor speed change when you move the throttle?
Last edit: 03 Jul 2019 16:00 by planger.
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 16:08 - 03 Jul 2019 16:09 #74660
by tianma780
Replied by tianma780 on topic C-17 Transport
C-17 airplane, it has two version,v1 is old,now the plane both use V2,it is new,and can not buy the V1,it all update V2
when binded, theThrottle -100 to -99 but motor run fast , -99 to -67 nothing change ,-67 to 100 it work well,I reverse Throttle ,it is the same
when binded, theThrottle -100 to -99 but motor run fast , -99 to -67 nothing change ,-67 to 100 it work well,I reverse Throttle ,it is the same
Last edit: 03 Jul 2019 16:09 by tianma780.
- planger
-
Topic Author
- Offline
03 Jul 2019 16:11 - 03 Jul 2019 16:11 #74661
by planger
Pascal
Replied by planger on topic C-17 Transport
It's because your aileron channel is not centered. Calibrate the aileron channel or increase the deadband...tianma780 wrote: C-17 airplane, it has two version,v1 is old,now the plane both use V2,it is new,and can not buy the V1,it all update V2
when binded, theThrottle -100 to -99 but motor run fast , -99 to -67 nothing change ,-67 to 100 it work well,I reverse Throttle ,it is the same
Pascal
Last edit: 03 Jul 2019 16:11 by planger.
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 16:18 #74662
by tianma780
Replied by tianma780 on topic C-17 Transport
hah,yes you are right
thank you
how to increase the the aileron`s deadband?
thank you
how to increase the the aileron`s deadband?
- planger
-
Topic Author
- Offline
03 Jul 2019 16:21 #74663
by planger
Replied by planger on topic C-17 Transport
I think you should better calibrate your aileron stick...
Deadband is defined here:40 is the deadband around center (+-40)
Deadband is defined here:
#define GD00X_V2_DB_MIN 1024-40
#define GD00X_V2_DB_MAX 1024+40- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 16:32 #74664
by tianma780
Replied by tianma780 on topic C-17 Transport
I see ,thank you!
do you understand my question:
,I test zc and v1 is ok,
just a little bug:
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <---V1 force high rate motor run so fast ,it hard to land the plane,but ZC force high rate motor run not so fast ,it is ok,
#define GD00X_FLAG_LIGHT 0x04
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
so can you change :
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <--- ---change this, it is full power ,I want half power
#define GD00X_FLAG_LIGHT 0x04
// flags going to packet[4]
#define GD00X_V2_FLAG_DR 0x40
#define GD00X_V2_FLAG_LIGHT 0x80
// flags going to packet[11]
#define GD00X_ZC_FLAG_DR 0x08
#define GD00X_ZC_FLAG_LIGHT 0x04
do you understand my question:
,I test zc and v1 is ok,
just a little bug:
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <---V1 force high rate motor run so fast ,it hard to land the plane,but ZC force high rate motor run not so fast ,it is ok,
#define GD00X_FLAG_LIGHT 0x04
packet[9 ] = channel;
packet[10] = channel>>8;
packet[11] = GD00X_FLAG_DR // Force high rate
so can you change :
// flags going to packet[11]
#define GD00X_FLAG_DR 0x08 <--- ---change this, it is full power ,I want half power
#define GD00X_FLAG_LIGHT 0x04
// flags going to packet[4]
#define GD00X_V2_FLAG_DR 0x40
#define GD00X_V2_FLAG_LIGHT 0x80
// flags going to packet[11]
#define GD00X_ZC_FLAG_DR 0x08
#define GD00X_ZC_FLAG_LIGHT 0x04
- tianma780
-
- Offline
Less
More
- Posts: 54
03 Jul 2019 17:23 #74666
by tianma780
Replied by tianma780 on topic C-17 Transport
My aileron stick is not good,so I change 40 to 96 ,and now better than before.
Hello goebish and Pascal,can you check the code of V2,
the Throttle from -99 to -66 the motor speed not change.
Hello goebish and Pascal,can you check the code of V2,
the Throttle from -99 to -66 the motor speed not change.
Time to create page: 0.188 seconds
-
Home
-
Forum
-
Development
-
Protocol Development
- C-17 Transport