From 4cb7ba83e9fcf5241a745a5d9a064f7d2d422a88 Mon Sep 17 00:00:00 2001 From: John-RB Date: Fri, 7 Apr 2017 11:17:51 -0400 Subject: [PATCH 01/32] Add V1.1 design to BOM --- docs/BOM_DIY_STM32 & Schematic.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/BOM_DIY_STM32 & Schematic.md b/docs/BOM_DIY_STM32 & Schematic.md index 27f65bd..f0b1201 100644 --- a/docs/BOM_DIY_STM32 & Schematic.md +++ b/docs/BOM_DIY_STM32 & Schematic.md @@ -13,7 +13,7 @@ In the case of the Turnigy 9X/9XR/9XR Pro you don't need to invert the telemetry The inverted telemetry signal is required by TARANIS TX and other boards so for telemetry to work properly the inverter chip must be installed. -## BOM DIY STM32 PCB V1.0t - the USB version +## BOM DIY STM32 PCB V1.0t & V1.1 - the USB version This BOM is for the board with the USB port which allows firmware upload. The board is available at OSHpark [here](https://oshpark.com/shared_projects/GX51nEoH) @@ -33,7 +33,7 @@ Qty|Part|Description|Value|Package|Digikey Part Number 1|C203|Cap Ceramic|4u7|0805|[311-1371-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805ZRY5V6BB475/311-1371-1-ND/2103155) 1|C207|Cap Ceramic|1uF|0805|[311-1365-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805KKX7R7BB105/311-1365-1-ND/2103149) 1|C208|Cap Ceramic|10nF|0805|[311-1136-1-ND](http://www.digikey.com/products/en?keywords=311-1136-1-ND) -4|D201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) +5|D101*,201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) 1|IC101|Voltage reg 5V|AMS1117-50|SOT223|[LM1117MP-5.0/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MP-5.0-NOPB/LM1117MP-5.0-NOPBCT-ND/363589) 1|IC102|Voltage reg 3.3V|AMS1117-33|SOT223|[LM1117MPX-3.3/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MPX-3.3-NOPB/LM1117MPX-3.3-NOPBCT-ND/1010516) 1|L101|High Freq Inductor|10uH|1812|[CM453232-100KLCT-ND](https://www.digikey.com/product-detail/en/bourns-inc/CM453232-100KL/CM453232-100KLCT-ND/3437938) @@ -55,6 +55,8 @@ Qty|Part|Description|Value|Package|Digikey Part Number 1|U301|Dual INPUT-XOR|SN74LVC2G86DCTR|SSM8|[296-13274-1-ND](http://www.digikey.com/product-detail/en/texas-instruments/SN74LVC2G86DCTR/296-13274-1-ND/484501) 1|CON401|ANT.conn SMD|||[WM5587CT-ND](https://www.digikey.com/product-detail/en/molex-llc/0734120110/WM5587CT-ND/1894612) +* Diode D101 is only required for the V1.1 board + PCB STM32 V1.0t Schematic From 49e3534738ab6ad0eef195146af5cf42f3b3f689 Mon Sep 17 00:00:00 2001 From: midelic Date: Sat, 8 Apr 2017 20:27:45 +0100 Subject: [PATCH 02/32] Add PCB _STM32_USB_V1.1 board files --- docs/images/Board_PCB_STM32_USB_V1.1-1.png | Bin 0 -> 34182 bytes docs/images/Board_PCB_STM32_USB_V1.1-2.png | Bin 0 -> 34724 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/Board_PCB_STM32_USB_V1.1-1.png create mode 100644 docs/images/Board_PCB_STM32_USB_V1.1-2.png diff --git a/docs/images/Board_PCB_STM32_USB_V1.1-1.png b/docs/images/Board_PCB_STM32_USB_V1.1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ba70160a4b5a599d06d1cd5dce31e4eddbdb775b GIT binary patch literal 34182 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 Date: Sat, 8 Apr 2017 20:37:18 +0100 Subject: [PATCH 03/32] Update BOM_DIY_STM32 & Schematic.md --- docs/BOM_DIY_STM32 & Schematic.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/BOM_DIY_STM32 & Schematic.md b/docs/BOM_DIY_STM32 & Schematic.md index 27f65bd..fd6cf21 100644 --- a/docs/BOM_DIY_STM32 & Schematic.md +++ b/docs/BOM_DIY_STM32 & Schematic.md @@ -13,6 +13,12 @@ In the case of the Turnigy 9X/9XR/9XR Pro you don't need to invert the telemetry The inverted telemetry signal is required by TARANIS TX and other boards so for telemetry to work properly the inverter chip must be installed. +## BOM DIY STM32 PCB V1.1t - USB version update +The board is available at OSHpark [here](https://oshpark.com/shared_projects/eWtNW6jo) + + + + ## BOM DIY STM32 PCB V1.0t - the USB version This BOM is for the board with the USB port which allows firmware upload. @@ -98,9 +104,8 @@ Qty|Part|Description|Value|Package|Digikey Part Number ## BOM DIY STM32 PCB - the first Version This BOM is for the board that looks like this - check carefully: - +src="https://644db4de3505c40a0444-327723bce298e3ff5813fb42baeefbaa.ssl.cf1.rackcdn.com/2026cfd1d0187a770570052590168df1.png" width="300" height="400"/> Qty|Part|Description|Value|Package|Digikey Part Number From fa6f2061e707066f65f32f32926fb0e05d724332 Mon Sep 17 00:00:00 2001 From: John-RB Date: Sun, 9 Apr 2017 11:48:44 -0400 Subject: [PATCH 04/32] Add V1.1 design to BOM --- docs/BOM_DIY_STM32 & Schematic.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/BOM_DIY_STM32 & Schematic.md b/docs/BOM_DIY_STM32 & Schematic.md index f0b1201..e132c16 100644 --- a/docs/BOM_DIY_STM32 & Schematic.md +++ b/docs/BOM_DIY_STM32 & Schematic.md @@ -13,6 +13,12 @@ In the case of the Turnigy 9X/9XR/9XR Pro you don't need to invert the telemetry The inverted telemetry signal is required by TARANIS TX and other boards so for telemetry to work properly the inverter chip must be installed. +## BOM DIY STM32 PCB V1.1t - USB version update +The board is available at OSHpark [here](https://oshpark.com/shared_projects/eWtNW6jo) + + + + ## BOM DIY STM32 PCB V1.0t & V1.1 - the USB version This BOM is for the board with the USB port which allows firmware upload. @@ -33,7 +39,7 @@ Qty|Part|Description|Value|Package|Digikey Part Number 1|C203|Cap Ceramic|4u7|0805|[311-1371-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805ZRY5V6BB475/311-1371-1-ND/2103155) 1|C207|Cap Ceramic|1uF|0805|[311-1365-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805KKX7R7BB105/311-1365-1-ND/2103149) 1|C208|Cap Ceramic|10nF|0805|[311-1136-1-ND](http://www.digikey.com/products/en?keywords=311-1136-1-ND) -5|D101*,201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) +5|D101*201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) 1|IC101|Voltage reg 5V|AMS1117-50|SOT223|[LM1117MP-5.0/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MP-5.0-NOPB/LM1117MP-5.0-NOPBCT-ND/363589) 1|IC102|Voltage reg 3.3V|AMS1117-33|SOT223|[LM1117MPX-3.3/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MPX-3.3-NOPB/LM1117MPX-3.3-NOPBCT-ND/1010516) 1|L101|High Freq Inductor|10uH|1812|[CM453232-100KLCT-ND](https://www.digikey.com/product-detail/en/bourns-inc/CM453232-100KL/CM453232-100KLCT-ND/3437938) @@ -100,9 +106,8 @@ Qty|Part|Description|Value|Package|Digikey Part Number ## BOM DIY STM32 PCB - the first Version This BOM is for the board that looks like this - check carefully: - +src="https://644db4de3505c40a0444-327723bce298e3ff5813fb42baeefbaa.ssl.cf1.rackcdn.com/2026cfd1d0187a770570052590168df1.png" width="300" height="400"/> Qty|Part|Description|Value|Package|Digikey Part Number From bdfeeb9a41ebc56e64a97d9c9bb15dd3aff49e66 Mon Sep 17 00:00:00 2001 From: pascallanger Date: Mon, 10 Apr 2017 11:24:21 +0200 Subject: [PATCH 05/32] Fix STM32 issue and OrangeTX compilation --- Multiprotocol/Multiprotocol.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index c6b795b..83f0d8d 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -34,7 +34,7 @@ #endif //Personal config file -#if defined USE_MY_CONFIG || __has_include("_MyConfig.h") +#if defined USE_MY_CONFIG #include "_MyConfig.h" #endif @@ -207,6 +207,7 @@ void setup() TCC1.CTRLA = 0x0B ; // Event3 (prescale of 16) #elif defined STM32_BOARD //STM32 + afio_cfg_debug_ports(AFIO_DEBUG_NONE); pinMode(A7105_CSN_pin,OUTPUT); pinMode(CC25_CSN_pin,OUTPUT); pinMode(NRF_CSN_pin,OUTPUT); From 700b922350082ac39d538bbf8c0e1c72b2ecaddc Mon Sep 17 00:00:00 2001 From: pascallanger Date: Mon, 10 Apr 2017 11:33:26 +0200 Subject: [PATCH 06/32] Fix AFHDS2A power issue --- Multiprotocol/AFHDS2A_a7105.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Multiprotocol/AFHDS2A_a7105.ino b/Multiprotocol/AFHDS2A_a7105.ino index 11ef094..158142d 100644 --- a/Multiprotocol/AFHDS2A_a7105.ino +++ b/Multiprotocol/AFHDS2A_a7105.ino @@ -260,6 +260,7 @@ uint16_t ReadAFHDS2A() while ((uint16_t)micros()-start < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; + A7105_SetPower(); A7105_SetTxRxMode(TXRX_OFF); // Turn LNA off since we are in near range and we want to prevent swamping A7105_Strobe(A7105_RX); phase &= ~AFHDS2A_WAIT_WRITE; @@ -325,6 +326,7 @@ uint16_t ReadAFHDS2A() while ((uint16_t)micros()-start < 700) // Wait max 700µs, using serial+telemetry exit in about 120µs if(!(A7105_ReadReg(A7105_00_MODE) & 0x01)) break; + A7105_SetPower(); A7105_SetTxRxMode(RX_EN); A7105_Strobe(A7105_RX); phase &= ~AFHDS2A_WAIT_WRITE; From 514bbbe8a3e53aa8ec9df605830ecd5fff892d4a Mon Sep 17 00:00:00 2001 From: John-RB Date: Mon, 10 Apr 2017 09:44:51 -0400 Subject: [PATCH 07/32] Missing comma in STM32 V1.1 BOM --- docs/BOM_DIY_STM32 & Schematic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/BOM_DIY_STM32 & Schematic.md b/docs/BOM_DIY_STM32 & Schematic.md index e132c16..8a280d1 100644 --- a/docs/BOM_DIY_STM32 & Schematic.md +++ b/docs/BOM_DIY_STM32 & Schematic.md @@ -39,7 +39,7 @@ Qty|Part|Description|Value|Package|Digikey Part Number 1|C203|Cap Ceramic|4u7|0805|[311-1371-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805ZRY5V6BB475/311-1371-1-ND/2103155) 1|C207|Cap Ceramic|1uF|0805|[311-1365-1-ND](https://www.digikey.com/product-detail/en/yageo/CC0805KKX7R7BB105/311-1365-1-ND/2103149) 1|C208|Cap Ceramic|10nF|0805|[311-1136-1-ND](http://www.digikey.com/products/en?keywords=311-1136-1-ND) -5|D101*201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) +5|D101*,201,301,302,303|Diode Shottky|BAT48|SOD123|[497-5712-1-ND](http://www.digikey.com/products/en?keywords=497-5712-1-ND) 1|IC101|Voltage reg 5V|AMS1117-50|SOT223|[LM1117MP-5.0/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MP-5.0-NOPB/LM1117MP-5.0-NOPBCT-ND/363589) 1|IC102|Voltage reg 3.3V|AMS1117-33|SOT223|[LM1117MPX-3.3/NOPBCT-ND](https://www.digikey.com/product-detail/en/texas-instruments/LM1117MPX-3.3-NOPB/LM1117MPX-3.3-NOPBCT-ND/1010516) 1|L101|High Freq Inductor|10uH|1812|[CM453232-100KLCT-ND](https://www.digikey.com/product-detail/en/bourns-inc/CM453232-100KL/CM453232-100KLCT-ND/3437938) From 3850ce88d397805ad539a025c8bc172d9857d2e1 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Wed, 12 Apr 2017 16:10:18 +0200 Subject: [PATCH 08/32] DSM: Remove special bind stick positionsD Spektrum own remotes transmit normal values during bind and actually use this (e.g. Nano CP X) to select the transmitter mode (e.g. computer vs non-computer radio, so always end normal output --- Multiprotocol/DSM_cyrf6936.ino | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Multiprotocol/DSM_cyrf6936.ino b/Multiprotocol/DSM_cyrf6936.ino index f3120d1..6b4aef1 100644 --- a/Multiprotocol/DSM_cyrf6936.ino +++ b/Multiprotocol/DSM_cyrf6936.ino @@ -273,14 +273,10 @@ static void __attribute__((unused)) DSM_build_data_packet(uint8_t upper) uint16_t value = 0xffff;; if (idx != 0xff) { - if (!IS_BIND_DONE_on) - { // Failsafe position during binding - value=max/2; //all channels to middle - if(idx==0) - value=1; //except throttle - } - else - value=map(Servo_data[CH_TAER[idx]],servo_min_125,servo_max_125,0,max); + /* Spektrum own remotes transmit normal values during bind and actually + * use this (e.g. Nano CP X) to select the transmitter mode (e.g. computer vs + * non-computer radio, so always end normal output */ + value=map(Servo_data[CH_TAER[idx]],servo_min_125,servo_max_125,0,max); value |= (upper && i==0 ? 0x8000 : 0) | (idx << bits); } packet[i*2+2] = (value >> 8) & 0xff; @@ -582,4 +578,4 @@ uint16_t initDsm() return 10000; } -#endif \ No newline at end of file +#endif From fa52a1a81e80c630b27ca53bf4dd405e993025b3 Mon Sep 17 00:00:00 2001 From: midelic Date: Tue, 18 Apr 2017 16:05:52 +0100 Subject: [PATCH 09/32] fix sintax errors --- docs/Compiling_STM32.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Compiling_STM32.md b/docs/Compiling_STM32.md index 2c73cc1..fe1ccda 100644 --- a/docs/Compiling_STM32.md +++ b/docs/Compiling_STM32.md @@ -18,9 +18,9 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese -##Compiling source and flashing in Arduino. +## Compiling source and flashing in Arduino. -###Install the Arduino IDE and the Multiprotocol project +### Install the Arduino IDE and the Multiprotocol project 1. Download the Arduino IDE. The currently supported Arduino version is 1.6.11 available for [Windows]( https://www.arduino.cc/download_handler.php?f=/arduino-1.6.12-windows.exe) and [Mac OSX](http://arduino.cc/download_handler.php?f=/arduino-1.6.12-macosx.zip) 1. It is recommended to upgrade Java to the [latest version](https://www.java.com/en/download/) 1. Download the [STM32 Core](https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip) and copy the Arduino_STM32 folder to: @@ -32,7 +32,7 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese 1. Unzip and copy the source code folder ```Multiprotocol``` to a folder of your choosing 1. Click on the ```Multiprotocol.ino file``` in the ```Multiprotocol``` folder and the Arduino environment should appear and the Multiprotocol project will be loaded. -###Prepare the Arduino IDE: +### Prepare the Arduino IDE: 1. In order to compile successfully you need also to modify a maple library file. In ```....\hardware\Arduino_STM32\STM32F1\cores\maple\libmaple\usart_f1.c``` comment out the 2 functions as shown below. This is required to have low-level access to the USART interrupt. @@ -63,7 +63,7 @@ There are three options for flashing the firmware. But We will present here only The first (and strongly recommended) is flashing it while it is plugged into and powered by the transmitter.The second is preparing the board for flashing with a USB cable. The second method is definitely the easiest in the long-term, but it does require the USB bord and setting up the bootloader on the STM32 MCU. -####Option 1: Flashing with Tx power(highly recommended) +### Option 1: Flashing with Tx power(highly recommended) 1. Put the module in the Tx 1. Place a jumper over the BOOT0 pins.Skip this one if you made your own cable for flashing ,see below. @@ -86,7 +86,7 @@ See below my module for reference [] -####Option 2: Flashing with USB cable. +### Option 2: Flashing with USB cable. This method use USB connector on the STM32 V1.0 board or on the maple clone board. From 8661b8074c76631d6eba6a4a736c66a2e21f5461 Mon Sep 17 00:00:00 2001 From: midelic Date: Tue, 18 Apr 2017 16:22:33 +0100 Subject: [PATCH 10/32] added useful info regarding compiling --- docs/Compiling_STM32.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Compiling_STM32.md b/docs/Compiling_STM32.md index fe1ccda..0eed264 100644 --- a/docs/Compiling_STM32.md +++ b/docs/Compiling_STM32.md @@ -53,8 +53,8 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese 1. Run the IDE, and on the **Tools** menu, select **Board** and then **Boards manager**. Click on the Arduino DUE (32 Bits ARM-Cortex M3) from the list of available boards. You must do this step, it installs the arm-none-eabi-g++ toolchain! 1. Close and reopen the Arduino IDE and load the Multiprotocol project. -1. In arduino IDE under the **Tools** -> **Board:** select the **Generic STM32F103C series** board -1. Click on the **Verify** button to test compile the before you make any changes. If there are any errors check the process above and be sure to have the right version of the Arduino IDE.The binary file generated location is presented at the bottom of Arduino IDE compiling window.Now continue with flashing procedure. +1. In arduino IDE under the **Tools** -> **Board:** select the **Generic STM32F103C series** board.Select upload method serial **Serial**.Do not leave upload method on default **STM32duino bootloader** +1. Click on the **Verify** button to test compile the before you make any changes. If there are any errors check the process above and be sure to have the right version of the Arduino IDE.The **binary** file generated location is presented at the bottom of Arduino IDE compiling window.Now continue with flashing procedure. ### Flashing the multimodule From 0cb0128cafdb24c19eb4228f223b1af9a25ff496 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 17:46:11 +0200 Subject: [PATCH 11/32] Test --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 1924bf3..4c8f071 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ One of the most attractive features of the MULTI-module is the ability to send t In constructing a functioning MULTI-Module there are important choices to be made and tradeoffs to be aware of. The most important are: -##**Choice 1:** Which MULTI-Module hardware option +## **Choice 1:** Which MULTI-Module hardware option There are currently four generic paths to get your hands on an MULTI-Module. These are outlined in detail on the [hardware](docs/Hardware.md) page. Here they are, in order of increasing difficulty: - **Ready-made MULTI-Module** - Available from Banggood which includes a 4-in-1 RF module and an antenna switcher @@ -59,35 +59,35 @@ The last option is where it all started and how the pioneers in this project mad For more information on these options see the [hardware](docs/Hardware.md) page -##**Choice 2:** Which RF modules to include in the MULTI-Module +## **Choice 2:** Which RF modules to include in the MULTI-Module This depends on your specific needs. However, recent the availability of the 4-in-1 RF modules from Banggood for less than $35 makes it easy to “have it all”. Most manufacturers of RC systems (Spektrum, FrSky, FlySky) and toys (Syma, Hubsan, etc.) use one of these four RF chips to manage the RF link between the transmitter and the reciever/model. Here is an incomplete list of the RF modules and some of the most popular toys that use them. For the complete list see the [Protocol Details](Protocols_Details.md) page. Manufacturer|RF Chip|Example Protocols :-----------|-------|:------- -Cyprus Semiconductor| CYRF6936|DSM/DSMX - | |Walkera Devo - | |J6Pro -Texas Instruments|CC2500|FrSky - | |Futaba SFHSS -Amiccom|A7105|FlySky - | |FlySky AFHDS2A - | |Hubsan -Nordic Semiconductor|NRF24L01|HiSky - | |Syma - | |ASSAN - | |and most other Chinese models +Cyprus Semiconductor | CYRF6936 | DSM/DSMX + | | Walkera Devo + | | J6Pro +Texas Instruments | CC2500 | FrSky + | | Futaba SFHSS +Amiccom | A7105 | FlySky + | | FlySky AFHDS2A + | | Hubsan +Nordic Semiconductor | NRF24L01 | HiSky + | | Syma + | | ASSAN + | | and most other Chinese models For example, if you have no interest in binding your Tx to an model with and FrSky or Futaba SFHSS receiver you do not need to include the CC2500 RF module in your system. -##**Choice 3:** Which protocols to upload to the MULTI-Module +## **Choice 3:** Which protocols to upload to the MULTI-Module Of course there is always a catch. In this case it is the 32KB memory limit on the ATmega328 processor. Due to the amazing work done by devs on this project, the memory required by all the possible protocols exceeds this limit considerably. This means that you will need to make a choice of which protocols you will compile into your firmware. Fortunately, the process of selecting and compiling is not too difficult and it is fully documented on the [Compiling and Programming](docs/Compiling.md) page. Also, the lead dev Pascal Langer (rcgroups:hpnuts) makes this process even easier for many users by making compiled binaries available for three popular combinations of RF modules. These are always “fresh” (based on the latest stable firmware) and available on the [Releases](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/releases) page. An alternatice is to use a STM32 ARM microcontroller based module. If you go the route of building this version of the DIY MULTI-Module then the memory limits do not apply anymore. -##**Choice 4:** Choosing the type of interface between the MULTI-Module and your radio (PPM or Serial) +## **Choice 4:** Choosing the type of interface between the MULTI-Module and your radio (PPM or Serial) The MULTI-Module supports industry standard PPM interface that works with all transmitters with either: - a module bay or @@ -100,7 +100,7 @@ If you are the owner of a transmitter that supports the er9X/erSky9X or OpenTX f - The model protocol selection and binding is done from the Model Settings menu on the Tx - For telemetry capable transmitters, the telemetry integration is done seamlessly with the Tx firmware. (Note that FrSky TH9X/Turnigy 9X/R transmitters require a telemetry mod to be done before telemetry can work). Click on the link corressponding to your Tx on the [Transmitters](docs/Transmitters.md) page for more details. -#How to get started? +# How to get started? 1. Browse the [Protocols](Protocols_Details.md) page to see which protocols you would like on your module 1. Go to the [Hardware Options](docs/Hardware.md) page to decide which of the MULTI-Module hardware options appeals to you and which RF modules you plan to integrate 1. Once you have your module, you should review what jumper settings or modifications are required to the module to support serial communication and possibly telemetry From 5c06a241acf596189d601bab349fb6c5d967b2a6 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 17:48:04 +0200 Subject: [PATCH 12/32] Try to fix table. --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4c8f071..8fed751 100644 --- a/README.md +++ b/README.md @@ -65,18 +65,18 @@ This depends on your specific needs. However, recent the availability of the 4- Manufacturer|RF Chip|Example Protocols :-----------|-------|:------- -Cyprus Semiconductor | CYRF6936 | DSM/DSMX - | | Walkera Devo - | | J6Pro -Texas Instruments | CC2500 | FrSky - | | Futaba SFHSS -Amiccom | A7105 | FlySky - | | FlySky AFHDS2A - | | Hubsan -Nordic Semiconductor | NRF24L01 | HiSky - | | Syma - | | ASSAN - | | and most other Chinese models +Cyprus Semiconductor|CYRF6936|DSM/DSMX +||Walkera Devo +||J6Pro +Texas Instruments|CC2500|FrSky +||Futaba SFHSS +Amiccom|A7105|FlySky +||FlySky AFHDS2A +||Hubsan +Nordic Semiconductor|NRF24L01|HiSky +||Syma +||ASSAN +||and most other Chinese models For example, if you have no interest in binding your Tx to an model with and FrSky or Futaba SFHSS receiver you do not need to include the CC2500 RF module in your system. From 7ee0b2b0a35467b0f422c11f6e2a1c64e3f2a857 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 17:52:12 +0200 Subject: [PATCH 13/32] Try to fix again the table. --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8fed751..d409bd6 100644 --- a/README.md +++ b/README.md @@ -63,20 +63,20 @@ For more information on these options see the [hardware](docs/Hardware.md) page This depends on your specific needs. However, recent the availability of the 4-in-1 RF modules from Banggood for less than $35 makes it easy to “have it all”. Most manufacturers of RC systems (Spektrum, FrSky, FlySky) and toys (Syma, Hubsan, etc.) use one of these four RF chips to manage the RF link between the transmitter and the reciever/model. Here is an incomplete list of the RF modules and some of the most popular toys that use them. For the complete list see the [Protocol Details](Protocols_Details.md) page. -Manufacturer|RF Chip|Example Protocols -:-----------|-------|:------- -Cyprus Semiconductor|CYRF6936|DSM/DSMX -||Walkera Devo -||J6Pro -Texas Instruments|CC2500|FrSky -||Futaba SFHSS -Amiccom|A7105|FlySky -||FlySky AFHDS2A -||Hubsan -Nordic Semiconductor|NRF24L01|HiSky -||Syma -||ASSAN -||and most other Chinese models +|Manufacturer|RF Chip|Example Protocols| +|:-----------|-------|:-------| +|Cyprus Semiconductor|CYRF6936|DSM/DSMX| +|||Walkera Devo| +|||J6Pro| +|Texas Instruments|CC2500|FrSky| +|||Futaba SFHSS| +|Amiccom|A7105|FlySky| +|||FlySky AFHDS2A| +|||Hubsan| +|Nordic Semiconductor|NRF24L01|HiSky| +|||Syma| +|||ASSAN| +|||and most other Chinese models| For example, if you have no interest in binding your Tx to an model with and FrSky or Futaba SFHSS receiver you do not need to include the CC2500 RF module in your system. From 84922e84a3a364ec8cbd93da4915dd56a8ce068d Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:09:50 +0200 Subject: [PATCH 14/32] Fixed Markdown typos. --- README.md | 2 +- docs/Advanced_Bluetooth_Telemetry.md | 7 ++- ...vanced_Manually_Setting_ATmega328_Fuses.md | 4 +- docs/Advanced_Topics.md | 12 ++-- docs/Compiling.md | 28 +++++---- docs/Compiling_STM32.md | 23 +++---- docs/Models.md | 60 +++++++++++-------- docs/Troubleshooting.md | 22 ++++--- 8 files changed, 90 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index d409bd6..fe76196 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ For more information on these options see the [hardware](docs/Hardware.md) page This depends on your specific needs. However, recent the availability of the 4-in-1 RF modules from Banggood for less than $35 makes it easy to “have it all”. Most manufacturers of RC systems (Spektrum, FrSky, FlySky) and toys (Syma, Hubsan, etc.) use one of these four RF chips to manage the RF link between the transmitter and the reciever/model. Here is an incomplete list of the RF modules and some of the most popular toys that use them. For the complete list see the [Protocol Details](Protocols_Details.md) page. |Manufacturer|RF Chip|Example Protocols| -|:-----------|-------|:-------| +|---|---|---| |Cyprus Semiconductor|CYRF6936|DSM/DSMX| |||Walkera Devo| |||J6Pro| diff --git a/docs/Advanced_Bluetooth_Telemetry.md b/docs/Advanced_Bluetooth_Telemetry.md index 00ee878..a0a237d 100644 --- a/docs/Advanced_Bluetooth_Telemetry.md +++ b/docs/Advanced_Bluetooth_Telemetry.md @@ -1,5 +1,6 @@ -#Bluetooth Telemetry in PPM Mode -###Telemetry +# Bluetooth Telemetry in PPM Mode + +## Telemetry There are 4 protocols supporting telemetry: Hubsan, DSM, FrSkyD and FrSkyX. @@ -11,7 +12,7 @@ FrSkyD 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 +## If used in PPM mode Telemetry is available as a serial output on the TX pin of the Atmega328p using the FrSky hub format for Hubsan, FrSkyD, FrSkyX and DSM format for DSM2/X. The serial paramets depends on the protocol: diff --git a/docs/Advanced_Manually_Setting_ATmega328_Fuses.md b/docs/Advanced_Manually_Setting_ATmega328_Fuses.md index ff202cf..d2c8c1b 100644 --- a/docs/Advanced_Manually_Setting_ATmega328_Fuses.md +++ b/docs/Advanced_Manually_Setting_ATmega328_Fuses.md @@ -1,4 +1,4 @@ -#Manually Uploading HEX files and setting Fuses on ATmega328 +# Manually Uploading HEX files and setting Fuses on ATmega328 **The .hex files provided are only for tests purpose. The recommended method is to use [Compiling and Programming](Compiling.md).** @@ -32,7 +32,7 @@ Banggood 4-in-1 module with [custom mikeb bootloader](Advanced_ATmega_Serial_Upl If you don't know which one to take the 1st line is the one you want. -###Burn the fuses +### Burn the fuses 1. Follow this section: [Connect the programmer](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/blob/master/docs/Compiling.md#connect-the-programmer) 1. Launch AVR8 Burn-O-Mat. 1. In the **AVR type** drop down select **ATmega328P** and click on **Fuses** diff --git a/docs/Advanced_Topics.md b/docs/Advanced_Topics.md index 4faf3e8..67f6c34 100644 --- a/docs/Advanced_Topics.md +++ b/docs/Advanced_Topics.md @@ -1,26 +1,28 @@ -#Advanced Topics {This page is currently a proof of concept} +# Advanced Topics {This page is currently a proof of concept} Warning: the topics on this page are not for the fainthearted. It is strongly recommended that you have some experience in getting up and runnning with your module before you dive in there. On the other hand what is described on this page are some very useful options that could greatly increase the value and the enjoyment of your Multiprotocol module. -#Serial uploader that works through the transmitter pins + +# Serial uploader that works through the transmitter pins This document describes how you can set up your ATmega-based Mulitprotocol module to allow you to update the firmware by connecting a USB to TTL serial (like a FTDI) adapter to the module's transmitter interface pins. It is great if you exclusively use the Serial interface with your transmitter because the Bind button is used as "bootloader" button. It requires a small custom bootloader to be uploaded and a simple interface cable to be soldered up. See the [Advanced ATmega Serial Uploader](Advanced_ATmega_Serial_Uploader.md) page for more details. Created and supported by: Mike Blandford RCGroups page: http://www.rcgroups.com/forums/showpost.php?p=35584619&postcount=4867 -#Telemetry in PPM mode +# Telemetry in PPM mode It is possible to access the telemetry stream coming from the receiver through the MULTI-module. This document describes a simple bluetooth module to stream telemetry information to a mobile device like an Android smartphone or tablet. The method may be generalized to feed telemetry to the transmitter if the transmitter has the capabilities to process the information. This is very useful with modules used in the PPM mode with transmitters that do not support telemetry. See the [Advanced Bluetooth Telemetry](Advanced_Bluetooth_Telemetry.md) page for more details. Created and supported by: Midelic RCGroups page: None -#Manually setting fuses on ATmega328 +# Manually setting fuses on ATmega328 This document describes a relatively simple process to set the fuses on ATmega328 using the flexibility of the command line. It does not require installation of AVRdude because it uses the AVRdude that is bundled with the Arduino IDE. See the [Advanced Manually Setting ATmega328 Fuses](Advanced_Manually_Setting_ATmega328_Fuses.md) page for more details. Created and supported by: hpnuts ## Flashing Multi_STM32 module. -####Flashing without Tx power +#### Flashing without Tx power + This is another method of Flshing Multi_STM32 which is riskier.This method is for skilled users who understand the task. The key difference of this method is that the 3.3V FTDI cable must also provide power to the 5V circuitry during the flashing process. To do this, a jumper must be enabled connecting the 3.3V VCC to the 5V line. The risk is to forget 3.3V jumper in, after flashing and when TX restarted. diff --git a/docs/Compiling.md b/docs/Compiling.md index 19376e2..07dc80c 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -4,7 +4,7 @@ Multiprotocol source are compiled using the well known Arduino IDE. The procedure below will guide you through all the steps to upload successfully a customized firmware. -##Install the Arduino IDE and the Multiprotocol project firmware +## Install the Arduino IDE and the Multiprotocol project firmware 1. Download and install the Arduino IDE. The currently supported Arduino version is 1.6.12. available for [Windows]( https://www.arduino.cc/download_handler.php?f=/arduino-1.6.12-windows.exe) and [Mac OSX](https://www.arduino.cc/download_handler.php?f=/arduino-1.6.12-macosx.zip) 1. It is recommended to upgrade Java to the [latest version](https://www.java.com/en/download/) 1. Download the zip file with the Multiprotocol module source code from [here](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/archive/master.zip) @@ -13,20 +13,29 @@ The procedure below will guide you through all the steps to upload successfully ## Upload the firmware -###Material you need to upload the firmware -1. USBASP programmer supporting 3.3V: [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs). There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. -1. 10pin to 6pin adapter: [(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) -1. 6 pin header like this one: [(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) +### Material you need to upload the firmware + +1. USBASP programmer supporting 3.3V: + [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) +There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. + +1. 10pin to 6pin adapter: + [(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) + +1. 6 pin header like this one: + [(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) The 6 Pin header needs to be solder on the board like indicated by the red rectangle: * Banggood readymade 4-in-1 module: + * DIY Mulitprotocol modules (like the 2.3d board): + * Arduino Pro Mini module: -###Connect the programmer +### Connect the programmer 1. Before you connect the programmer make sure that you have selected the 3.3V mode and not 5V. The RF Modules are not 5V tolerant and you will break them with 5V. On most programmers this is done by moving a jumper. @@ -46,13 +55,13 @@ You are now ready to plug in the USB programmer to the computer If you are looking for a good working USBASP Windows driver, [use this one](http://www.protostack.com/download/USBasp-win-driver-x86-x64-v3.0.7.zip). -###Configure Arduino IDE for Multiprotocol +### Configure Arduino IDE for Multiprotocol 1. Under Tools -> Board select the Arduino Pro or Pro Mini 1. Under Tools -> Processor select the ATmega328 (5V, 16MHz) 1. Under Tools -> Programmer select your programmer type (probably USBASP from the shopping list above) -###Customize the firmware to match your hardware and your needs +### Customize the firmware to match your hardware and your needs All customization is done by editing the ```_Config.h ``` file in the Multiprotocol Arduino project. In the Arduino IDE, click on the down arrow on the far right of the tab bar to show a list of project files (see the red circle on the screenshot below). Scroll down and select the _Config.h file. @@ -75,10 +84,9 @@ If you see something like the following, your firmware is still too big and you If there is another error carefully read it, go to the line number indicated and correct your typo. -###Flash the firmware +### Flash the firmware 1. If you have a 4in1 Multiprotocol module you can skip this step. If you've just finished to build your DIY Multiprotocol module (like v2.3d), the first step is to flash the fuses of the microcontroller. This needs to be done only once. For this purpose, click on **Tools -> Burn Bootloader** - 1. You are now ready to flash the firmware. In the Arduino IDE click **Sketch -> Upload Using Programmer**. If the output indicates that the firmware has been uploaded successfully - give yourself a pat on the back. Well done, you have successfully programmed your DIY Multiprotocol module. You can already go to the final step [Setting up your Transmitter](TransmitterSetup.md) and begin to fly!!!! But don't forget to visit the next topic [Advanced settings](#AdvancedSettings) which has some extra steps needed to use your module at his full potential. diff --git a/docs/Compiling_STM32.md b/docs/Compiling_STM32.md index 2c73cc1..958fb4e 100644 --- a/docs/Compiling_STM32.md +++ b/docs/Compiling_STM32.md @@ -7,32 +7,26 @@ Multiprotocol source can be compiled using the Arduino IDE using STM32 Core (Map On all modules with STM32F103 microcontroller, the program flash memory on the microcontroller is large enough to accommodate all the protocols. You do not have to make choices on which protocols to upload. Also, it is likely that you used the Banggood 4-in-1 RF module and you will therefore have access to all the RF modules.Now for programmng multimodule with STM32 chip you have 2 options presented below. 1. Compiling and flashing in Arduino IDE. - 1. Flashing precompiled binaries from [here](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/releases) - - If using one of these TX with multimodule like Turnigy 9X,9XR,9X+ the binary file for flashing is **Multiprotocol_V1.X.X_STM32.bin**. - - If using TARANIS TX the binary file is **Multiprotocol_V1.X.X_STM32_INV.bin** Flashing precompiled **binaries** is done very simple with the cable setup presented below and an utility(GUI) **ST Flash Loader Demonstrator.** +## Compiling source and flashing in Arduino. - -##Compiling source and flashing in Arduino. - -###Install the Arduino IDE and the Multiprotocol project +### Install the Arduino IDE and the Multiprotocol project 1. Download the Arduino IDE. The currently supported Arduino version is 1.6.11 available for [Windows]( https://www.arduino.cc/download_handler.php?f=/arduino-1.6.12-windows.exe) and [Mac OSX](http://arduino.cc/download_handler.php?f=/arduino-1.6.12-macosx.zip) 1. It is recommended to upgrade Java to the [latest version](https://www.java.com/en/download/) 1. Download the [STM32 Core](https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip) and copy the Arduino_STM32 folder to: - OSX: ```Arduino.app/Contents/Java/hardware``` (you can open Arduino.app by Ctl Clicking on Arduino.app and selecting "Show Package Contents") - Windows: ```C:\Program Files (x86)\Arduino\hardware``` - Make sure the folder tree structure is like this .....\hardware\Arduino_STM32\.....and **NOT** ...... \hardware\Arduino_STM32-master\Arduino_STM32-master\......So move the folders /rename accordingly. - 1. Download the zip file with the Multiprotocol module source code from [here](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module) 1. Unzip and copy the source code folder ```Multiprotocol``` to a folder of your choosing 1. Click on the ```Multiprotocol.ino file``` in the ```Multiprotocol``` folder and the Arduino environment should appear and the Multiprotocol project will be loaded. -###Prepare the Arduino IDE: +### Prepare the Arduino IDE: 1. In order to compile successfully you need also to modify a maple library file. In ```....\hardware\Arduino_STM32\STM32F1\cores\maple\libmaple\usart_f1.c``` comment out the 2 functions as shown below. This is required to have low-level access to the USART interrupt. @@ -50,7 +44,6 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese **}** ***/** - 1. Run the IDE, and on the **Tools** menu, select **Board** and then **Boards manager**. Click on the Arduino DUE (32 Bits ARM-Cortex M3) from the list of available boards. You must do this step, it installs the arm-none-eabi-g++ toolchain! 1. Close and reopen the Arduino IDE and load the Multiprotocol project. 1. In arduino IDE under the **Tools** -> **Board:** select the **Generic STM32F103C series** board @@ -63,7 +56,7 @@ There are three options for flashing the firmware. But We will present here only The first (and strongly recommended) is flashing it while it is plugged into and powered by the transmitter.The second is preparing the board for flashing with a USB cable. The second method is definitely the easiest in the long-term, but it does require the USB bord and setting up the bootloader on the STM32 MCU. -####Option 1: Flashing with Tx power(highly recommended) +#### Option 1: Flashing with Tx power(highly recommended) 1. Put the module in the Tx 1. Place a jumper over the BOOT0 pins.Skip this one if you made your own cable for flashing ,see below. @@ -71,7 +64,6 @@ The second method is definitely the easiest in the long-term, but it does requi - Module RX pin to FTDI TX pin - Module TX pin to FTDI Rx pin - Module GND to FTDI GND - 1. In arduino IDE under the **Tools** -> **Board:** check that you have selected the **Generic STM32F103C series** board 1. Under **Tools** -> **Upload Method:** select **Serial** 1. Click "Upload" and the sketch will be uploaded normally. This is valid for all arduino versions. @@ -80,16 +72,15 @@ The second method is definitely the easiest in the long-term, but it does requi If you have the module inside a box and to be inserted in TX bay, you may build a flashing cable like in the picture below. You can attach and solder a 5 pin header female and top outside the box.**ALways insert first the USB serial device in USB port , and TX start after.** -[] + See below my module for reference -[] + -####Option 2: Flashing with USB cable. +#### Option 2: Flashing with USB cable. This method use USB connector on the STM32 V1.0 board or on the maple clone board. - 1. Install first maple USB driver by running the batch file found in Arduino STM32 package folder "..\hardware\Arduino_STM32\drivers\win\install_drivers.bat" 1. Download the free STM32 flash loader demonstrator from [ST.com](http://www.st.com/en/development-tools/flasher-stm32.html) and using a USB-TTL device (like FTDI cable) flash the STM32duino bootloader available from Roger Clark's great STM32 site [here](https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries) .Use bootloader **generic_boot20_pa1.bin** 1. Open Arduino IDE,browse to multiprotocol folder,load the sketch multiprotocol.ino. diff --git a/docs/Models.md b/docs/Models.md index ea645ca..59d15ba 100644 --- a/docs/Models.md +++ b/docs/Models.md @@ -1,19 +1,23 @@ -#Model Setup +# Model Setup This is the page to document model or receiver specific setup instructions. The Deviation project (on which this project was based) have a useful list of models [here](http://www.deviationtx.com/wiki/supported_models). -#Syma X5C +# Syma X5C -##Channel Map + +## Channel Map CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8 ---|---|---|---|---|---|---|--- A|E|T|R|FLIP|RATES|PICTURE|VIDEO -##Binding + +## Binding There are no special binding instructions. The model powers up in Autobind mode and expects the bind sequence from the transmitter within the first 4-5 seconds. -##Tx Setup + +## Tx Setup A basic 4-channel setup works perfectly, but some improvements are possible: -###Setting up a switch to Flip + +### Setting up a switch to Flip 1. Choose your "Rates" switch - typically the momentary TRN switch 1. In the Mixer create an entry for CH5 @@ -21,7 +25,7 @@ A basic 4-channel setup works perfectly, but some improvements are possible: - er9X: Source: sTRN, Weight 100 (or whatever switch you selected) - OpenTx: Source: SH, Weight 200 (or whatever switch you selected) -###Setting up a swich for high rates +### Setting up a swich for high rates 1. Choose your "Rates" switch 1. In the Mixer create an entry for CH6 @@ -31,7 +35,7 @@ A basic 4-channel setup works perfectly, but some improvements are possible: When the switch is in the rear position the rates will be standard, when the switch is forward rates will be high. There is no need to move the throttle stick to the full up and full down position as with the standard controller. -###Setting up Idle-up +### Setting up Idle-up One of the most annoying functions on the Syma X5C is that the motors stop when the throttle is pulled back. This can be fixed by implmenting Idle-up on the transmitter (think of this as a very simple version of the Betaflight "Air Mode"). Idle up will ensure that even when the throttle is all the way down, a minimum command is passed to the motor to keep them spinning and to activate the stabilization. **To do this**: @@ -41,49 +45,57 @@ One of the most annoying functions on the Syma X5C is that the motors stop when 1. When you want to fly in "idle-up" mode flick the switch and your stabilization will always be active. 1. Remeber to switch off idle-up as soon as the quad lands (or crashes - to avoid damage to the motors) -#Inductrix (Horizon Hobby) +# Inductrix (Horizon Hobby) -##Binding +## Binding For telemetry enabled modules, you should just let the remote autodetect the settings. Otherwise choose DSMX 22ms with 6ch or 7ch. To bind the model, keep the transmitter off, power on the Inductrix. Wait until it flashes fast and then power up the Tx and use Bind. -##Tx Setup +## Tx Setup Remember that 100% on your transmitter using the MULTI-Module corresponds to 125% on the DSM receiver side. On some functions sending 100% will confuse the model. Conversely 80% on your Tx is interpreted to be 100% at the model. Consider this when implementing the suggestions below. -###Throttle + +### Throttle For Inductrix FPV you might need to adjust the lower end of throttle to be a higher than default, otherwise motors will be spinning on minimal throttle. One way to do this is to set the throttle to 80% output (100% of DSM output) and then to enable the **Throttle Idle Trim Only** under the Model Setup menu. See image below: + -###Acro and Level Mode + +### Acro and Level Mode Setup channel 6 with a momemtary button or switch (e.g. SH on the Taranis) and use that switch to switch between modes. Set the output to somewhere between 40% to 60% for best results. An addition consideration when flying in Acro mode is to reduce stick sensitivity and to add some expo. The screens below show one way of doing this. Customize to your needs. -####Inputs Screen +#### Inputs Screen The follwing INPUTS screen shows one potential setup to introduce expo for Acro mode. The activation of the expo on Roll, Pitch and Yaw is when the SG switch is not in the back position. Add to taste. + -####Aileron Rates attached to Switch !SG-up +#### Aileron Rates attached to Switch !SG-up The next screen shows and example of how the expo (50%) was set up on the stick input and how it is activated by !SG-up: + -####Mixer Menu +#### Mixer Menu The next screen shows the mixer menu with the mode change on momentary switch SH and High-Low rates on switch SC: + # Cheerson CX-20 / Quanum Nova -##Channel Map + +## Channel Map + CH1|CH2|CH3|CH4|CH5|CH6|CH7 ---|---|---|---|---|---|--- A|E|T|R|MODE|AUX1|AUX2 -##Binding +## Binding The Rx powers up in binding mode so the transmitter should be set to autobind. If the Tx signal is lost due to power-off or going out of range the Rx will not re-bind, and requires power-cycling before it will bind again. -##Tx Setup +## Tx Setup AETR are simple +100% mixes. Note that the model expects Elevator (CH2) to be reversed, which is handled in the module firmware, so no need to reverse it on the Tx. -###Flight modes +### Flight modes CH5 is used to transmit the flight mode to the APM flight controller by setting the output to a value in a pre-defined range. The original Tx uses a 3-pos switch (SWA) and a 2-pos switch (SWB) to achieve six different combinations, but only five are used - with SWA at 0, 1500 is sent when SWB is at 0 and 1, leaving flight mode 3 unused. However, in the stock CX-20 flight controller settings, both flight mode 3 and 4 are set to the same flight mode, meaning we can configure our new Tx settings to send a value for mode 3 without changing the standard flight mode behaviour. Afterwards, you can optionally use Mission Planner to assign a new flight mode to mode 3 or mode 4, or reconfigure them altogether. The values, modes, and switch positions for the stock Tx are: @@ -113,7 +125,7 @@ One easy way to acheive this is to configure six logical switches mapped to two To simply map the old Tx modes to the new Tx using the same switch positions, use the following configuration. The stock SWA switch is replaced with the ID0/1/2 switch, SWB is replaced with the AIL D/R switch. -####Logical switches: +#### Logical switches: Switch|Function|V1|V2 ---|---|---|--- @@ -124,7 +136,7 @@ L. Switch 4|AND|ID0|AIL L. Switch 5|AND|ID1|AIL L. Switch 6|AND|ID1|!AIL -####Flight modes (using CX-20 names): +#### light modes (using CX-20 names): Mode|Name|Switch ---|---|--- @@ -135,7 +147,7 @@ Mode|Name|Switch 5|DirLock|L5 6|Stable|L6 -####Mixer setup: +#### Mixer setup: Channel|Weight|Source|Switch|Multiplex ---|---|---|---|--- @@ -158,7 +170,7 @@ Channel|Weight|Source|Multiplex CH6|+100%|P1|ADD CH7|+100%|P3|ADD -##Full Mixer Setup +## Full Mixer Setup Channel|Source|Weight|Switch|Multiplex ---|---|---|---|--- diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 2420733..0e9f5dd 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -1,11 +1,14 @@ # Troubleshooting -##LED status -###Green LED +## LED status + +### Green LED + - Off: no power to the module - On: module is powered up -###Red LED (bind LED) +### Red LED (bind LED) + - Off: program not running or a protocol selected with the associated module not installed - Flash(on=0.05s,off=1s): invalid protocol selected (excluded from compilation or invalid protocol number) - Inverted Flash(on=1s,off=0.1s): module is waiting for a bind event (Bind from channel or Bind in radio GUI) to launch the protocol in bind mode @@ -14,19 +17,23 @@ - Slower blink(on=1s,off=1s): PPM has been selected but no valid signal is being seen on the PPM pin. - On: Module is in normal operation mode (transmitting control signals). -##Protocol selection -###Input Mode - PPM +## Protocol selection + +### Input Mode - PPM + - The protocol/mode selection must be done before the power is applied to the module - Often the signal is not sent to the module until the transmitter has performed safety checks (like switch and throttle position settings) - Check that at least one of the protocol selection pins is connected to GND. - Some radios have an open collector output (Futaba, Graupner...), in this case add a 4.7K resistor between PPM and BATT. -###Input Mode - Serial +### Input Mode - Serial + - Make sure you have done the serial mods as indicated in the [hardware page for your board] (Hardware.md). - Protocol selection dial must be in the 0 position or leave all 4 selection pins unconnected. - Often the signal is not sent to the module until the transmitter has performed safety checks (like switch and throttle position settings) -##Bind +## Bind + Make sure to follow this procedure: press the bind button, apply power and then release after the red LED starts flashing. 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. @@ -40,6 +47,7 @@ FrSky & SFHSS bind issues are ususally due to Option=fine frequency tuning not s - set the value to half way between min and max. ##Report issues + You can report your problem using the [GitHub issue](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/issues) system or go to the [Main thread on RCGROUPS](http://www.rcgroups.com/forums/showthread.php?t=2165676) to ask your question. Please provide the following information: - Multiprotocol code version From a7b914b84e3fc6aa37aba53b7806de84b0071f6e Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:24:20 +0200 Subject: [PATCH 15/32] Fixed more typos. --- Protocols_Details.md | 5 ++--- docs/Advanced_Topics.md | 17 +++++++++-------- docs/Compiling.md | 3 +++ docs/Models.md | 8 ++++---- docs/Troubleshooting.md | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Protocols_Details.md b/Protocols_Details.md index 6f20fe6..7925350 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -37,7 +37,6 @@ Dial|Protocol|Sub_protocol|RX Num|Power|Auto Bind|Option|RF Module 1. The transmitter will automatically initiate a bind sequence on power up. This is for models where the receiver expects to rebind every time it is powered up. In these protocols you do not need to press the bind button at power up to bind, it will be done automatically. 2. Enable Bind from channel feature: - * Bind from channel can be globally enabled/disabled in _config.h using ENABLE_BIND_CH. * Bind from channel can be locally enabled/disabled by setting Autobind to Y/N per model for serial or per dial switch number for ppm. * Bind channel can be choosen on any channel between 5 and 16 using BIND_CH in _config.h. @@ -45,13 +44,13 @@ Dial|Protocol|Sub_protocol|RX Num|Power|Auto Bind|Option|RF Module - Autobind = Y - Throttle = LOW (<-95%) - Bind channel is going from -100% to +100% -* Additional notes: + + * Additional notes: - It's recommended to combine Throttle cut with another button to drive the bind channel. This will prevent to launch a bind while flying... - Bind channel does not have to be assigned to a free channel. Since it only acts when Throttle is Low (and throttle cut active), it could be used on the same channel as Flip for example since you are not going to flip your model when Throttle is low... Same goes for RTH and such other features. - Using channel 16 for the bind channel seems the most relevant as only one protocol so far is using 16 channels which is FrSkyX. But even on FrSkyX this feature won't have any impact since there is NO valid reason to have Autobind set to Y for such a protocol. -*** # A7105 RF Module ## FLYSKY - *1* diff --git a/docs/Advanced_Topics.md b/docs/Advanced_Topics.md index 67f6c34..1de385b 100644 --- a/docs/Advanced_Topics.md +++ b/docs/Advanced_Topics.md @@ -34,18 +34,19 @@ The key difference of this method is that the 3.3V FTDI cable must also provide 1. Remove the module from the transmitter bay 1. Set BOOT0 jumper Skip this step if you made your own cable. 1. Set the 3.3V jumper. -1. Connect your 3.3V FTDI cable (USB - TTL serial) to Multiprotocol serial port (RX,TX,GND,5V). Connect the pins as follows: - - Module RX pin to FTDI TX pin - - Module TX pin to FTDI Rx pin - - Module GND to FTDI GND - - Module 5V to FTDI 3.3V FTDI power supply. +1. Connect your 3.3V FTDI cable (USB - TTL serial) to Multiprotocol serial port (RX,TX,GND,5V). +Connect the pins as follows: +..* Module RX pin to FTDI TX pin +..* Module TX pin to FTDI Rx pin +..* Module GND to FTDI GND +..* Module 5V to FTDI 3.3V FTDI power supply 1. In arduino IDE under the **Tools** -> **Board:** check that you have selected the **Generic STM32F103C series** board 1. Under **Tools** -> **Upload Method:** select **Serial**. 1. Click "Upload" and the sketch will be uploaded normally. 1. Once the firmware has uploaded: - - Remove the 3.3V jumper!!!! - - Remove the BOOT0 jumper - - Check that you removed the 3.3V jumper +..* Remove the 3.3V jumper!!!! +..* Remove the BOOT0 jumper +..* Check that you removed the 3.3V jumper 1. Insert the module into the transmitter bay diff --git a/docs/Compiling.md b/docs/Compiling.md index 07dc80c..ff4c103 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -16,13 +16,16 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware 1. USBASP programmer supporting 3.3V: + [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: + [(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) 1. 6 pin header like this one: + [(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) The 6 Pin header needs to be solder on the board like indicated by the red rectangle: diff --git a/docs/Models.md b/docs/Models.md index 59d15ba..f1209a0 100644 --- a/docs/Models.md +++ b/docs/Models.md @@ -165,10 +165,10 @@ CH6 and CH7 can be assigned to switches or pots to provide additionaly functiona Replicating the stock setup of two pots, you would assign: -Channel|Weight|Source|Multiplex ----|---|---|---|--- -CH6|+100%|P1|ADD -CH7|+100%|P3|ADD +Channel | Weight | Source | Multiplex +--- | --- | --- | --- | --- +CH6 | +100% | P1 | ADD +CH7 | +100% | P3 | ADD ## Full Mixer Setup diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 0e9f5dd..73c5c39 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -46,7 +46,7 @@ FrSky & SFHSS bind issues are ususally due to Option=fine frequency tuning not s - find the values min/max where the RX loses connection. In serial mode you can change the value and see the effect live. - set the value to half way between min and max. -##Report issues +## Report issues You can report your problem using the [GitHub issue](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/issues) system or go to the [Main thread on RCGROUPS](http://www.rcgroups.com/forums/showthread.php?t=2165676) to ask your question. Please provide the following information: From 6894228a634b67b87581cfdfc13361a8a29daedd Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:28:18 +0200 Subject: [PATCH 16/32] Fixed typo. --- Protocols_Details.md | 22 +++++++++++----------- docs/Advanced_Topics.md | 14 +++++++------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Protocols_Details.md b/Protocols_Details.md index 7925350..b273322 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -37,18 +37,18 @@ Dial|Protocol|Sub_protocol|RX Num|Power|Auto Bind|Option|RF Module 1. The transmitter will automatically initiate a bind sequence on power up. This is for models where the receiver expects to rebind every time it is powered up. In these protocols you do not need to press the bind button at power up to bind, it will be done automatically. 2. Enable Bind from channel feature: -* Bind from channel can be globally enabled/disabled in _config.h using ENABLE_BIND_CH. -* Bind from channel can be locally enabled/disabled by setting Autobind to Y/N per model for serial or per dial switch number for ppm. -* Bind channel can be choosen on any channel between 5 and 16 using BIND_CH in _config.h. -* Bind will only happen if all these elements are happening at the same time: - - Autobind = Y - - Throttle = LOW (<-95%) - - Bind channel is going from -100% to +100% + * Bind from channel can be globally enabled/disabled in _config.h using ENABLE_BIND_CH. + * Bind from channel can be locally enabled/disabled by setting Autobind to Y/N per model for serial or per dial switch number for ppm. + * Bind channel can be choosen on any channel between 5 and 16 using BIND_CH in _config.h. + * Bind will only happen if all these elements are happening at the same time: + - Autobind = Y + - Throttle = LOW (<-95%) + - Bind channel is going from -100% to +100% - * Additional notes: - - It's recommended to combine Throttle cut with another button to drive the bind channel. This will prevent to launch a bind while flying... - - Bind channel does not have to be assigned to a free channel. Since it only acts when Throttle is Low (and throttle cut active), it could be used on the same channel as Flip for example since you are not going to flip your model when Throttle is low... Same goes for RTH and such other features. - - Using channel 16 for the bind channel seems the most relevant as only one protocol so far is using 16 channels which is FrSkyX. But even on FrSkyX this feature won't have any impact since there is NO valid reason to have Autobind set to Y for such a protocol. +* Additional notes: + - It's recommended to combine Throttle cut with another button to drive the bind channel. This will prevent to launch a bind while flying... + - Bind channel does not have to be assigned to a free channel. Since it only acts when Throttle is Low (and throttle cut active), it could be used on the same channel as Flip for example since you are not going to flip your model when Throttle is low... Same goes for RTH and such other features. + - Using channel 16 for the bind channel seems the most relevant as only one protocol so far is using 16 channels which is FrSkyX. But even on FrSkyX this feature won't have any impact since there is NO valid reason to have Autobind set to Y for such a protocol. # A7105 RF Module diff --git a/docs/Advanced_Topics.md b/docs/Advanced_Topics.md index 1de385b..2a77007 100644 --- a/docs/Advanced_Topics.md +++ b/docs/Advanced_Topics.md @@ -36,17 +36,17 @@ The key difference of this method is that the 3.3V FTDI cable must also provide 1. Set the 3.3V jumper. 1. Connect your 3.3V FTDI cable (USB - TTL serial) to Multiprotocol serial port (RX,TX,GND,5V). Connect the pins as follows: -..* Module RX pin to FTDI TX pin -..* Module TX pin to FTDI Rx pin -..* Module GND to FTDI GND -..* Module 5V to FTDI 3.3V FTDI power supply + * Module RX pin to FTDI TX pin + * Module TX pin to FTDI Rx pin + * Module GND to FTDI GND + * Module 5V to FTDI 3.3V FTDI power supply 1. In arduino IDE under the **Tools** -> **Board:** check that you have selected the **Generic STM32F103C series** board 1. Under **Tools** -> **Upload Method:** select **Serial**. 1. Click "Upload" and the sketch will be uploaded normally. 1. Once the firmware has uploaded: -..* Remove the 3.3V jumper!!!! -..* Remove the BOOT0 jumper -..* Check that you removed the 3.3V jumper + * Remove the 3.3V jumper!!!! + * Remove the BOOT0 jumper + * Check that you removed the 3.3V jumper 1. Insert the module into the transmitter bay From 3ac59a5bc07e9d3023c5b7e836db65d1f45dada4 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:32:49 +0200 Subject: [PATCH 17/32] Typo again... =) --- docs/Compiling.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index ff4c103..a7f5d68 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -17,16 +17,22 @@ The procedure below will guide you through all the steps to upload successfully 1. USBASP programmer supporting 3.3V: - [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) + + +[(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: - [(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) + + +[(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) 1. 6 pin header like this one: - [(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) + + +[(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) The 6 Pin header needs to be solder on the board like indicated by the red rectangle: * Banggood readymade 4-in-1 module: @@ -41,17 +47,24 @@ The 6 Pin header needs to be solder on the board like indicated by the red recta ### Connect the programmer 1. Before you connect the programmer make sure that you have selected the 3.3V mode and not 5V. The RF Modules are not 5V tolerant and you will break them with 5V. On most programmers this is done by moving a jumper. + + 1. Please re-read item 1. above before going on. 1. Turn the rotary switch on the DIY Multiprotocol module to the 0 position. If you do not have a switch for Serial mode only then it is the same as being in the 0 position. The upload will not work if the switch is in any other position. 1. Connect the 6-pin programming connector to the 6-pin ASP IVR connector on the DIY Multiprotocol board. Be sure to match the ground pin of the programmer connector to the ground pin on the board. The images below indicates the pin layout and the location of the ground pin on the board: * Banggood readymade 4-in-1 module: + + * DIY Mulitprotocol modules (like the 2.3d board): + + * Arduino Pro Mini module: + You are now ready to plug in the USB programmer to the computer @@ -117,7 +130,9 @@ First, we need to append some text to the Arduino file boards.txt. #### On Windows 1. Close the Arduino IDE 1. Search Windows for the application WordPad (DO NOT USE Notepad). Right click on WordPad and select "Run as Administrator": + + 1. Open the file ```boards.txt``` located in this folder ```C:\Program Files(x86)\Arduino\hardware\arduino\avr ``` or the equivalent if you have installed Aduino in a different directory. 1. Append the following text into the end of the file and save it: From 709c5cbd71ae08e0dcf59c5d6d81d8061ac4aeae Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:34:55 +0200 Subject: [PATCH 18/32] Typo !! --- docs/Compiling.md | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index a7f5d68..f7249a0 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -16,32 +16,21 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware 1. USBASP programmer supporting 3.3V: - - [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. - 1. 10pin to 6pin adapter: - - [(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) - 1. 6 pin header like this one: - - [(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) - -The 6 Pin header needs to be solder on the board like indicated by the red rectangle: -* Banggood readymade 4-in-1 module: +1.The 6 Pin header needs to be solder on the board like indicated by the red rectangle: + * Banggood readymade 4-in-1 module: - -* DIY Mulitprotocol modules (like the 2.3d board): + * DIY Mulitprotocol modules (like the 2.3d board): - -* Arduino Pro Mini module: + * Arduino Pro Mini module: ### Connect the programmer From c949eb549156cf2c2c14ba07bba530ec292d7193 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:40:02 +0200 Subject: [PATCH 19/32] Test image --- docs/Compiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index f7249a0..baff611 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -16,7 +16,7 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware 1. USBASP programmer supporting 3.3V: - +![](images/USBasp_Programmer.jpeg =200x) [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: From 25a2689bd0045078243cb2197d6db3f0841d095b Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 18:42:03 +0200 Subject: [PATCH 20/32] Test image --- docs/Compiling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index baff611..b60072c 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -16,7 +16,7 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware 1. USBASP programmer supporting 3.3V: -![](images/USBasp_Programmer.jpeg =200x) +[[images/USBasp_Programmer.jpeg]] [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: From e81ba5596712decff831ca7e44c091b5799ae244 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 20:12:08 +0200 Subject: [PATCH 21/32] Test image --- docs/Module_Build_yourself_PCB.md | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/docs/Module_Build_yourself_PCB.md b/docs/Module_Build_yourself_PCB.md index 61735e6..b553551 100644 --- a/docs/Module_Build_yourself_PCB.md +++ b/docs/Module_Build_yourself_PCB.md @@ -1,7 +1,12 @@ +![](images/DIY_Mulitprotocol_Module_Schematic.jpeg =500x) -#DIY MULTI-module by soldering components on a PCB +BLABLABLA + +![](images/DIY_Mulitprotocol_Module_Schematic.jpeg) + +# DIY MULTI-module by soldering components on a PCB Currently the form factor of this module is designed for the JR-style module bay. Many of the popular RC transmitters use the JR-style module bay: FrSky Taranis, FlySky Th9x, Turnigy 9X/R/Pro -##What you need +## What you need First you must choose the PCB onto which to solder all the components. There are two PCB options: - ATmega (8-bit) powered PCB V2.3d supporting individual RF modules - STM32 (32-bit) powered PCB V1.0t supporting the 4-in-1 RF module @@ -14,7 +19,7 @@ The **STM32-based** board has been designed to accept the 4-in-1 RF module with -###ATmega board V2.3d +### ATmega board V2.3d 1. ATmega (8-bit) powered PCB V2.3d available from OSHPark [here](https://oshpark.com/shared_projects/Ztus1ah8). 2. Individual RF modules The modules are available here: - [CC2500](http://www.banggood.com/2_4G-500K-CC2500-Long-Range-Wireless-Transceiver-Module-p-1075492.html) for FrSkyV, FrSkyD, FrSkyX and SFHSS @@ -26,34 +31,32 @@ The **STM32-based** board has been designed to accept the 4-in-1 RF module with The schematic for the board is [here](#V23D_Schematic). Please note that is is the general schematic - there will be some minor differences (like solder jumpers) between this and the board. -###STM32 powered PCB +### STM32 powered PCB 1. The latest STM32 (32-bit) powered PCB V1.0t supporting the 4-in-1 RF module available from OSHPark [here](https://oshpark.com/shared_projects/GX51nEoH). 2. The 4-in-1 RF module is available [here](http://www.banggood.com/DIY-2_4G-CC2500-NRF24L01-A7105-CYRF6936-Multi-RF-4-IN-1-Wireless-Module-p-1046308.html) 1. The schematic and BOM for this board V1.0t and older boards are available [here](BOM_DIY_STM32 & Schematic.md). -###Common parts +### Common parts 1. A module case that fits your module like the one [here](https://www.xtremepowersystems.net/proddetail.php?prod=XPS-J1CASE) or you can 3D print your own from a selection on Thingiverse ([Example 1](http://www.thingiverse.com/thing:1852868) [Example 2](http://www.thingiverse.com/thing:1661833)). [ ](http://www.thingiverse.com/thing:1852868) For 9XR/9XR Pro, a new 3D printed module is available which makes use of the built in antenna in the handle. This means nothing is getting out of the radio back! You can find all details of this module case on [Thingiverse](http://www.thingiverse.com/thing:2050717). - - 1. A 2.4GHz antenna and pigtail -##Build instructions +## Build instructions If you got this far you already know what you are doing!! -###Common steps +### Common steps 1. Solder all the parts according to the BOM part numbering and the images for your board (see OSHPARK for the images) 1. Fit the module into the module case. This may require some careful filing or sanding of the module to ensure a nice fit. -###PPM interface +### PPM interface If you are only planning on using the PPM interface with transmitter you are ready to program the module as described in [Compiling and Programming](Compiling.md) the module. -###Enabling Serial and Telemetry interface +### Enabling Serial and Telemetry interface If you have a transmitter that can support serial communication with the board then you need to solder some jumpers. @@ -77,10 +80,13 @@ You are now ready to go over to [Compiling and Programming](Compiling.md). You are now ready to go over to [Compiling and Programming STM32](Compiling_STM32.md). -#Reference Schematic +# Reference Schematic Here is the schematic you can use to troubleshoot the module ## PCB 2.3d Schematic General module schematic (reference) + + + V2.3d Board Schematic From 5286e7f89cc5df0ed840822092e0ca6ee6cbe7aa Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 20:19:35 +0200 Subject: [PATCH 22/32] Typo. --- README.md | 4 ++-- docs/Module_BG_4-in-1.md | 10 +++++----- docs/Module_Build_yourself_PCB.md | 8 -------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index fe76196..8e2fcee 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ The source code is partly based on the [Deviation TX project](http://www.deviati 1. [Transmitters and serial/telemetry options](docs/Transmitters.md) 1. [Module Hardware options](docs/Hardware.md) 1. Compiling and programming the module - * [4in1/DIY Mutliprotocol module based on ATmega328](docs/Compiling.md) - * [DIY Mutliprotocol module based on STM32](docs/Compiling_STM32.md) + * [4in1/DIY Mutliprotocol module based on ATmega328](docs/Compiling.md) + * [DIY Mutliprotocol module based on STM32](docs/Compiling_STM32.md) 1. [Transmitter Setup](docs/Transmitters.md) 1. [How to for popular models](docs/Models.md) 1. [Troubleshooting](docs/Troubleshooting.md) diff --git a/docs/Module_BG_4-in-1.md b/docs/Module_BG_4-in-1.md index d3717fc..10de56e 100644 --- a/docs/Module_BG_4-in-1.md +++ b/docs/Module_BG_4-in-1.md @@ -1,7 +1,7 @@ -#4-in-1 module +# 4-in-1 module Currently the form factor of this module is designed for the JR-style module bay. Many of the popular RC transmitters use the JR-style module bay: FrSky Taranis, FlySky Th9x, Turnigy 9X/R/Pro -##What you need +## What you need A fully assembled module + case available from Banggood.com [here](http://www.banggood.com/CC2500-NRF24L01-A7105-CYRF693-4-In-1-RF-Module-With-Case-For-Futaba-JR-Frsky-Transmitter-p-1116892.html) @@ -21,9 +21,9 @@ For 9XR/9XR Pro, a new 3D printed module is available which makes use of the bui -##Different working modes +## Different working modes -###PPM mode +### PPM mode If you are only planning on using the PPM interface with your transmitter, you need to connect it as described: @@ -34,7 +34,7 @@ The same plug is available on all versions of the module with the same signal lo If you wish to add an external device reading the telemetry, you need to enable serial mode as explained in the next topics otherwise you are now ready to go over to [Compiling and Programming](Compiling.md). -###Serial mode +### Serial mode If you have a transmitter that can support serial communication with the board then you need to wire up the board appropriately. There are three versions of the module and the steps are slightly different. Check which module you have and based on the pictures below. If you purchased the module after June 2016 then it is likely that you have a V1.1 type module. If you have purchased the version with case it is likely that you have a V1.2 type module. diff --git a/docs/Module_Build_yourself_PCB.md b/docs/Module_Build_yourself_PCB.md index b553551..39197eb 100644 --- a/docs/Module_Build_yourself_PCB.md +++ b/docs/Module_Build_yourself_PCB.md @@ -1,8 +1,3 @@ -![](images/DIY_Mulitprotocol_Module_Schematic.jpeg =500x) - -BLABLABLA - -![](images/DIY_Mulitprotocol_Module_Schematic.jpeg) # DIY MULTI-module by soldering components on a PCB Currently the form factor of this module is designed for the JR-style module bay. Many of the popular RC transmitters use the JR-style module bay: FrSky Taranis, FlySky Th9x, Turnigy 9X/R/Pro @@ -84,9 +79,6 @@ You are now ready to go over to [Compiling and Programming STM32](Compiling_STM3 Here is the schematic you can use to troubleshoot the module ## PCB 2.3d Schematic General module schematic (reference) - - - V2.3d Board Schematic From 62e2a0211fbef3e7402acd8a92439d6a2c7678ef Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 20:20:27 +0200 Subject: [PATCH 23/32] Fix categories. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8e2fcee..5fb560f 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,8 @@ The source code is partly based on the [Deviation TX project](http://www.deviati 1. [Transmitters and serial/telemetry options](docs/Transmitters.md) 1. [Module Hardware options](docs/Hardware.md) 1. Compiling and programming the module - * [4in1/DIY Mutliprotocol module based on ATmega328](docs/Compiling.md) - * [DIY Mutliprotocol module based on STM32](docs/Compiling_STM32.md) + * [4in1/DIY Mutliprotocol module based on ATmega328](docs/Compiling.md) + * [DIY Mutliprotocol module based on STM32](docs/Compiling_STM32.md) 1. [Transmitter Setup](docs/Transmitters.md) 1. [How to for popular models](docs/Models.md) 1. [Troubleshooting](docs/Troubleshooting.md) From e51f6e1e86914cec885670fba124295b12dacccc Mon Sep 17 00:00:00 2001 From: LapinFou Date: Tue, 18 Apr 2017 20:37:40 +0200 Subject: [PATCH 24/32] More corrections. --- README.md | 9 +++------ docs/Compiling.md | 2 +- docs/Hardware.md | 2 +- docs/Module_Build_From_Scratch.md | 6 +++--- docs/Module_Build_yourself_PCB.md | 5 +++-- docs/Module_OrangeRx.md | 2 +- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 5fb560f..e9d210e 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,9 @@ A functioning MULTI-Module consists of (see image below): 1. A host RC Tx 1. A Multiprotocol Transmitter Module (MULTI-Module) that connects to a host transmitter. This module is typically comprised of - - * A microcontroller (currently ATMega328P or STM32) that interfaces with the Tx, controls the module functions and forwards the RC commands to the RF hardware - - * One or more (but at least one) RF modules that provide the capability to communicate with RC receivers. To communicate with the receiver the RF module in the Tx must match with the RF module type in the receiver. The four most common 2.4GHz RF chips on the market are supported TI CC2500, Nordic NRF24L01, Cypress CYRF6936, and the Amiccom A7105 - - * MULTI-firmware loaded on to the microprocessor. At a high level, this firmware performs a few different functions: + * A microcontroller (currently ATMega328P or STM32) that interfaces with the Tx, controls the module functions and forwards the RC commands to the RF hardware + * One or more (but at least one) RF modules that provide the capability to communicate with RC receivers. To communicate with the receiver the RF module in the Tx must match with the RF module type in the receiver. The four most common 2.4GHz RF chips on the market are supported TI CC2500, Nordic NRF24L01, Cypress CYRF6936, and the Amiccom A7105 + * MULTI-firmware loaded on to the microprocessor. At a high level, this firmware performs a few different functions: * It interfaces with signals from the host Tx and decodes these for transmission to the model, it manages the activation of the correct hardware RF module for each protocol * It implements the unique communication protocols for each receiver/model and manages the all-important binding process with a receiver/model * In the case of some protocols (for example DSMX and FrSky) it receives and decodes the telemetry information and makes this available to the radio. diff --git a/docs/Compiling.md b/docs/Compiling.md index b60072c..f7249a0 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -16,7 +16,7 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware 1. USBASP programmer supporting 3.3V: -[[images/USBasp_Programmer.jpeg]] + [(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: diff --git a/docs/Hardware.md b/docs/Hardware.md index 669f787..4748bfb 100644 --- a/docs/Hardware.md +++ b/docs/Hardware.md @@ -2,7 +2,7 @@ The choice of **Multiprotocol Transmitter Module (MULTI-Module)** hardware is the single biggest choice you will make. Due to the growing popularity of this project the number of hardware choices is growing almost monthly. -There are currently four common hardware options. They are (click on the pictures for more info): +There are currently four common hardware options. They are (**click on the pictures for more info**): 1. A ready-made 4-in-1 MULTI-Module which integrates the microcontroller with all four supported RF modules and a hardware antenna switcher. [](Module_BG_4-in-1.md) diff --git a/docs/Module_Build_From_Scratch.md b/docs/Module_Build_From_Scratch.md index a447c9f..86d8ea2 100644 --- a/docs/Module_Build_From_Scratch.md +++ b/docs/Module_Build_From_Scratch.md @@ -1,4 +1,4 @@ -#Build from stratch +# Build from stratch If you can help to fully document this page, or just add additional detail please let us know on the rcgroups [forum](http://www.rcgroups.com/forums/showthread.php?t=2165676). @@ -14,9 +14,9 @@ A module case that fits your receiver like the one [here](https://www.xtremepowe For 9XR/9XR Pro, a new 3D printed module is available which makes use of the built in antenna in the handle. This means nothing is getting out of the radio back. You can find all details of this module case on [Thingiverse](http://www.thingiverse.com/thing:2050717). -##Reference Schematic +## Reference Schematic Here is the schematic you can use to troubleshoot the module -##Compiling and programming +## Compiling and programming Follow the instruction on the [Compiling and programming page](Compiling.md) diff --git a/docs/Module_Build_yourself_PCB.md b/docs/Module_Build_yourself_PCB.md index 39197eb..ed2bd08 100644 --- a/docs/Module_Build_yourself_PCB.md +++ b/docs/Module_Build_yourself_PCB.md @@ -1,10 +1,11 @@ # DIY MULTI-module by soldering components on a PCB Currently the form factor of this module is designed for the JR-style module bay. Many of the popular RC transmitters use the JR-style module bay: FrSky Taranis, FlySky Th9x, Turnigy 9X/R/Pro + ## What you need First you must choose the PCB onto which to solder all the components. There are two PCB options: - - ATmega (8-bit) powered PCB V2.3d supporting individual RF modules - - STM32 (32-bit) powered PCB V1.0t supporting the 4-in-1 RF module +- ATmega (8-bit) powered PCB V2.3d supporting individual RF modules +- STM32 (32-bit) powered PCB V1.0t supporting the 4-in-1 RF module The **ATmega-based board** has been designed to accept individual RF modules. This way you can select just the module or modules you want. The downside is that each module requires its own antenna. It can become cumbersome with 4 antennas protruding from the module. It is possible to soder the 4-in-1 module to the PCB using thin insulated wire. This 4-in-1 module requires only one antenna. Finally, the Atmega board has a 32KB flash memory. This is big enough to accommodate more than 15 protocols, but it cannot accommodate all the available protocols. diff --git a/docs/Module_OrangeRx.md b/docs/Module_OrangeRx.md index 6cdd2f0..ee03fe8 100644 --- a/docs/Module_OrangeRx.md +++ b/docs/Module_OrangeRx.md @@ -1,4 +1,4 @@ -#OrangeRx Transmitter module +# OrangeRx Transmitter module The OrangeRx transmitter module uses an Atmel XMega MCU. This requires a PDI programmer to flash firmware, the USBASP programmers do not work. From b08bcf041bac8253557aca7c1f4a31ce750bffa7 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Wed, 19 Apr 2017 09:53:15 +0200 Subject: [PATCH 25/32] Fixed compiling page. --- docs/Compiling.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index f7249a0..7800625 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -17,20 +17,20 @@ The procedure below will guide you through all the steps to upload successfully 1. USBASP programmer supporting 3.3V: -[(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) +[Example aliexpress link](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. 1. 10pin to 6pin adapter: -[(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) +[Example ebay link](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) 1. 6 pin header like this one: -[(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) +[Example Digi-Key link](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) 1.The 6 Pin header needs to be solder on the board like indicated by the red rectangle: - * Banggood readymade 4-in-1 module: + - Banggood readymade 4-in-1 module: - * DIY Mulitprotocol modules (like the 2.3d board): + - DIY Mulitprotocol modules (like the 2.3d board): - * Arduino Pro Mini module: + - Arduino Pro Mini module: ### Connect the programmer From 154f61fb11caf60f36dc6ccc42271e68327b27a7 Mon Sep 17 00:00:00 2001 From: LapinFou Date: Wed, 19 Apr 2017 09:56:08 +0200 Subject: [PATCH 26/32] Fixed "Material you need to upload the firmware" section. --- docs/Compiling.md | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index 7800625..d4c2c45 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -15,23 +15,14 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware -1. USBASP programmer supporting 3.3V: - -[Example aliexpress link](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) +1. USBASP programmer supporting 3.3V: [Example aliexpress link](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. -1. 10pin to 6pin adapter: - -[Example ebay link](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) -1. 6 pin header like this one: - -[Example Digi-Key link](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) +1. 10pin to 6pin adapter: [Example ebay link](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) +1. 6 pin header like this one: [Example Digi-Key link](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) 1.The 6 Pin header needs to be solder on the board like indicated by the red rectangle: - - Banggood readymade 4-in-1 module: - - - DIY Mulitprotocol modules (like the 2.3d board): - - - Arduino Pro Mini module: - + * Banggood readymade 4-in-1 module: + * DIY Mulitprotocol modules (like the 2.3d board): + * Arduino Pro Mini module: ### Connect the programmer From c32e3901841554b7a4d09ce3a0a2669b4d1fccdb Mon Sep 17 00:00:00 2001 From: Sebastien Charpentier Date: Wed, 19 Apr 2017 10:07:28 +0200 Subject: [PATCH 27/32] Update Compiling.md --- docs/Compiling.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index d4c2c45..8e52b40 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -15,14 +15,13 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware -1. USBASP programmer supporting 3.3V: [Example aliexpress link](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs) -There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. -1. 10pin to 6pin adapter: [Example ebay link](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) -1. 6 pin header like this one: [Example Digi-Key link](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) -1.The 6 Pin header needs to be solder on the board like indicated by the red rectangle: - * Banggood readymade 4-in-1 module: - * DIY Mulitprotocol modules (like the 2.3d board): - * Arduino Pro Mini module: +1. USBASP programmer supporting 3.3V:

