Skip to content

hfan/DIY-Multiprotocol-TX-Module

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DIY-Multiprotocol-TX-Module

Multiprotocol is a 2.4GHz transmitter which enables any TX to control lot of different models available on the market.

The source code is partly based on the Deviation TX project, thanks to all the developpers for their great job on protocols.

Forum link on RCGROUPS for additional information or requesting a new protocol integration.

Screenshot Screenshot

To download the latest compiled version (hex file), click on Release on the top menu.

##Contents

Compatible TX

Protocols

Hardware

Compilation and programmation

Troubleshooting

##Compatible TX

###Using standard PPM output (trainer port) The multiprotocol TX module can be used on any TX with a trainer port.

Channels order is AETR by default but can be changed in the _Config.h.

The protocol selection is done via a dip switch, rotary dip switch or scsi ID selector.

Screenshot Screenshot Screenshot

You can access to up to 15 different protocols and associated settings.

Settings per selection are located in _Config.h:

  • Protocol and type: many main protocols have variants
  • RX Num: number your different RXs and make sure only one model will react to the commands
  • Power: High or low, enables to lower the power setting of your TX (indoor for example).
  • Option: -127..+127 allowing to set specific protocol options. Like for Hubsan to set the video frequency.
  • Autobind: Yes or No. At the model selection (or power applied to the TX) a bind sequence will be initiated

###Using a serial output The multiprotocol TX module takes full advantage of being used on a Turnigy 9X, 9XR, 9XR Pro, Taranis, 9Xtreme, AR9X, ... running er9x or ersky9X. An OpenTX version for Taranis is available here.

This enables full integration using the radio GUI to setup models with all the available protocols options.

Screenshot

Options are:

  • Protocol and type: many main protocols have variants
  • RX Num: number your different RXs and make sure only one model will react to the commands
  • Power: High or low, enables to lower the power setting of your TX (indoor for example).
  • Option: -127..+127 allowing to set specific protocol options. Like for Hubsan to set the video frequency.
  • Bind: bind a RX/model
  • Autobind: Yes or No. At the model selection (or power applied to the TX) a bind sequence will be initiated
  • Range: test range by setting the transmission power to the lowest value

Notes:

  • Using this solution does not need any modification of the TX since it uses the TX module slot PPM pin for serial transfer.
  • There are 2 versions of serial protocol either 8 or 16 channels. 16 channels is the latest and only available version going forward. Make sure to use the right version based on your version of er9x/ersky9x.
  • Channels order is AETR by default but can be changed in _Config.h.

###Telemetry

There are 4 protocols supporting telemetry: Hubsan, DSM, FrSky and FrSkyX.

Hubsan displays the battery voltage and TX RSSI.

DSM displays TX RSSI and full telemetry.

FrSky displays full telemetry (A0, A1, RX RSSI, TX RSSI and Hub).

FrSkyX displays full telemetry (A1, A2, RX RSSI, TX RSSI and Hub).

If used in PPM mode

Telemetry is available as a serial 9600 8 n 1 output on the TX pin of the Atmega328p using the FRSky hub format for Hubsan, FrSky, FrSkyX and DSM format for DSM2/X.

You can connect it to your TX if it is telemetry enabled or use a bluetooth adapter (HC05/HC06) along with an app on your phone/tablet (app example) to display telemetry information and setup alerts.

If used in Serial mode

Telemetry is built in for er9x and ersky9x TXs.

To enable telemetry on a Turnigy 9X or 9XR you need to modify your TX following one of the Frsky mod like this one.

Note: DSM telemetry is not available on er9x due to a lack of flash space.

Enabling telemetry on a 9XR PRO and may be other TXs does not require any hardware modifications. The additional required serial pin is already available on the TX back module pins.

Once the TX is telemetry enabled, it just needs to be configured on the model (see er9x/ersky9x documentation).

##Protocols

###TX ID The multiprotocol TX module is using a 32bits ID generated randomly at first power up. This global ID is used by nearly all protocols. There are little chances to get a duplicated ID.

For DSM2/X and Devo the CYRF6936 unique manufacturer ID is used.

It's possible to generate a new ID using bind button on the Hubsan protocol during power up.

###Bind To bind a model in PPM Mode press the physical bind button, apply power and then release.

In Serial Mode you have 2 options:

  • use the GUI, access the model protocol page and long press on Bind. This operation can be done at anytime.
  • press the physical bind button, apply power and then release. It will request a bind of the first loaded model protocol.

