Flysky rc receiver with ppm output. made with KL05Z uc with internal clk (modified mbed lib)
Dependencies: A7105_FLYSKY_RX FreescaleIAP SERVO_PPM mbed-src-KL05Z-internal-clk
Revision 0:3c6963e96a05, committed 2015-11-13
- Comitter:
- pebayle
- Date:
- Fri Nov 13 09:00:51 2015 +0000
- Commit message:
- A flysky rc receiver with ppm ouput, KL05Z uc with internal clk. It uses my own libraries: A7105_FLYSKY_RX, SERVO_PPM and mbed-src-KL05Z-internal-clk. Also uses FreescaleIAP library to store TX ident (bind procedure) into KL05Z program memory.
Changed in this revision
diff -r 000000000000 -r 3c6963e96a05 A7105_FLYSKY_RX.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/A7105_FLYSKY_RX.lib Fri Nov 13 09:00:51 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/pebayle/code/A7105_FLYSKY_RX/#19d3601a7744
diff -r 000000000000 -r 3c6963e96a05 FreescaleIAP.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FreescaleIAP.lib Fri Nov 13 09:00:51 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/FreescaleIAP/#186db0d96fcf
diff -r 000000000000 -r 3c6963e96a05 SERVO_PPM.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SERVO_PPM.lib Fri Nov 13 09:00:51 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/pebayle/code/SERVO_PPM/#e57e8eee5411
diff -r 000000000000 -r 3c6963e96a05 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Nov 13 09:00:51 2015 +0000 @@ -0,0 +1,134 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Flysky RC receiver 8 x servos PWM + PPM outputs +// +// tested with FRDM-KL05Z and A7105SY module +// tested with custom board with KL05ZLVC4 chip and A7105SY module +// +// In order to program an external KL05Z32VLC4, I take a FRDM-KL25Z board (don't take FRDM-KL05Z board, there's a bug on layout!), +// cut wire under JP11 connector to disconnect onboard KL25Z chip, do a special cable (see FRDM-KL25Z schematic, J6 SWD CONNECTOR, +// you just need to solder 5 wires: 3.3V, GND, SWD_DIO, SWD_CLK, RST_TGT) to link your custom KL05Z32VLC4 board, and program FRDM-KL25Z +// board with an FRDM-KL05Z firmware and it works fine as a cheap programmer interface! +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//compiler option +#define DEBUG 1 //display status through serial +#define STORE_TX_ID_KLxx 1 //store in flash memory previous TX ID in KLxx flash memory + //not necessary, but you'll need to bind transmitter each time you turn off your receiver + +//include +#include "mbed.h" +#include "A7105_FLYSKY_RX.h" //Flysky protocol dialog with A7105 2.4Ghz module +#include "servo_ppm.h" //servo PWM and PPM outputs +#if STORE_TX_ID_KLxx +#include "FreescaleIAP.h" //to store TX ID in KLxx flash memory, only works for freescale KLxx +#endif //you need to use suitable lib for other arm family, + //and modify code linked to "#if STORE_TX_ID_KLxx" below... + +//A7105 <-> KL05Z pin assignment +#define PIN_SDIO PTA7 //SPI mosi +#define PIN_GIO1 PTA6 //SPI miso +#define PIN_SCK PTB0 //SPI sck +#define PIN_CS PTA10 //CS +#define PIN_GIO2 PTA11 //wait rx + +//servo <-> KL05Z pin assignment +#define PIN_SERVO1 PTB5 +#define PIN_SERVO2 PTA12 +#define PIN_SERVO3 PTB6 +#define PIN_SERVO4 PTB7 +#define PIN_SERVO5 PTB11 +#define PIN_SERVO6 PTA5 +#define PIN_SERVO7 PTA9 +#define PIN_SERVO8 PTA8 + +//PPM <-> KL05Z pin assignment +#define PIN_PPM PTB3 + +//serial debug +#if DEBUG +Serial pc(USBTX, USBRX); +#endif + +//A7105 flysky RX +A7105_flysky_RX rx(PIN_SDIO, PIN_GIO1, PIN_SCK, PIN_CS, PIN_GIO2, LED_GREEN); //mosi, miso, sck, cs, wait_rx, status_led) + +//servo and ppm outputs +//servo_ppm servoPpmOut( PIN_PPM, PIN_SERVO1, PIN_SERVO2, PIN_SERVO3, PIN_SERVO4, PIN_SERVO5, PIN_SERVO6, PIN_SERVO7, PIN_SERVO8); +servo_ppm servoPpmOut( NC, PIN_SERVO1, PIN_SERVO2, NC, PIN_SERVO4, PIN_SERVO5, PIN_SERVO6, PIN_SERVO7, PIN_SERVO8); + +///////////// +// M A I N +///////////// + +int main() +{ + int i; + bool ok; + + #if DEBUG + //say hello! + pc.printf("\n\rHello!"); + #endif + + //start servo/ppm frame + servoPpmOut.startServoPpmOutput(); + + //init A7105 + ok = rx.init(); + if (ok) + { + //bind TX + ok = rx.bind(); //if bind failed, TX Id take "default_tx_id" value found in A7105_FLYSKY_RX.h + + #if STORE_TX_ID_KLxx + //if bind ok, stores TX ID in flash memory + int address = flash_size() - SECTOR_SIZE; //Write in last sector + if (ok) + { + erase_sector(address); + #if DEBUG + printf("\n\r bind ok: write TX ID in Flash: %X,%X,%X,%X", rx.txId[0], rx.txId[1], rx.txId[2], rx.txId[3]); + #endif + program_flash(address, (char*)rx.txId, 4); //4 bytes + } + //if bind not ok, get previous bind TX ID, stored in flash memory + else + { + char *data = (char*)address; + rx.txId[0] = data[0]; rx.txId[1] = data[1]; rx.txId[2] = data[2]; rx.txId[3] = data[3]; + #if DEBUG + printf("\n\r bind failed, TX ID readden in Flash: %X,%X,%X,%X", rx.txId[0], rx.txId[1], rx.txId[2], rx.txId[3]); + #endif + } + #else + #if DEBUG + //display bind status + if (ok) printf("\r\nbind ok, TX ID : %X,%X,%X,%X", rx.txId[0], rx.txId[1], rx.txId[2], rx.txId[3]); + else printf("\r\nbind failed, take default TX ID : %X,%X,%X,%X", rx.txId[0], rx.txId[1], rx.txId[2], rx.txId[3]); + #endif + #endif + //infinite loop, receive packet and update servos + int cptError = 0; + while (1) + { + //wait packet (1.46ms) or timeout(1.5ms) since last call to this function + switch( rx.waitPacket() ) + { + case NO_ERROR: //update servo position + for (i=0; i<6; i++) servoPpmOut.setServoPulseDuration_us( i+1, rx.servoPulseDur[i] ); break; + case TIME_OUT_ERROR: + printf("\r\n%d: time out error", cptError); cptError++; break; + case VALIDITY_ERROR: + printf("\r\n%d: validity error", cptError); cptError++; break; + case TX_ID_ERROR: + printf("\r\n%d: tx id error", cptError); cptError++; break; + } + } + } + #if DEBUG + else + { + printf("\r\ninit failed !!!"); + } + #endif +}
diff -r 000000000000 -r 3c6963e96a05 mbed-src-KL05Z-internal-clk.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-src-KL05Z-internal-clk.lib Fri Nov 13 09:00:51 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/pebayle/code/mbed-src-KL05Z-internal-clk/#0ccc70d792b0