diff --git a/Multiprotocol/CC2500_SPI.ino b/Multiprotocol/CC2500_SPI.ino index c59e2f9..55a6317 100644 --- a/Multiprotocol/CC2500_SPI.ino +++ b/Multiprotocol/CC2500_SPI.ino @@ -163,4 +163,174 @@ void CC2500_SetPower() 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;i63) + { + 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 \ No newline at end of file diff --git a/Multiprotocol/E016HV2_cc2500.ino b/Multiprotocol/E016HV2_cc2500.ino index f4ef862..cebb704 100644 --- a/Multiprotocol/E016HV2_cc2500.ino +++ b/Multiprotocol/E016HV2_cc2500.ino @@ -15,7 +15,7 @@ Multiprotocol is distributed in the hope that it will be useful, #if defined(E016HV2_CC2500_INO) -#include "iface_nrf250k.h" +#include "iface_cc2500.h" //#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() { - if(option==0) - option=1; // Select the CC2500 - //payload length (after this byte) packet[0 ] = 0x0A; @@ -42,7 +39,7 @@ static void __attribute__((unused)) E016HV2_send_packet() else { BIND_DONE; - XN297L_RFChannel(rf_ch_num); // Set main channel + CC2500_250K_RFChannel(rf_ch_num); // Set main channel } } else @@ -81,8 +78,8 @@ static void __attribute__((unused)) E016HV2_send_packet() packet[10] = GET_FLAG(CH5_SW, 0x01) // 0x01=TakeOff/Land (momentary switch) | GET_FLAG(CH6_SW, 0x04); // 0x04=Emergeny Stop (momentary switch) - XN297L_SetPower(); // Set tx_power - XN297L_SetFreqOffset(); // Set frequency offset + CC2500_SetPower(); // Set tx_power + CC2500_SetFreqOffset(); // Set frequency offset //Build real packet and send it static uint8_t pid=0; @@ -130,10 +127,8 @@ uint16_t E016HV2_callback() uint16_t initE016HV2() { //Config CC2500 - if(option==0) - option=1; // Select the CC2500 - XN297L_Init(); - XN297L_RFChannel(E016HV2_RF_BIND_CHANNEL); // Set bind channel + CC2500_250K_Init(); + CC2500_250K_RFChannel(E016HV2_RF_BIND_CHANNEL); // Set bind channel #ifdef FORCE_E016HV2_ORIGINAL_ID rx_tx_addr[2]=0x27; diff --git a/Multiprotocol/ESky150v2_cc2500.ino b/Multiprotocol/ESky150v2_cc2500.ino index 5a69838..fdd72a7 100644 --- a/Multiprotocol/ESky150v2_cc2500.ino +++ b/Multiprotocol/ESky150v2_cc2500.ino @@ -15,7 +15,7 @@ #if defined(ESKY150V2_CC2500_INO) -#include "iface_nrf250k.h" +#include "iface_cc2500.h" //#define ESKY150V2_FORCE_ID @@ -52,17 +52,17 @@ static void __attribute__((unused)) ESKY150V2_set_freq(void) hopping_frequency[ESKY150V2_NFREQCHANNELS]=ESKY150V2_BIND_CHANNEL; //Calib all channels - NRF250K_SetFreqOffset(); // Set frequency offset - NRF250K_HoppingCalib(ESKY150V2_NFREQCHANNELS+1); + CC2500_SetFreqOffset(); // Set frequency offset + CC2500_250K_HoppingCalib(ESKY150V2_NFREQCHANNELS+1); } static void __attribute__((unused)) ESKY150V2_send_packet() { - NRF250K_SetFreqOffset(); // Set frequency offset - NRF250K_Hopping(hopping_frequency_no); + CC2500_SetFreqOffset(); // Set frequency offset + CC2500_250K_Hopping(hopping_frequency_no); if (++hopping_frequency_no >= ESKY150V2_NFREQCHANNELS) hopping_frequency_no = 0; - NRF250K_SetPower(); //Set power level + CC2500_SetPower(); //Set power level packet[0] = 0xFA; // Unknown packet[1] = 0x41; // Unknown @@ -74,7 +74,7 @@ static void __attribute__((unused)) ESKY150V2_send_packet() packet[4+2*i] = channel; packet[5+2*i] = channel>>8; } - NRF250K_WritePayload(packet, ESKY150V2_PAYLOADSIZE); + CC2500_250K_NRF_WritePayload(packet, ESKY150V2_PAYLOADSIZE); } uint16_t ESKY150V2_callback() @@ -90,14 +90,14 @@ uint16_t ESKY150V2_callback() else { BIND_DONE; //Need full power for bind to work... - NRF250K_SetPower(); //Set power level + CC2500_SetPower(); //Set power level BIND_IN_PROGRESS; - NRF250K_WritePayload(packet, ESKY150V2_BINDPAYLOADSIZE); + CC2500_250K_NRF_WritePayload(packet, ESKY150V2_BINDPAYLOADSIZE); if (--bind_counter == 0) { BIND_DONE; // 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); } return 30000; //ESKY150V2_BINDING_PACKET_PERIOD; @@ -108,7 +108,7 @@ uint16_t ESKY150V2_callback() uint16_t initESKY150V2() { if(option==0) option=1; // Trick the RF component auto select system - NRF250K_Init(); + CC2500_250K_Init(); ESKY150V2_set_freq(); hopping_frequency_no = 0; @@ -120,8 +120,8 @@ uint16_t initESKY150V2() if(IS_BIND_IN_PROGRESS) { - NRF250K_SetTXAddr((uint8_t *)"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE); //Bind address - NRF250K_Hopping(ESKY150V2_NFREQCHANNELS); //Bind channel + CC2500_250K_NRF_SetTXAddr((uint8_t *)"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE); //Bind address + CC2500_250K_Hopping(ESKY150V2_NFREQCHANNELS); //Bind channel memcpy(packet,"\x73\x73\x74\x63", ESKY150V2_TXID_SIZE); memcpy(&packet[ESKY150V2_TXID_SIZE],rx_tx_addr, ESKY150V2_TXID_SIZE); packet[8]=0x41; //Unknown @@ -134,7 +134,7 @@ uint16_t initESKY150V2() bind_counter=100; } else - NRF250K_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE); + CC2500_250K_NRF_SetTXAddr(rx_tx_addr, ESKY150V2_TXID_SIZE); return 50000; } diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 9f71c05..5cfba43 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 2 -#define VERSION_PATCH_LEVEL 8 +#define VERSION_PATCH_LEVEL 9 //****************** // Protocols diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index a0cf8c7..52ef460 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -1094,6 +1094,7 @@ static void protocol_init() modules_reset(); // Reset all modules crc16_polynomial = 0x1021; // Default CRC crc16_polynomial crc8_polynomial = 0x31; // Default CRC crc8_polynomial + prev_option = option; // reset telemetry #ifdef TELEMETRY diff --git a/Multiprotocol/NRF250K_EMU.ino b/Multiprotocol/NRF250K_EMU.ino index 26028e0..da9dbf9 100644 --- a/Multiprotocol/NRF250K_EMU.ino +++ b/Multiprotocol/NRF250K_EMU.ino @@ -39,56 +39,10 @@ static void __attribute__((unused)) XN297L_Init() //CC2500 #ifdef CC2500_INSTALLED debugln("Using CC2500"); + xn297_scramble_enabled=XN297_SCRAMBLED; //enabled by default PE1_off; // antenna RF2 PE2_on; - CC2500_Reset(); - 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 + CC2500_250K_Init(); #endif } @@ -267,14 +221,7 @@ static void __attribute__((unused)) XN297L_HoppingCalib(uint8_t num_freq) #endif return; //NRF #ifdef CC2500_INSTALLED - for (uint8_t i = 0; i < num_freq; i++) - { - 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); - } + CC2500_250K_HoppingCalib(num_freq); #endif } @@ -288,10 +235,7 @@ static void __attribute__((unused)) XN297L_Hopping(uint8_t index) return; } #ifdef CC2500_INSTALLED - // spacing is 333.25 kHz, must multiply xn297 channel by 3 - CC2500_WriteReg(CC2500_0A_CHANNR, hopping_frequency[index] * 3); - // set PLL calibration - CC2500_WriteReg(CC2500_25_FSCAL1, calData[index]); + CC2500_250K_Hopping(index); #endif } @@ -305,10 +249,7 @@ static void __attribute__((unused)) XN297L_RFChannel(uint8_t number) return; } #ifdef CC2500_INSTALLED - CC2500_Strobe(CC2500_SIDLE); - CC2500_WriteReg(CC2500_0A_CHANNR, number*3); - CC2500_Strobe(CC2500_SCAL); - delayMicroseconds(900); + CC2500_250K_RFChannel(number); #endif } @@ -336,9 +277,8 @@ static void __attribute__((unused)) XN297L_SetFreqOffset() if (prev_option != option) { if(prev_option==0 || option==0) - CHANGE_PROTOCOL_FLAG_on; - prev_option = option; - CC2500_WriteReg(CC2500_0C_FSCTRL0, option); + CHANGE_PROTOCOL_FLAG_on; // switch from NRF <-> CC2500 + CC2500_SetFreqOffset(); } #endif } @@ -357,8 +297,7 @@ static void __attribute__((unused)) NRF250K_SetTXAddr(uint8_t* addr, uint8_t len } //CC2500 #ifdef CC2500_INSTALLED - xn297_addr_len = len; - memcpy(xn297_tx_addr, addr, len); + CC2500_250K_NRF_SetTXAddr(addr, len); #endif } @@ -375,78 +314,7 @@ static void __attribute__((unused)) NRF250K_WritePayload(uint8_t* msg, uint8_t l } //CC2500 #ifdef CC2500_INSTALLED - #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(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;i63) - { - 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); - } + CC2500_250K_NRF_WritePayload(msg, len); #endif } diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index a2eb3bb..e047917 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -251,6 +251,7 @@ #endif #ifndef CC2500_INSTALLED #undef CORONA_CC2500_INO + #undef E016HV2_CC2500_INO #undef ESKY150V2_CC2500_INO #undef FRSKYD_CC2500_INO #undef FRSKYL_CC2500_INO @@ -259,13 +260,12 @@ #undef FRSKY_RX_CC2500_INO #undef HITEC_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 RLINK_CC2500_INO #undef SCANNER_CC2500_INO #undef FUTABA_CC2500_INO #undef SKYARTEC_CC2500_INO - #undef E016HV2_CC2500_INO #endif #ifndef NRF24L01_INSTALLED #undef ASSAN_NRF24L01_INO @@ -277,11 +277,9 @@ #undef CG023_NRF24L01_INO #undef CX10_NRF24L01_INO #undef DM002_NRF24L01_INO - #undef E016HV2_CC2500_INO // Use both CC2500 and NRF code #undef E01X_NRF24L01_INO #undef ESKY_NRF24L01_INO #undef ESKY150_NRF24L01_INO - #undef ESKY150V2_CC2500_INO // Use both CC2500 and NRF code #undef FQ777_NRF24L01_INO #undef FX816_NRF24L01_INO #undef FY326_NRF24L01_INO diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index 89410f9..6f06afb 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -191,7 +191,7 @@ //The protocols below need a CC2500 to be installed #define CORONA_CC2500_INO #define E016HV2_CC2500_INO -#define ESKY150V2_CC2500_INO //Need both CC2500 and NRF +#define ESKY150V2_CC2500_INO #define FRSKYL_CC2500_INO #define FRSKYD_CC2500_INO #define FRSKYV_CC2500_INO @@ -199,7 +199,6 @@ #define FRSKY_RX_CC2500_INO #define HITEC_CC2500_INO #define HOTT_CC2500_INO -#define OMP_CC2500_INO //Need both CC2500 and NRF #define SCANNER_CC2500_INO #define FUTABA_CC2500_INO #define SKYARTEC_CC2500_INO @@ -234,6 +233,7 @@ #define MJXQ_NRF24L01_INO #define MT99XX_NRF24L01_INO #define NCC1701_NRF24L01_INO +#define OMP_CC2500_INO //Need both CC2500 and NRF #define POTENSIC_NRF24L01_INO #define PROPEL_NRF24L01_INO #define Q303_NRF24L01_INO diff --git a/Protocols_Details.md b/Protocols_Details.md index 795f319..2d07307 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -76,13 +76,13 @@ CFlie|38|CFlie||||||||NRF24L01| [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_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 [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| [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 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| @@ -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% +## 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* Models: FrSky receivers V8R4, V8R7 and V8FR. - 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. 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* 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 -## 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* Model: FEI XIONG FX816 P38 @@ -1412,6 +1389,30 @@ CH1|CH2|CH3|CH4|CH5 ---|---|---|---|--- 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* Model: Potensic A20