Notes:

  • the physical bind button is only effective at power up. Pressing the button later has no effects.
  • a bind in progress is indicated by the LED fast blinking. Make sure to bind during this period.

###Protocol selection

####Using the dial for PPM input PPM is only allowing access to a subset of existing protocols. The protocols, subprotocols and all other settings can be personalized by modifying the _Config.h file.

The default association dial position / protocol in every release is listed below.

Dial Protocol Sub_protocol RX Num Power Auto Bind Option RF Module
0 Select serial
1 FLYSKY Flysky 0 High No 0 A7105
2 HUBSAN - 0 High No 0 A7105
3 FRSKY - 0 High No -41 CC2500
4 HISKY Hisky 0 High No 0 NRF24L01
5 V2X2 - 0 High No 0 NRF24L01
6 DSM2 DSM2 0 High No 6 CYRF6936
7 DEVO - 0 High No 0 CYRF6936
8 YD717 YD717 0 High No 0 NRF24L01
9 KN WLTOYS 0 High No 0 NRF24L01
10 SYMAX SYMAX 0 High No 0 NRF24L01
11 SLT - 0 High No 0 NRF24L01
12 CX10 BLUE 0 High No 0 NRF24L01
13 CG023 CG023 0 High No 0 NRF24L01
14 BAYANG - 0 High No 0 NRF24L01
15 SYMAX SYMAX5C 0 High No 0 NRF24L01

Note:

  • The dial selection must be done before the power is applied.

####Using serial input with er9x/ersky9x Serial is allowing access to all existing protocols & sub_protocols listed below.

#####A7105 RF module

Protocol Sub_protocol
Flysky
Flysky
V9x9
V6x6
V912
Hubsan

#####CC2500 RF module

Protocol Sub_protocol
FrSky
FrSkyX
CH_16
CH_8
SFHSS

#####CYRF6936 RF module

Protocol Sub_protocol
DSM2
DSM2
DSMX
Devo

#####NRF24L01 RF module

Protocol Sub_protocol
Hisky
Hisky
HK310
V2x2
YD717
YD717
SKYWLKR
SYMAX4
XINXUN
NIHUI
KN
WLTOYS
FEILUN
SymaX
SYMAX
SYMAX5C
SLT
CX10
GREEN
BLUE
DM007
Q282
JC3015_1
JC3015_2
MK33041
Q242
CG023
CG023
YD829
H8_3D
Bayang
FrskyX
ESky
MT99XX
MT
H7
YZ
MJXQ
WLH08
X600
X800
H26D
Shenqi
FY326

Note:

  • The dial should be set to 0 for serial. Which means all protocol selection pins should be left unconnected.

###Protocols details Check the Protocols_Details.md file for a detailed description of every protocols with channels assignements.

##Hardware

###RF modules Up to 4 RF modules can be installed:

  • A7105 for Flysky, Hubsan
  • CC2500 for FrSky, FrSkyX and SFHSS
  • CYRF6936 for DSM2, DSMX, DEVO, Walkera
  • NRF24L01 for Hisky, V2x2, CX-10, SYMAX and plenty other protocols

RF modules can be installed for protocols need only. Example: if you only need the Hubsan protocol then install only a A7105 on your board.

You also need some antennas and cables.

###Board The main program is running on an ATMEGA328p running @16MHz and 3.3V. An Arduino pro mini 16Mhz/5V powered at 3.3V (yes it works) can be used to build your own Multimodule. An Arduino Mini based on Atmega328p can also be used.

####Using stripboard:

Screenshot Screenshot

####Using a home made PCB:

Screenshot Screenshot

####Build your own board using SMD components and an associated PCB v2.3c:

Screenshot Screenshot Screenshot Screenshot

If you build this PCB v2.3c and want to enable serial mode for er9x/ersky9x, you have to do this mod.

New PCB v2.3d! available

Repository includes Kicad files of schematic and pcb. This is a variant of the Multipro V2.3c circuit design. It is basicly the same as the 2.3c board as far as component placement goes. What's changed is the added resistors for the serial protocol and also the addition of solder jumpers on the bottom of the board for the various options to connect the TX, RX, and PPM lines through them.

Screenshot Screenshot

OSH Park link if you want to order.

####Buy a ready to use and complete Multi module Screenshot

This module can be purchased here. All the 4 RF modules are already implemented A7105, NRF24L01, CC2500 and CYRF6936. The board is also equiped with an antenna switcher which means only one antenna for all.

To update the firmware of this module you have to solder a 6 pin header (top left) and use an USBASP like explained below.

