mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 17:48:11 +00:00
E016Hv2 and ESKY150V2 don't need the NRF code anymore
This commit is contained in:
parent
6d4b4bd2c0
commit
23141b6087
@ -163,4 +163,174 @@ void CC2500_SetPower()
|
|||||||
prev_power=power;
|
prev_power=power;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __attribute__((unused)) CC2500_SetFreqOffset()
|
||||||
|
{
|
||||||
|
if(prev_option != option)
|
||||||
|
{
|
||||||
|
prev_option = option;
|
||||||
|
CC2500_WriteReg(CC2500_0C_FSCTRL0, option);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __attribute__((unused)) CC2500_250K_Init()
|
||||||
|
{
|
||||||
|
CC2500_Strobe(CC2500_SIDLE);
|
||||||
|
|
||||||
|
// Address Config = No address check
|
||||||
|
// Base Frequency = 2400
|
||||||
|
// CRC Autoflush = false
|
||||||
|
// CRC Enable = false
|
||||||
|
// Channel Spacing = 333.251953
|
||||||
|
// Data Format = Normal mode
|
||||||
|
// Data Rate = 249.939
|
||||||
|
// Deviation = 126.953125
|
||||||
|
// Device Address = 0
|
||||||
|
// Manchester Enable = false
|
||||||
|
// Modulated = true
|
||||||
|
// Modulation Format = GFSK
|
||||||
|
// Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word
|
||||||
|
// RX Filter BW = 203.125000
|
||||||
|
// Sync Word Qualifier Mode = No preamble/sync
|
||||||
|
// TX Power = 0
|
||||||
|
// Whitening = false
|
||||||
|
// Fast Frequency Hopping - no PLL auto calibration
|
||||||
|
CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x01); // Packet Automation Control
|
||||||
|
CC2500_WriteReg(CC2500_0B_FSCTRL1, 0x0A); // Frequency Synthesizer Control
|
||||||
|
CC2500_WriteReg(CC2500_0C_FSCTRL0, option); // Frequency offset hack
|
||||||
|
CC2500_WriteReg(CC2500_0D_FREQ2, 0x5C); // Frequency Control Word, High Byte
|
||||||
|
CC2500_WriteReg(CC2500_0E_FREQ1, 0x4E); // Frequency Control Word, Middle Byte
|
||||||
|
CC2500_WriteReg(CC2500_0F_FREQ0, 0xC3); // Frequency Control Word, Low Byte
|
||||||
|
CC2500_WriteReg(CC2500_10_MDMCFG4, 0x8D); // Modem Configuration
|
||||||
|
CC2500_WriteReg(CC2500_11_MDMCFG3, 0x3B); // Modem Configuration
|
||||||
|
CC2500_WriteReg(CC2500_12_MDMCFG2, 0x10); // Modem Configuration
|
||||||
|
CC2500_WriteReg(CC2500_13_MDMCFG1, 0x23); // Modem Configuration
|
||||||
|
CC2500_WriteReg(CC2500_14_MDMCFG0, 0xA4); // Modem Configuration
|
||||||
|
CC2500_WriteReg(CC2500_15_DEVIATN, 0x62); // Modem Deviation Setting
|
||||||
|
CC2500_WriteReg(CC2500_18_MCSM0, 0x08); // Main Radio Control State Machine Configuration
|
||||||
|
CC2500_WriteReg(CC2500_19_FOCCFG, 0x1D); // Frequency Offset Compensation Configuration
|
||||||
|
CC2500_WriteReg(CC2500_1A_BSCFG, 0x1C); // Bit Synchronization Configuration
|
||||||
|
CC2500_WriteReg(CC2500_1B_AGCCTRL2, 0xC7); // AGC Control
|
||||||
|
CC2500_WriteReg(CC2500_1C_AGCCTRL1, 0x00); // AGC Control
|
||||||
|
CC2500_WriteReg(CC2500_1D_AGCCTRL0, 0xB0); // AGC Control
|
||||||
|
CC2500_WriteReg(CC2500_21_FREND1, 0xB6); // Front End RX Configuration
|
||||||
|
CC2500_WriteReg(CC2500_23_FSCAL3, 0xEA); // Frequency Synthesizer Calibration
|
||||||
|
CC2500_WriteReg(CC2500_25_FSCAL1, 0x00); // Frequency Synthesizer Calibration
|
||||||
|
CC2500_WriteReg(CC2500_26_FSCAL0, 0x11); // Frequency Synthesizer Calibration
|
||||||
|
|
||||||
|
CC2500_SetTxRxMode(TX_EN);
|
||||||
|
CC2500_SetPower();
|
||||||
|
}
|
||||||
|
void __attribute__((unused)) CC2500_250K_HoppingCalib(uint8_t num_freq)
|
||||||
|
{
|
||||||
|
for (uint8_t i = 0; i < num_freq; i++)
|
||||||
|
{
|
||||||
|
CC2500_Strobe(CC2500_SIDLE);
|
||||||
|
// spacing is 333.25 kHz, must multiply channel by 3
|
||||||
|
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[i]*3);
|
||||||
|
// calibrate
|
||||||
|
CC2500_Strobe(CC2500_SCAL);
|
||||||
|
delayMicroseconds(900);
|
||||||
|
calData[i]=CC2500_ReadReg(CC2500_25_FSCAL1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void __attribute__((unused)) CC2500_250K_Hopping(uint8_t index)
|
||||||
|
{
|
||||||
|
// spacing is 333.25 kHz, must multiply channel by 3
|
||||||
|
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[index] * 3);
|
||||||
|
// set PLL calibration
|
||||||
|
CC2500_WriteReg(CC2500_25_FSCAL1, calData[index]);
|
||||||
|
}
|
||||||
|
void __attribute__((unused)) CC2500_250K_RFChannel(uint8_t number)
|
||||||
|
{
|
||||||
|
CC2500_Strobe(CC2500_SIDLE);
|
||||||
|
// spacing is 333.25 kHz, must multiply channel by 3
|
||||||
|
CC2500_WriteReg(CC2500_0A_CHANNR, number*3);
|
||||||
|
// calibrate
|
||||||
|
CC2500_Strobe(CC2500_SCAL);
|
||||||
|
delayMicroseconds(900);
|
||||||
|
}
|
||||||
|
|
||||||
|
//NRF emulation layer with CRC16 enabled
|
||||||
|
uint8_t cc2500_nrf_tx_addr[5], cc2500_nrf_addr_len;
|
||||||
|
void __attribute__((unused)) CC2500_250K_NRF_SetTXAddr(uint8_t* addr, uint8_t len)
|
||||||
|
{
|
||||||
|
cc2500_nrf_addr_len = len;
|
||||||
|
memcpy(cc2500_nrf_tx_addr, addr, len);
|
||||||
|
}
|
||||||
|
void __attribute__((unused)) CC2500_250K_NRF_WritePayload(uint8_t* msg, uint8_t len)
|
||||||
|
{
|
||||||
|
#if defined(ESKY150V2_CC2500_INO)
|
||||||
|
uint8_t buf[158];
|
||||||
|
#else
|
||||||
|
uint8_t buf[35];
|
||||||
|
#endif
|
||||||
|
uint8_t last = 0;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
//nrf preamble
|
||||||
|
if(cc2500_nrf_tx_addr[cc2500_nrf_addr_len - 1] & 0x80)
|
||||||
|
buf[0]=0xAA;
|
||||||
|
else
|
||||||
|
buf[0]=0x55;
|
||||||
|
last++;
|
||||||
|
// address
|
||||||
|
for (i = 0; i < cc2500_nrf_addr_len; ++i)
|
||||||
|
buf[last++] = cc2500_nrf_tx_addr[cc2500_nrf_addr_len - i - 1];
|
||||||
|
// payload
|
||||||
|
for (i = 0; i < len; ++i)
|
||||||
|
buf[last++] = msg[i];
|
||||||
|
|
||||||
|
// crc
|
||||||
|
crc = 0xffff;
|
||||||
|
for (uint8_t i = 1; i < last; ++i)
|
||||||
|
crc16_update( buf[i], 8);
|
||||||
|
buf[last++] = crc >> 8;
|
||||||
|
buf[last++] = crc & 0xff;
|
||||||
|
buf[last++] = 0;
|
||||||
|
|
||||||
|
//for(uint8_t i=0;i<last;i++)
|
||||||
|
// debug("%02X ",buf[i]);
|
||||||
|
//debugln("");
|
||||||
|
// stop TX/RX
|
||||||
|
CC2500_Strobe(CC2500_SIDLE);
|
||||||
|
// flush tx FIFO
|
||||||
|
CC2500_Strobe(CC2500_SFTX);
|
||||||
|
// packet length
|
||||||
|
CC2500_WriteReg(CC2500_3F_TXFIFO, last);
|
||||||
|
// transmit nrf packet
|
||||||
|
uint8_t *buff=buf;
|
||||||
|
uint8_t status;
|
||||||
|
if(last>63)
|
||||||
|
{
|
||||||
|
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 63);
|
||||||
|
CC2500_Strobe(CC2500_STX);
|
||||||
|
last-=63;
|
||||||
|
buff+=63;
|
||||||
|
while(last)
|
||||||
|
{//Loop until all the data is sent
|
||||||
|
do
|
||||||
|
{// Wait for the FIFO to become available
|
||||||
|
status=CC2500_ReadReg(CC2500_3A_TXBYTES | CC2500_READ_BURST);
|
||||||
|
}
|
||||||
|
while((status&0x7F)>31 && (status&0x80)==0);
|
||||||
|
if(last>31)
|
||||||
|
{//Send 31 bytes
|
||||||
|
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 31);
|
||||||
|
last-=31;
|
||||||
|
buff+=31;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//Send last bytes
|
||||||
|
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last);
|
||||||
|
last=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//Send packet
|
||||||
|
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last);
|
||||||
|
CC2500_Strobe(CC2500_STX);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
@ -15,7 +15,7 @@ Multiprotocol is distributed in the hope that it will be useful,
|
|||||||
|
|
||||||
#if defined(E016HV2_CC2500_INO)
|
#if defined(E016HV2_CC2500_INO)
|
||||||
|
|
||||||
#include "iface_nrf250k.h"
|
#include "iface_cc2500.h"
|
||||||
|
|
||||||
//#define FORCE_E016HV2_ORIGINAL_ID
|
//#define FORCE_E016HV2_ORIGINAL_ID
|
||||||
|
|
||||||
@ -27,9 +27,6 @@ Multiprotocol is distributed in the hope that it will be useful,
|
|||||||
|
|
||||||
static void __attribute__((unused)) E016HV2_send_packet()
|
static void __attribute__((unused)) E016HV2_send_packet()
|
||||||
{
|
{
|
||||||
if(option==0)
|
|
||||||
option=1; // Select the CC2500
|
|
||||||
|
|
||||||
//payload length (after this byte)
|
//payload length (after this byte)
|
||||||
packet[0 ] = 0x0A;
|
packet[0 ] = 0x0A;
|
||||||
|
|
||||||
@ -42,7 +39,7 @@ static void __attribute__((unused)) E016HV2_send_packet()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIND_DONE;
|
BIND_DONE;
|
||||||
XN297L_RFChannel(rf_ch_num); // Set main channel
|
CC2500_250K_RFChannel(rf_ch_num); // Set main channel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -81,8 +78,8 @@ static void __attribute__((unused)) E016HV2_send_packet()
|
|||||||
packet[10] = GET_FLAG(CH5_SW, 0x01) // 0x01=TakeOff/Land (momentary switch)
|
packet[10] = GET_FLAG(CH5_SW, 0x01) // 0x01=TakeOff/Land (momentary switch)
|
||||||
| GET_FLAG(CH6_SW, 0x04); // 0x04=Emergeny Stop (momentary switch)
|
| GET_FLAG(CH6_SW, 0x04); // 0x04=Emergeny Stop (momentary switch)
|
||||||
|
|
||||||
XN297L_SetPower(); // Set tx_power
|
CC2500_SetPower(); // Set tx_power
|
||||||
XN297L_SetFreqOffset(); // Set frequency offset
|
CC2500_SetFreqOffset(); // Set frequency offset
|
||||||
|
|
||||||
//Build real packet and send it
|
//Build real packet and send it
|
||||||
static uint8_t pid=0;
|
static uint8_t pid=0;
|
||||||
@ -130,10 +127,8 @@ uint16_t E016HV2_callback()
|
|||||||
uint16_t initE016HV2()
|
uint16_t initE016HV2()
|
||||||
{
|
{
|
||||||
//Config CC2500
|
//Config CC2500
|
||||||
if(option==0)
|
CC2500_250K_Init();
|
||||||
option=1; // Select the CC2500
|
CC2500_250K_RFChannel(E016HV2_RF_BIND_CHANNEL); // Set bind channel
|
||||||
XN297L_Init();
|
|
||||||
XN297L_RFChannel(E016HV2_RF_BIND_CHANNEL); // Set bind channel
|
|
||||||
|
|
||||||
#ifdef FORCE_E016HV2_ORIGINAL_ID
|
#ifdef FORCE_E016HV2_ORIGINAL_ID
|
||||||
rx_tx_addr[2]=0x27;
|
rx_tx_addr[2]=0x27;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
#if defined(ESKY150V2_CC2500_INO)
|
#if defined(ESKY150V2_CC2500_INO)
|
||||||
|
|
||||||
#include "iface_nrf250k.h"
|
#include "iface_cc2500.h"
|
||||||
|
|
||||||
//#define ESKY150V2_FORCE_ID
|
//#define ESKY150V2_FORCE_ID
|
||||||
|
|
||||||
@ -52,17 +52,17 @@ static void __attribute__((unused)) ESKY150V2_set_freq(void)
|
|||||||
hopping_frequency[ESKY150V2_NFREQCHANNELS]=ESKY150V2_BIND_CHANNEL;
|
hopping_frequency[ESKY150V2_NFREQCHANNELS]=ESKY150V2_BIND_CHANNEL;
|
||||||
|
|
||||||
//Calib all channels
|
//Calib all channels
|
||||||
NRF250K_SetFreqOffset(); // Set frequency offset
|
CC2500_SetFreqOffset(); // Set frequency offset
|
||||||
NRF250K_HoppingCalib(ESKY150V2_NFREQCHANNELS+1);
|
CC2500_250K_HoppingCalib(ESKY150V2_NFREQCHANNELS+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __attribute__((unused)) ESKY150V2_send_packet()
|
static void __attribute__((unused)) ESKY150V2_send_packet()
|
||||||
{
|
{
|
||||||
NRF250K_SetFreqOffset(); // Set frequency offset
|
CC2500_SetFreqOffset(); // Set frequency offset
|
||||||
NRF250K_Hopping(hopping_frequency_no);
|
CC2500_250K_Hopping(hopping_frequency_no);
|
||||||
if (++hopping_frequency_no >= ESKY150V2_NFREQCHANNELS)
|
if (++hopping_frequency_no >= ESKY150V2_NFREQCHANNELS)
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
NRF250K_SetPower(); //Set power level
|
CC2500_SetPower(); //Set power level
|
||||||
|
|
||||||
packet[0] = 0xFA; // Unknown
|
packet[0] = 0xFA; // Unknown
|
||||||
packet[1] = 0x41; // Unknown
|
packet[1] = 0x41; // Unknown
|
||||||
@ -74,7 +74,7 @@ static void __attribute__((unused)) ESKY150V2_send_packet()
|
|||||||
packet[4+2*i] = channel;
|
packet[4+2*i] = channel;
|
||||||
packet[5+2*i] = channel>>8;
|
packet[5+2*i] = channel>>8;
|
||||||
}
|
}
|
||||||
NRF250K_WritePayload(packet, ESKY150V2_PAYLOADSIZE);
|
CC2500_250K_NRF_WritePayload(packet, ESKY150V2_PAYLOADSIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t ESKY150V2_callback()
|
uint16_t ESKY150V2_callback()
|
||||||
@ -90,14 +90,14 @@ uint16_t ESKY150V2_callback()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
BIND_DONE; //Need full power for bind to work...
|
BIND_DONE; //Need full power for bind to work...
|
||||||
NRF250K_SetPower(); //Set power level
|
CC2500_SetPower(); //Set power level
|
||||||
BIND_IN_PROGRESS;
|
BIND_IN_PROGRESS;
|
||||||
NRF250K_WritePayload(packet, ESKY150V2_BINDPAYLOADSIZE);
|
CC2500_250K_NRF_WritePayload(packet, ESKY150V2_BINDPAYLOADSIZE);
|
||||||
if (--bind_counter == 0)
|
if (--bind_counter == 0)
|
||||||
{
|
{
|
||||||
BIND_DONE;
|
BIND_DONE;
|
||||||
// Change TX address from bind to normal mode
|
// Change TX address from bind to normal mode
|
||||||
NRF250K_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE);
|
CC2500_250K_NRF_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE);
|
||||||
memset(packet,0x00,ESKY150V2_PAYLOADSIZE);
|
memset(packet,0x00,ESKY150V2_PAYLOADSIZE);
|
||||||
}
|
}
|
||||||
return 30000; //ESKY150V2_BINDING_PACKET_PERIOD;
|
return 30000; //ESKY150V2_BINDING_PACKET_PERIOD;
|
||||||
@ -108,7 +108,7 @@ uint16_t ESKY150V2_callback()
|
|||||||
uint16_t initESKY150V2()
|
uint16_t initESKY150V2()
|
||||||
{
|
{
|
||||||
if(option==0) option=1; // Trick the RF component auto select system
|
if(option==0) option=1; // Trick the RF component auto select system
|
||||||
NRF250K_Init();
|
CC2500_250K_Init();
|
||||||
ESKY150V2_set_freq();
|
ESKY150V2_set_freq();
|
||||||
hopping_frequency_no = 0;
|
hopping_frequency_no = 0;
|
||||||
|
|
||||||
@ -120,8 +120,8 @@ uint16_t initESKY150V2()
|
|||||||
|
|
||||||
if(IS_BIND_IN_PROGRESS)
|
if(IS_BIND_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
NRF250K_SetTXAddr((uint8_t *)"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE); //Bind address
|
CC2500_250K_NRF_SetTXAddr((uint8_t *)"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE); //Bind address
|
||||||
NRF250K_Hopping(ESKY150V2_NFREQCHANNELS); //Bind channel
|
CC2500_250K_Hopping(ESKY150V2_NFREQCHANNELS); //Bind channel
|
||||||
memcpy(packet,"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE);
|
memcpy(packet,"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE);
|
||||||
memcpy(&packet[ESKY150V2_TXID_SIZE],rx_tx_addr, ESKY150V2_TXID_SIZE);
|
memcpy(&packet[ESKY150V2_TXID_SIZE],rx_tx_addr, ESKY150V2_TXID_SIZE);
|
||||||
packet[8]=0x41; //Unknown
|
packet[8]=0x41; //Unknown
|
||||||
@ -134,7 +134,7 @@ uint16_t initESKY150V2()
|
|||||||
bind_counter=100;
|
bind_counter=100;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
NRF250K_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE);
|
CC2500_250K_NRF_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE);
|
||||||
return 50000;
|
return 50000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 2
|
#define VERSION_REVISION 2
|
||||||
#define VERSION_PATCH_LEVEL 8
|
#define VERSION_PATCH_LEVEL 9
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
|
@ -1094,6 +1094,7 @@ static void protocol_init()
|
|||||||
modules_reset(); // Reset all modules
|
modules_reset(); // Reset all modules
|
||||||
crc16_polynomial = 0x1021; // Default CRC crc16_polynomial
|
crc16_polynomial = 0x1021; // Default CRC crc16_polynomial
|
||||||
crc8_polynomial = 0x31; // Default CRC crc8_polynomial
|
crc8_polynomial = 0x31; // Default CRC crc8_polynomial
|
||||||
|
prev_option = option;
|
||||||
|
|
||||||
// reset telemetry
|
// reset telemetry
|
||||||
#ifdef TELEMETRY
|
#ifdef TELEMETRY
|
||||||
|
@ -39,56 +39,10 @@ static void __attribute__((unused)) XN297L_Init()
|
|||||||
//CC2500
|
//CC2500
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
debugln("Using CC2500");
|
debugln("Using CC2500");
|
||||||
|
xn297_scramble_enabled=XN297_SCRAMBLED; //enabled by default
|
||||||
PE1_off; // antenna RF2
|
PE1_off; // antenna RF2
|
||||||
PE2_on;
|
PE2_on;
|
||||||
CC2500_Reset();
|
CC2500_250K_Init();
|
||||||
CC2500_Strobe(CC2500_SIDLE);
|
|
||||||
|
|
||||||
// Address Config = No address check
|
|
||||||
// Base Frequency = 2400
|
|
||||||
// CRC Autoflush = false
|
|
||||||
// CRC Enable = false
|
|
||||||
// Channel Spacing = 333.251953
|
|
||||||
// Data Format = Normal mode
|
|
||||||
// Data Rate = 249.939
|
|
||||||
// Deviation = 126.953125
|
|
||||||
// Device Address = 0
|
|
||||||
// Manchester Enable = false
|
|
||||||
// Modulated = true
|
|
||||||
// Modulation Format = GFSK
|
|
||||||
// Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word
|
|
||||||
// RX Filter BW = 203.125000
|
|
||||||
// Sync Word Qualifier Mode = No preamble/sync
|
|
||||||
// TX Power = 0
|
|
||||||
// Whitening = false
|
|
||||||
// Fast Frequency Hopping - no PLL auto calibration
|
|
||||||
|
|
||||||
CC2500_WriteReg(CC2500_08_PKTCTRL0, 0x01); // Packet Automation Control
|
|
||||||
CC2500_WriteReg(CC2500_0B_FSCTRL1, 0x0A); // Frequency Synthesizer Control
|
|
||||||
CC2500_WriteReg(CC2500_0C_FSCTRL0, option); // Frequency offset hack
|
|
||||||
CC2500_WriteReg(CC2500_0D_FREQ2, 0x5C); // Frequency Control Word, High Byte
|
|
||||||
CC2500_WriteReg(CC2500_0E_FREQ1, 0x4E); // Frequency Control Word, Middle Byte
|
|
||||||
CC2500_WriteReg(CC2500_0F_FREQ0, 0xC3); // Frequency Control Word, Low Byte
|
|
||||||
CC2500_WriteReg(CC2500_10_MDMCFG4, 0x8D); // Modem Configuration
|
|
||||||
CC2500_WriteReg(CC2500_11_MDMCFG3, 0x3B); // Modem Configuration
|
|
||||||
CC2500_WriteReg(CC2500_12_MDMCFG2, 0x10); // Modem Configuration
|
|
||||||
CC2500_WriteReg(CC2500_13_MDMCFG1, 0x23); // Modem Configuration
|
|
||||||
CC2500_WriteReg(CC2500_14_MDMCFG0, 0xA4); // Modem Configuration
|
|
||||||
CC2500_WriteReg(CC2500_15_DEVIATN, 0x62); // Modem Deviation Setting
|
|
||||||
CC2500_WriteReg(CC2500_18_MCSM0, 0x08); // Main Radio Control State Machine Configuration
|
|
||||||
CC2500_WriteReg(CC2500_19_FOCCFG, 0x1D); // Frequency Offset Compensation Configuration
|
|
||||||
CC2500_WriteReg(CC2500_1A_BSCFG, 0x1C); // Bit Synchronization Configuration
|
|
||||||
CC2500_WriteReg(CC2500_1B_AGCCTRL2, 0xC7); // AGC Control
|
|
||||||
CC2500_WriteReg(CC2500_1C_AGCCTRL1, 0x00); // AGC Control
|
|
||||||
CC2500_WriteReg(CC2500_1D_AGCCTRL0, 0xB0); // AGC Control
|
|
||||||
CC2500_WriteReg(CC2500_21_FREND1, 0xB6); // Front End RX Configuration
|
|
||||||
CC2500_WriteReg(CC2500_23_FSCAL3, 0xEA); // Frequency Synthesizer Calibration
|
|
||||||
CC2500_WriteReg(CC2500_25_FSCAL1, 0x00); // Frequency Synthesizer Calibration
|
|
||||||
CC2500_WriteReg(CC2500_26_FSCAL0, 0x11); // Frequency Synthesizer Calibration
|
|
||||||
|
|
||||||
CC2500_SetTxRxMode(TX_EN);
|
|
||||||
CC2500_SetPower();
|
|
||||||
xn297_scramble_enabled=XN297_SCRAMBLED; //enabled by default
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,14 +221,7 @@ static void __attribute__((unused)) XN297L_HoppingCalib(uint8_t num_freq)
|
|||||||
#endif
|
#endif
|
||||||
return; //NRF
|
return; //NRF
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
for (uint8_t i = 0; i < num_freq; i++)
|
CC2500_250K_HoppingCalib(num_freq);
|
||||||
{
|
|
||||||
CC2500_Strobe(CC2500_SIDLE);
|
|
||||||
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[i]*3);
|
|
||||||
CC2500_Strobe(CC2500_SCAL);
|
|
||||||
delayMicroseconds(900);
|
|
||||||
calData[i]=CC2500_ReadReg(CC2500_25_FSCAL1);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,10 +235,7 @@ static void __attribute__((unused)) XN297L_Hopping(uint8_t index)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
// spacing is 333.25 kHz, must multiply xn297 channel by 3
|
CC2500_250K_Hopping(index);
|
||||||
CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[index] * 3);
|
|
||||||
// set PLL calibration
|
|
||||||
CC2500_WriteReg(CC2500_25_FSCAL1, calData[index]);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,10 +249,7 @@ static void __attribute__((unused)) XN297L_RFChannel(uint8_t number)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
CC2500_Strobe(CC2500_SIDLE);
|
CC2500_250K_RFChannel(number);
|
||||||
CC2500_WriteReg(CC2500_0A_CHANNR, number*3);
|
|
||||||
CC2500_Strobe(CC2500_SCAL);
|
|
||||||
delayMicroseconds(900);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,9 +277,8 @@ static void __attribute__((unused)) XN297L_SetFreqOffset()
|
|||||||
if (prev_option != option)
|
if (prev_option != option)
|
||||||
{
|
{
|
||||||
if(prev_option==0 || option==0)
|
if(prev_option==0 || option==0)
|
||||||
CHANGE_PROTOCOL_FLAG_on;
|
CHANGE_PROTOCOL_FLAG_on; // switch from NRF <-> CC2500
|
||||||
prev_option = option;
|
CC2500_SetFreqOffset();
|
||||||
CC2500_WriteReg(CC2500_0C_FSCTRL0, option);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -357,8 +297,7 @@ static void __attribute__((unused)) NRF250K_SetTXAddr(uint8_t* addr, uint8_t len
|
|||||||
}
|
}
|
||||||
//CC2500
|
//CC2500
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
xn297_addr_len = len;
|
CC2500_250K_NRF_SetTXAddr(addr, len);
|
||||||
memcpy(xn297_tx_addr, addr, len);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -375,78 +314,7 @@ static void __attribute__((unused)) NRF250K_WritePayload(uint8_t* msg, uint8_t l
|
|||||||
}
|
}
|
||||||
//CC2500
|
//CC2500
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
#if defined(ESKY150V2_CC2500_INO)
|
CC2500_250K_NRF_WritePayload(msg, len);
|
||||||
uint8_t buf[158];
|
|
||||||
#else
|
|
||||||
uint8_t buf[35];
|
|
||||||
#endif
|
|
||||||
uint8_t last = 0;
|
|
||||||
uint8_t i;
|
|
||||||
|
|
||||||
//nrf preamble
|
|
||||||
if(xn297_tx_addr[xn297_addr_len - 1] & 0x80)
|
|
||||||
buf[0]=0xAA;
|
|
||||||
else
|
|
||||||
buf[0]=0x55;
|
|
||||||
last++;
|
|
||||||
// address
|
|
||||||
for (i = 0; i < xn297_addr_len; ++i)
|
|
||||||
buf[last++] = xn297_tx_addr[xn297_addr_len - i - 1];
|
|
||||||
// payload
|
|
||||||
for (i = 0; i < len; ++i)
|
|
||||||
buf[last++] = msg[i];
|
|
||||||
|
|
||||||
// crc
|
|
||||||
crc = 0xffff;
|
|
||||||
for (uint8_t i = 1; i < last; ++i)
|
|
||||||
crc16_update( buf[i], 8);
|
|
||||||
buf[last++] = crc >> 8;
|
|
||||||
buf[last++] = crc & 0xff;
|
|
||||||
buf[last++] = 0;
|
|
||||||
|
|
||||||
//for(uint8_t i=0;i<last;i++)
|
|
||||||
// debug("%02X ",buf[i]);
|
|
||||||
//debugln("");
|
|
||||||
// stop TX/RX
|
|
||||||
CC2500_Strobe(CC2500_SIDLE);
|
|
||||||
// flush tx FIFO
|
|
||||||
CC2500_Strobe(CC2500_SFTX);
|
|
||||||
// packet length
|
|
||||||
CC2500_WriteReg(CC2500_3F_TXFIFO, last);
|
|
||||||
// transmit nrf packet
|
|
||||||
uint8_t *buff=buf;
|
|
||||||
uint8_t status;
|
|
||||||
if(last>63)
|
|
||||||
{
|
|
||||||
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 63);
|
|
||||||
CC2500_Strobe(CC2500_STX);
|
|
||||||
last-=63;
|
|
||||||
buff+=63;
|
|
||||||
while(last)
|
|
||||||
{//Loop until all the data is sent
|
|
||||||
do
|
|
||||||
{// Wait for the FIFO to become available
|
|
||||||
status=CC2500_ReadReg(CC2500_3A_TXBYTES | CC2500_READ_BURST);
|
|
||||||
}
|
|
||||||
while((status&0x7F)>31 && (status&0x80)==0);
|
|
||||||
if(last>31)
|
|
||||||
{//Send 31 bytes
|
|
||||||
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, 31);
|
|
||||||
last-=31;
|
|
||||||
buff+=31;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{//Send last bytes
|
|
||||||
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last);
|
|
||||||
last=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{//Send packet
|
|
||||||
CC2500_WriteRegisterMulti(CC2500_3F_TXFIFO, buff, last);
|
|
||||||
CC2500_Strobe(CC2500_STX);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,6 +251,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifndef CC2500_INSTALLED
|
#ifndef CC2500_INSTALLED
|
||||||
#undef CORONA_CC2500_INO
|
#undef CORONA_CC2500_INO
|
||||||
|
#undef E016HV2_CC2500_INO
|
||||||
#undef ESKY150V2_CC2500_INO
|
#undef ESKY150V2_CC2500_INO
|
||||||
#undef FRSKYD_CC2500_INO
|
#undef FRSKYD_CC2500_INO
|
||||||
#undef FRSKYL_CC2500_INO
|
#undef FRSKYL_CC2500_INO
|
||||||
@ -259,13 +260,12 @@
|
|||||||
#undef FRSKY_RX_CC2500_INO
|
#undef FRSKY_RX_CC2500_INO
|
||||||
#undef HITEC_CC2500_INO
|
#undef HITEC_CC2500_INO
|
||||||
#undef HOTT_CC2500_INO
|
#undef HOTT_CC2500_INO
|
||||||
#undef OMP_CC2500_INO
|
#undef OMP_CC2500_INO // Use both CC2500 and NRF code
|
||||||
#undef REDPINE_CC2500_INO
|
#undef REDPINE_CC2500_INO
|
||||||
#undef RLINK_CC2500_INO
|
#undef RLINK_CC2500_INO
|
||||||
#undef SCANNER_CC2500_INO
|
#undef SCANNER_CC2500_INO
|
||||||
#undef FUTABA_CC2500_INO
|
#undef FUTABA_CC2500_INO
|
||||||
#undef SKYARTEC_CC2500_INO
|
#undef SKYARTEC_CC2500_INO
|
||||||
#undef E016HV2_CC2500_INO
|
|
||||||
#endif
|
#endif
|
||||||
#ifndef NRF24L01_INSTALLED
|
#ifndef NRF24L01_INSTALLED
|
||||||
#undef ASSAN_NRF24L01_INO
|
#undef ASSAN_NRF24L01_INO
|
||||||
@ -277,11 +277,9 @@
|
|||||||
#undef CG023_NRF24L01_INO
|
#undef CG023_NRF24L01_INO
|
||||||
#undef CX10_NRF24L01_INO
|
#undef CX10_NRF24L01_INO
|
||||||
#undef DM002_NRF24L01_INO
|
#undef DM002_NRF24L01_INO
|
||||||
#undef E016HV2_CC2500_INO // Use both CC2500 and NRF code
|
|
||||||
#undef E01X_NRF24L01_INO
|
#undef E01X_NRF24L01_INO
|
||||||
#undef ESKY_NRF24L01_INO
|
#undef ESKY_NRF24L01_INO
|
||||||
#undef ESKY150_NRF24L01_INO
|
#undef ESKY150_NRF24L01_INO
|
||||||
#undef ESKY150V2_CC2500_INO // Use both CC2500 and NRF code
|
|
||||||
#undef FQ777_NRF24L01_INO
|
#undef FQ777_NRF24L01_INO
|
||||||
#undef FX816_NRF24L01_INO
|
#undef FX816_NRF24L01_INO
|
||||||
#undef FY326_NRF24L01_INO
|
#undef FY326_NRF24L01_INO
|
||||||
|
@ -191,7 +191,7 @@
|
|||||||
//The protocols below need a CC2500 to be installed
|
//The protocols below need a CC2500 to be installed
|
||||||
#define CORONA_CC2500_INO
|
#define CORONA_CC2500_INO
|
||||||
#define E016HV2_CC2500_INO
|
#define E016HV2_CC2500_INO
|
||||||
#define ESKY150V2_CC2500_INO //Need both CC2500 and NRF
|
#define ESKY150V2_CC2500_INO
|
||||||
#define FRSKYL_CC2500_INO
|
#define FRSKYL_CC2500_INO
|
||||||
#define FRSKYD_CC2500_INO
|
#define FRSKYD_CC2500_INO
|
||||||
#define FRSKYV_CC2500_INO
|
#define FRSKYV_CC2500_INO
|
||||||
@ -199,7 +199,6 @@
|
|||||||
#define FRSKY_RX_CC2500_INO
|
#define FRSKY_RX_CC2500_INO
|
||||||
#define HITEC_CC2500_INO
|
#define HITEC_CC2500_INO
|
||||||
#define HOTT_CC2500_INO
|
#define HOTT_CC2500_INO
|
||||||
#define OMP_CC2500_INO //Need both CC2500 and NRF
|
|
||||||
#define SCANNER_CC2500_INO
|
#define SCANNER_CC2500_INO
|
||||||
#define FUTABA_CC2500_INO
|
#define FUTABA_CC2500_INO
|
||||||
#define SKYARTEC_CC2500_INO
|
#define SKYARTEC_CC2500_INO
|
||||||
@ -234,6 +233,7 @@
|
|||||||
#define MJXQ_NRF24L01_INO
|
#define MJXQ_NRF24L01_INO
|
||||||
#define MT99XX_NRF24L01_INO
|
#define MT99XX_NRF24L01_INO
|
||||||
#define NCC1701_NRF24L01_INO
|
#define NCC1701_NRF24L01_INO
|
||||||
|
#define OMP_CC2500_INO //Need both CC2500 and NRF
|
||||||
#define POTENSIC_NRF24L01_INO
|
#define POTENSIC_NRF24L01_INO
|
||||||
#define PROPEL_NRF24L01_INO
|
#define PROPEL_NRF24L01_INO
|
||||||
#define Q303_NRF24L01_INO
|
#define Q303_NRF24L01_INO
|
||||||
|
@ -76,13 +76,13 @@ CFlie|38|CFlie||||||||NRF24L01|
|
|||||||
[DM002](Protocols_Details.md#DM002---33)|33|DM002||||||||NRF24L01|XN297
|
[DM002](Protocols_Details.md#DM002---33)|33|DM002||||||||NRF24L01|XN297
|
||||||
[DSM](Protocols_Details.md#DSM---6)|6|DSM2_1F|DSM2_2F|DSMX_1F|DSMX_2F|AUTO||||CYRF6936|
|
[DSM](Protocols_Details.md#DSM---6)|6|DSM2_1F|DSM2_2F|DSMX_1F|DSMX_2F|AUTO||||CYRF6936|
|
||||||
[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|RX||||||||CYRF6936|
|
[DSM_RX](Protocols_Details.md#DSM_RX---70)|70|RX||||||||CYRF6936|
|
||||||
[E010R5](Protocols_Details.md#E010R5---81)|81|||||||||CYRF6936/NRF24L01|unknown
|
[E010R5](Protocols_Details.md#E010R5---81)|81|||||||||CYRF6936/NRF24L01|RF2500
|
||||||
[E016HV2](Protocols_Details.md#E016HV2---80)|80|||||||||CC2500/NRF24L01|unknown
|
[E016HV2](Protocols_Details.md#E016HV2---80)|80|||||||||CC2500/NRF24L01|unknown
|
||||||
[E01X](Protocols_Details.md#E01X---45)|45|E012|E015|E016H||||||NRF24L01|XN297/HS6200
|
[E01X](Protocols_Details.md#E01X---45)|45|E012|E015|E016H||||||NRF24L01|XN297/HS6200
|
||||||
[E129](Protocols_Details.md#E129---83)|83|||||||||CYRF6936/NRF24L01|unknown
|
[E129](Protocols_Details.md#E129---83)|83|||||||||CYRF6936/NRF24L01|RF2500
|
||||||
[ESky](Protocols_Details.md#ESKY---16)|16|ESky|ET4|||||||NRF24L01|
|
[ESky](Protocols_Details.md#ESKY---16)|16|ESky|ET4|||||||NRF24L01|
|
||||||
[ESky150](Protocols_Details.md#ESKY150---35)|35|ESKY150||||||||NRF24L01|
|
[ESky150](Protocols_Details.md#ESKY150---35)|35|ESKY150||||||||NRF24L01|
|
||||||
[ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|ESky150V2||||||||CC2500|NRF24L01
|
[ESky150V2](Protocols_Details.md#ESKY150V2---69)|69|ESky150V2||||||||CC2500|NRF51822
|
||||||
[Flysky](Protocols_Details.md#FLYSKY---1)|1|Flysky|V9x9|V6x6|V912|CX20||||A7105|
|
[Flysky](Protocols_Details.md#FLYSKY---1)|1|Flysky|V9x9|V6x6|V912|CX20||||A7105|
|
||||||
[Flysky AFHDS2A](Protocols_Details.md#FLYSKY-AFHDS2A---28)|28|PWM_IBUS|PPM_IBUS|PWM_SBUS|PPM_SBUS|PWM_IBUS16|PPM_IBUS16|||A7105|
|
[Flysky AFHDS2A](Protocols_Details.md#FLYSKY-AFHDS2A---28)|28|PWM_IBUS|PPM_IBUS|PWM_SBUS|PPM_SBUS|PWM_IBUS16|PPM_IBUS16|||A7105|
|
||||||
[Flysky AFHDS2A RX](Protocols_Details.md#FLYSKY-AFHDS2A-RX---56)|56|RX||||||||A7105|
|
[Flysky AFHDS2A RX](Protocols_Details.md#FLYSKY-AFHDS2A-RX---56)|56|RX||||||||A7105|
|
||||||
@ -399,6 +399,19 @@ TAKE_OFF/LANDING: this is a momentary switch to arm the motors or land the quad.
|
|||||||
|
|
||||||
EMERGENCY: Can be used along with the throttle cut switch: Throttle cut=set throttle at -100% and set EMERGENCY to 100%
|
EMERGENCY: Can be used along with the throttle cut switch: Throttle cut=set throttle at -100% and set EMERGENCY to 100%
|
||||||
|
|
||||||
|
## ESKY150V2 - *69*
|
||||||
|
ESky protocol for small models: 150 V2, F150 V2, Blade 70s
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- RX output will match the eSky standard TAER independently of the input configuration AETR, RETA... unless on OpenTX 2.3.3+ you use the "Disable channel mapping" feature on the GUI.
|
||||||
|
- To run this protocol you need both CC2500 and NRF24L01 to be enabled for code reasons, only the CC2500 is really used.
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5 |CH6 |CH7 |CH8 |CH9 |CH10|CH11|CH12|CH13|CH14|CH15|CH16
|
||||||
|
---|---|---|---|----|----|----|----|----|----|----|----|----|----|----|----
|
||||||
|
A|E|T|R|CH5 |CH6 |CH7 |CH8 |CH9 |CH10|CH11|CH12|CH13|CH14|CH15|CH16
|
||||||
|
|
||||||
|
RATE for the F150 V2 is assigned to channel 5: -100%=low, 100%=high
|
||||||
|
|
||||||
## FRSKYV - *25*
|
## FRSKYV - *25*
|
||||||
Models: FrSky receivers V8R4, V8R7 and V8FR.
|
Models: FrSky receivers V8R4, V8R7 and V8FR.
|
||||||
- FrSkyV = FrSky 1 way
|
- FrSkyV = FrSky 1 way
|
||||||
@ -603,29 +616,6 @@ Recommended for best telemetry performance.
|
|||||||
Telemetry compatibility mode when Sync does not work due to an old firmware on the RX.
|
Telemetry compatibility mode when Sync does not work due to an old firmware on the RX.
|
||||||
You should definitively upgrade your receivers/sensors to the latest firmware versions: https://www.rcgroups.com/forums/showpost.php?p=44668015&postcount=18022
|
You should definitively upgrade your receivers/sensors to the latest firmware versions: https://www.rcgroups.com/forums/showpost.php?p=44668015&postcount=18022
|
||||||
|
|
||||||
## OMP - *77*
|
|
||||||
Model: OMPHOBBY M1 & M2 Helis, T720 RC Glider
|
|
||||||
|
|
||||||
Telemetry supported:
|
|
||||||
- A1 = battery voltage including "recovered" battery voltage from corrupted telemetry packets
|
|
||||||
- A2 = battery voltage from only good telemetry packets
|
|
||||||
- How to calculate accurately the OpenTX Ratio and Offset:
|
|
||||||
Set the Ratio to 12.7 and Offset to 0, plug 2 batteries with extreme voltage values, write down the values Batt1=12.5V & Telem1=12.2V, Batt2=7V & Telem2=6.6V then calculate/set Ratio=12.7*[(12.5-7)/(12.2-6.6)]=12.47 => 12.5 and Offset=12.5-12.2*[(12.5-7)/(12.2-6.6)]=0.517 => 0.5
|
|
||||||
- RX_RSSI = TQly = percentage of received telemetry packets (good and corrupted) from the model which has nothing to do with how well the RX is receiving the TX
|
|
||||||
|
|
||||||
Option for this protocol corresponds to the CC2500 fine frequency tuning. This value is different for each Module and **must** be accurate otherwise the link will not be stable.
|
|
||||||
Check the [Frequency Tuning page](/docs/Frequency_Tuning.md) to determine it.
|
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
|
||||||
---|---|---|---|---|---|---
|
|
||||||
A|E|T_PITCH|R|T_HOLD|IDLE|MODE
|
|
||||||
|
|
||||||
IDLE= 3 pos switch: -100% Normal, 0% Idle1, +100% Idle2
|
|
||||||
|
|
||||||
From the TX manual: MODE= 3 pos switch -100% Attitude, 0% Attitude(?), +100% 3D
|
|
||||||
For M2: MODE= 3 pos switch -100% 6G, 0% 3D, +100% 3D
|
|
||||||
|
|
||||||
|
|
||||||
## Scanner - *54*
|
## Scanner - *54*
|
||||||
2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool.
|
2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool.
|
||||||
|
|
||||||
@ -1134,19 +1124,6 @@ A|E|T|R|FMODE|AUX6|AUX7
|
|||||||
|
|
||||||
FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..100%=>3
|
FMODE and AUX7 have 4 positions: -100%..-50%=>0, -50%..5%=>1, 5%..50%=>2, 50%..100%=>3
|
||||||
|
|
||||||
## ESKY150V2 - *69*
|
|
||||||
ESky protocol for small models: 150 V2, F150 V2, Blade 70s
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
- RX output will match the eSky standard TAER independently of the input configuration AETR, RETA... unless on OpenTX 2.3.3+ you use the "Disable channel mapping" feature on the GUI.
|
|
||||||
- To run this protocol you need both CC2500 and NRF24L01 to be enabled for code reasons, only the CC2500 is really used.
|
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5 |CH6 |CH7 |CH8 |CH9 |CH10|CH11|CH12|CH13|CH14|CH15|CH16
|
|
||||||
---|---|---|---|----|----|----|----|----|----|----|----|----|----|----|----
|
|
||||||
A|E|T|R|CH5 |CH6 |CH7 |CH8 |CH9 |CH10|CH11|CH12|CH13|CH14|CH15|CH16
|
|
||||||
|
|
||||||
RATE for the F150 V2 is assigned to channel 5: -100%=low, 100%=high
|
|
||||||
|
|
||||||
## FX816 - *58*
|
## FX816 - *58*
|
||||||
Model: FEI XIONG FX816 P38
|
Model: FEI XIONG FX816 P38
|
||||||
|
|
||||||
@ -1412,6 +1389,30 @@ CH1|CH2|CH3|CH4|CH5
|
|||||||
---|---|---|---|---
|
---|---|---|---|---
|
||||||
A|E|T|R|Warp
|
A|E|T|R|Warp
|
||||||
|
|
||||||
|
## OMP - *77*
|
||||||
|
Model: OMPHOBBY M1 & M2 Helis, T720 RC Glider
|
||||||
|
|
||||||
|
This protocol requires both a NRF24L01 and CC2500 RF components to operate.
|
||||||
|
|
||||||
|
Telemetry supported:
|
||||||
|
- A1 = battery voltage including "recovered" battery voltage from corrupted telemetry packets
|
||||||
|
- A2 = battery voltage from only good telemetry packets
|
||||||
|
- How to calculate accurately the OpenTX Ratio and Offset:
|
||||||
|
Set the Ratio to 12.7 and Offset to 0, plug 2 batteries with extreme voltage values, write down the values Batt1=12.5V & Telem1=12.2V, Batt2=7V & Telem2=6.6V then calculate/set Ratio=12.7*[(12.5-7)/(12.2-6.6)]=12.47 => 12.5 and Offset=12.5-12.2*[(12.5-7)/(12.2-6.6)]=0.517 => 0.5
|
||||||
|
- RX_RSSI = TQly = percentage of received telemetry packets (good and corrupted) from the model which has nothing to do with how well the RX is receiving the TX
|
||||||
|
|
||||||
|
Option for this protocol corresponds to the CC2500 fine frequency tuning. This value is different for each Module and **must** be accurate otherwise the link will not be stable.
|
||||||
|
Check the [Frequency Tuning page](/docs/Frequency_Tuning.md) to determine it.
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
||||||
|
---|---|---|---|---|---|---
|
||||||
|
A|E|T_PITCH|R|T_HOLD|IDLE|MODE
|
||||||
|
|
||||||
|
IDLE= 3 pos switch: -100% Normal, 0% Idle1, +100% Idle2
|
||||||
|
|
||||||
|
From the TX manual: MODE= 3 pos switch -100% Attitude, 0% Attitude(?), +100% 3D
|
||||||
|
For M2: MODE= 3 pos switch -100% 6G, 0% 3D, +100% 3D
|
||||||
|
|
||||||
## Potensic - *51*
|
## Potensic - *51*
|
||||||
Model: Potensic A20
|
Model: Potensic A20
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user