[(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs)
There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. +1. 10pin to 6pin adapter:

[(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) +1. 6 pin header like this one:

[(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) +1. The 6 Pin header needs to be solder on the board like indicated by the red rectangle: + * Banggood readymade 4-in-1 module:
+ * DIY Mulitprotocol modules (like the 2.3d board):
+ * Arduino Pro Mini module:
### Connect the programmer From adeea85c9ac1b667e3e893cbcdc53da7d78623fe Mon Sep 17 00:00:00 2001 From: LapinFou Date: Wed, 19 Apr 2017 10:12:01 +0200 Subject: [PATCH 28/32] Cosmetic. --- docs/Compiling.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Compiling.md b/docs/Compiling.md index 8e52b40..53e2993 100644 --- a/docs/Compiling.md +++ b/docs/Compiling.md @@ -15,13 +15,13 @@ The procedure below will guide you through all the steps to upload successfully ### Material you need to upload the firmware -1. USBASP programmer supporting 3.3V:

[(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs)
There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok. -1. 10pin to 6pin adapter:

[(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh) -1. 6 pin header like this one:

[(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR) +1. USBASP programmer supporting 3.3V:

[(example aliexpress link)](https://www.aliexpress.com/item/USBasp-USB-ISP-3-3V-5V-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-10PIN-Wire-Support/2036402518.html?spm=2114.30010308.8.10.jIbHzs)
There are reports that some of the cheap programmers are not safe to use with 3.3V units, usually the black PCB versions are ok.

+1. 10pin to 6pin adapter:

[(example ebay link)](http://www.ebay.fr/itm/10-Pin-a-6-Pin-Carte-Adaptateur-M-F-pour-AVRISP-USBASP-STK500-Noir-Bleu-WT-/291862396761?hash=item43f45abf59:g:gXsAAOSwMgdXyGnh)

+1. 6 pin header like this one:

[(example Digi-Key link)](http://www.digikey.com/products/en?keywords=3M%20961206-6404-AR)

1. The 6 Pin header needs to be solder on the board like indicated by the red rectangle: - * Banggood readymade 4-in-1 module:
- * DIY Mulitprotocol modules (like the 2.3d board):
- * Arduino Pro Mini module:
+ * Banggood readymade 4-in-1 module:


+ * DIY Mulitprotocol modules (like the 2.3d board):


+ * Arduino Pro Mini module:


### Connect the programmer From 799160510686b778606b092da8751daceff4c3fb Mon Sep 17 00:00:00 2001 From: Sebastien Charpentier Date: Wed, 19 Apr 2017 10:39:45 +0200 Subject: [PATCH 29/32] Update Compiling_STM32.md --- docs/Compiling_STM32.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/Compiling_STM32.md b/docs/Compiling_STM32.md index 958fb4e..195cb0b 100644 --- a/docs/Compiling_STM32.md +++ b/docs/Compiling_STM32.md @@ -8,8 +8,8 @@ On all modules with STM32F103 microcontroller, the program flash memory on the m 1. Compiling and flashing in Arduino IDE. 1. Flashing precompiled binaries from [here](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/releases) - - If using one of these TX with multimodule like Turnigy 9X,9XR,9X+ the binary file for flashing is **Multiprotocol_V1.X.X_STM32.bin**. - - If using TARANIS TX the binary file is **Multiprotocol_V1.X.X_STM32_INV.bin** + - If using one of these TX with multimodule like Turnigy 9X,9XR,9X+ the binary file for flashing is **Multiprotocol_V1.X.X_STM32.bin**. + - If using TARANIS TX the binary file is **Multiprotocol_V1.X.X_STM32_INV.bin** Flashing precompiled **binaries** is done very simple with the cable setup presented below and an utility(GUI) **ST Flash Loader Demonstrator.** @@ -19,9 +19,9 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese 1. Download the Arduino IDE. The currently supported Arduino version is 1.6.11 available for [Windows]( https://www.arduino.cc/download_handler.php?f=/arduino-1.6.12-windows.exe) and [Mac OSX](http://arduino.cc/download_handler.php?f=/arduino-1.6.12-macosx.zip) 1. It is recommended to upgrade Java to the [latest version](https://www.java.com/en/download/) 1. Download the [STM32 Core](https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip) and copy the Arduino_STM32 folder to: - - OSX: ```Arduino.app/Contents/Java/hardware``` (you can open Arduino.app by Ctl Clicking on Arduino.app and selecting "Show Package Contents") - - Windows: ```C:\Program Files (x86)\Arduino\hardware``` - - Make sure the folder tree structure is like this .....\hardware\Arduino_STM32\.....and **NOT** ...... \hardware\Arduino_STM32-master\Arduino_STM32-master\......So move the folders /rename accordingly. + - OSX: ```Arduino.app/Contents/Java/hardware``` (you can open Arduino.app by Ctl Clicking on Arduino.app and selecting "Show Package Contents") + - Windows: ```C:\Program Files (x86)\Arduino\hardware``` + - Make sure the folder tree structure is like this .....\hardware\Arduino_STM32\.....and **NOT** ...... \hardware\Arduino_STM32-master\Arduino_STM32-master\......So move the folders /rename accordingly. 1. Download the zip file with the Multiprotocol module source code from [here](https://github.com/pascallanger/DIY-Multiprotocol-TX-Module) 1. Unzip and copy the source code folder ```Multiprotocol``` to a folder of your choosing 1. Click on the ```Multiprotocol.ino file``` in the ```Multiprotocol``` folder and the Arduino environment should appear and the Multiprotocol project will be loaded. @@ -61,9 +61,9 @@ The second method is definitely the easiest in the long-term, but it does requi 1. Put the module in the Tx 1. Place a jumper over the BOOT0 pins.Skip this one if you made your own cable for flashing ,see below. 1. Connect your 3.3V/5V FTDI cable (USB - TTL serial) to Multiprotocol serial port. Connect only RX, TX and GND. **Do not connect the 5V or 3.3V between the FTDI cable and the module - the power will be supplied by the transmitter**. Connect the pins as follows: - - Module RX pin to FTDI TX pin - - Module TX pin to FTDI Rx pin - - Module GND to FTDI GND + - Module RX pin to FTDI TX pin + - Module TX pin to FTDI Rx pin + - Module GND to FTDI GND 1. In arduino IDE under the **Tools** -> **Board:** check that you have selected the **Generic STM32F103C series** board 1. Under **Tools** -> **Upload Method:** select **Serial** 1. Click "Upload" and the sketch will be uploaded normally. This is valid for all arduino versions. @@ -111,7 +111,7 @@ Run the ST Flash Loader program. There are many tutorials on the web on how to u #### OSX: To be checked. -###Report issues for the STM32 board +### Report issues for the STM32 board You can report your problem using the [GitHub issue](https://github.com/midelic/DIY-Multiprotocol-TX-Module/issues) system or go to the [Main thread on RCGROUPS](http://www.rcgroups.com/forums/showthread.php?t=2165676) to ask your question. Please provide the following information: From c2050d4314559f342122b477f62e349596a04e6a Mon Sep 17 00:00:00 2001 From: Sebastien Charpentier Date: Wed, 19 Apr 2017 10:41:32 +0200 Subject: [PATCH 30/32] Update Compiling_STM32.md --- docs/Compiling_STM32.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Compiling_STM32.md b/docs/Compiling_STM32.md index 195cb0b..f45ab8e 100644 --- a/docs/Compiling_STM32.md +++ b/docs/Compiling_STM32.md @@ -44,10 +44,10 @@ Flashing precompiled **binaries** is done very simple with the cable setup prese **}** ***/** -1. Run the IDE, and on the **Tools** menu, select **Board** and then **Boards manager**. Click on the Arduino DUE (32 Bits ARM-Cortex M3) from the list of available boards. You must do this step, it installs the arm-none-eabi-g++ toolchain! +1. Run the IDE, and on the **Tools** menu, select **Board** and then **Boards manager**.
Click on the Arduino DUE (32 Bits ARM-Cortex M3) from the list of available boards. You must do this step, it installs the arm-none-eabi-g++ toolchain! 1. Close and reopen the Arduino IDE and load the Multiprotocol project. 1. In arduino IDE under the **Tools** -> **Board:** select the **Generic STM32F103C series** board -1. Click on the **Verify** button to test compile the before you make any changes. If there are any errors check the process above and be sure to have the right version of the Arduino IDE.The binary file generated location is presented at the bottom of Arduino IDE compiling window.Now continue with flashing procedure. +1. Click on the **Verify** button to test compile the before you make any changes.
If there are any errors check the process above and be sure to have the right version of the Arduino IDE.The binary file generated location is presented at the bottom of Arduino IDE compiling window.Now continue with flashing procedure. ### Flashing the multimodule @@ -60,7 +60,7 @@ The second method is definitely the easiest in the long-term, but it does requi 1. Put the module in the Tx 1. Place a jumper over the BOOT0 pins.Skip this one if you made your own cable for flashing ,see below. -1. Connect your 3.3V/5V FTDI cable (USB - TTL serial) to Multiprotocol serial port. Connect only RX, TX and GND. **Do not connect the 5V or 3.3V between the FTDI cable and the module - the power will be supplied by the transmitter**. Connect the pins as follows: +1. Connect your 3.3V/5V FTDI cable (USB - TTL serial) to Multiprotocol serial port.
Connect only RX, TX and GND. **Do not connect the 5V or 3.3V between the FTDI cable and the module - the power will be supplied by the transmitter**. Connect the pins as follows: - Module RX pin to FTDI TX pin - Module TX pin to FTDI Rx pin - Module GND to FTDI GND From 2d44c8914962f2fc7ae916fff9b243fd5e6a69bc Mon Sep 17 00:00:00 2001 From: Sebastien Charpentier Date: Wed, 19 Apr 2017 10:43:59 +0200 Subject: [PATCH 31/32] Update Models.md Fixed **CH6 and CH7** section. --- docs/Models.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Models.md b/docs/Models.md index f1209a0..a197f4d 100644 --- a/docs/Models.md +++ b/docs/Models.md @@ -165,10 +165,10 @@ CH6 and CH7 can be assigned to switches or pots to provide additionaly functiona Replicating the stock setup of two pots, you would assign: -Channel | Weight | Source | Multiplex ---- | --- | --- | --- | --- -CH6 | +100% | P1 | ADD -CH7 | +100% | P3 | ADD +Channel|Weight|Source|Multiplex +---|---|---|--- +CH6|+100%|P1|ADD +CH7|+100%|P3|ADD ## Full Mixer Setup From f4865c52064ddb976fae7417b4cefc9841aec4e9 Mon Sep 17 00:00:00 2001 From: Sebastien Charpentier Date: Wed, 19 Apr 2017 10:46:53 +0200 Subject: [PATCH 32/32] Update Hardware.md Highlighted the "more information when clicking on the pictures". --- docs/Hardware.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Hardware.md b/docs/Hardware.md index 4748bfb..af18d4f 100644 --- a/docs/Hardware.md +++ b/docs/Hardware.md @@ -2,7 +2,7 @@ The choice of **Multiprotocol Transmitter Module (MULTI-Module)** hardware is the single biggest choice you will make. Due to the growing popularity of this project the number of hardware choices is growing almost monthly. -There are currently four common hardware options. They are (**click on the pictures for more info**): +There are currently four common hardware options. They are (`click on the pictures for more info`): 1. A ready-made 4-in-1 MULTI-Module which integrates the microcontroller with all four supported RF modules and a hardware antenna switcher. [](Module_BG_4-in-1.md)