If you want to enable serial mode for er9x/ersky9x/Taranis/..., you have to do this mod.

There are currently some hardware issues with the first version of this 4in1 module:

  • A7105 RF is forced to PA mode which prevents telemetry to work. Hubsan is the only protocol using telemetry for battery voltage display.
  • NRF24L01 is forced to PA mode which prevents telemetry to work. There are currently no protocols using telemetry based on this RF chip.

Based on the Deviation forum these issues will be solved in the upcoming version.

###Schematic Screenshot

Notes:

  • Attention: All modules are 3.3V only, never power them with 5V.
  • For serial, the dial switch is not needed and the bind button optionnal

###Radio integration You can 3D print your box (details here):

Screenshot Screenshot

##Compilation and programmation

###Toolchain Multiprotocol source can be compiled using the Arduino IDE.

The currently supported Arduino version is 1.6.7.

Download the zip file of this repository, unzip it in a folder, navigate to the Multiprotocol directory and then click on Multiprotocol.ino. The Arduino environment will appear and the Multiprotocol project will be loaded.

_Config.h file must be modified to select which protocols will be available, change protocols/sub_protocols/settings associated with dial for PPM input, different TX channel orders and timing, Telemetry or not, ...

Notes:

  • Make sure to select "Arduino Pro or Pro Mini, ATmega328 (5V,16MHz)" before compiling.
  • Compilation of the code posted here works. So if it doesn't for you this is a problem with your setup, please double check everything before asking.

###Upload the code using ISP (In System Programming) It is recommended to use an external programmer like USBASP to upload the code in the Atmega328. The programmer should be set to 3.3V or nothing to not supply any over voltage to the multimodule and avoid any damages.

The dial must be set to 0 before flashing!

From the Arduino environment, you can use this shortcut to compile and upload to the module: Skecth->Upload Using Programmer (Ctrl+Maj+U)

To flash the latest provided hex file under Release, you can use a tool like AVR Burn-O-Mat, set the microcontroller to m328p and flash it.

###Upload the code using FTDI (USB serial to TTL) Use this method only for Arduino Pro Mini boards with bootloader.

Use an external FTDI adapter like this one.

The programmer should be set to 3.3V or nothing to not supply any over voltage to the multimodule and avoid any damages.

From the Arduino environment, you can use Upload button which will compile and upload to the module: Skecth->Upload (Ctrl+U)

To upload the latest provided hex file under Release, you can use a tool like XLoader, set the microcontroller to Atmega328 and upload it.

###Set fuses Use a tool like AVR Burn-O-Mat to set the fuses of the Atmega328 to:

  • Low Fuse 0xFF
  • High Fuse 0xD2
  • Extended Fuse 0x05 (or 0xFD which is the same)

This will make sure your ATMEGA328 is well configured and the global TX ID is not erased at each updates.

##Troubleshooting

###LED status

  • off: program not running or a protocol selected with the associated module not installed.
  • flash(on=0.1s,off=1s): invalid protocol selected (excluded from compilation or invalid protocol number)
  • slow blink(on=0.5s,off=0.5s): serial has been selected but no valid signal has been seen on the RX pin.
  • fast blink(on=0.1s,off=0.1s): bind in progress.
  • on: normal operation.

###Protocol selection ####Input Mode - PPM

  • The protocol/mode selection must be done before the power is applied.
  • Connect 1 to 4 of the selection protocol pins to GND.

####Input Mode - Serial

###Bind Make sure to follow this procedure: press the bind button, apply power and then release it after 1sec. The LED should be blinking fast indicating a bind status and then fixed on when the bind period is over. It's normal that the LED turns off when you press the bind button, this behavior is not controlled by the Atmega328. For serial, the preffered method is to bind via the GUI protocol page.

It migth happen that your module is always binding at power up. If this is the case, there is a big chance that you are using an Arduino Pro Mini with an external status LED. To work around this issue connect a 10K resistor between D13 and 3.3V.

###Report issues You can report your problem using the GitHub issue system or go to the Main thread on RCGROUPS to ask your question. Please provide the following information:

  • Multiprotocol code version
  • TX type
  • Using PPM or Serial, if using er9x or ersky9x the version in use
  • Different led status (multimodule and model)
  • Explanation of the behavior and reproduction steps

About

DIY Multiprotocol TX Module

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • KiCad Layout 47.4%
  • Other 42.5%
  • C 4.3%
  • Makefile 3.0%
  • C++ 2.8%