SX1276 Tx Continuous Wave Demo Application
SX1276 Tx Continuous Wave Demo Application
This application is used for test purposes by outputting a continuous wave, at maximum power, at a given frequency.
main.cpp
- Committer:
- GregCr
- Date:
- 2014-08-19
- Revision:
- 1:edbca7c3fbad
- Parent:
- 0:d5e61ad8edd9
- Child:
- 2:c6e6da9fc5e1
File content as of revision 1:edbca7c3fbad:
/* / _____) _ | | ( (____ _____ ____ _| |_ _____ ____| |__ \____ \| ___ | (_ _) ___ |/ ___) _ \ _____) ) ____| | | || |_| ____( (___| | | | (______/|_____)_|_|_| \__)_____)\____)_| |_| ( C )2014 Semtech Description: Tx Continuous Wave implementation License: Revised BSD License, see LICENSE.TXT file include in the project Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin */ #include "mbed.h" #include "sx1276-hal.h" #define TEST_HF_OUTPUT 1 #define TEST_LF_OUTPUT = !TEST_HF_OUTPUT #define LORA_BANDWIDTH 0 // [0: 125 kHz, // 1: 250 kHz, // 2: 500 kHz, // 3: Reserved] #define LORA_SPREADING_FACTOR 9 // [SF7..SF12] #define LORA_CODINGRATE 1 // [1: 4/5, // 2: 4/6, // 3: 4/7, // 4: 4/8] #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON false SX1276MB1xAS Radio( NULL, NULL, NULL, NULL, NULL ); #if USE_LEDS DigitalOut Led1( LED1 ); DigitalOut Led2( LED2 ); DigitalOut Led3( LED3 ); #else bool Led1 = 0; bool Led2 = 0; bool Led3 = 0; #endif static Timeout LedTimer; volatile bool Led1TimerEvent = false; volatile bool Led2TimerEvent = false; volatile bool Led3TimerEvent = false; /*! * \brief Function executed on Led 1 Timeout event */ void OnLed1TimerEvent( void ) { Led1TimerEvent = true; } /*! * \brief Function executed on Led 2 Timeout event */ void OnLed2TimerEvent( void ) { Led2TimerEvent = true; } /*! * \brief Function executed on Led 3 Timeout event */ void OnLed3TimerEvent( void ) { Led3TimerEvent = true; } void PrintLeds( ) { #if !USE_LEDS char charLed1 = ( Led1 == true ) ? '0' : 'x'; char charLed2 = ( Led2 == true ) ? '0' : 'x'; char charLed3 = ( Led3 == true ) ? '0' : 'x'; debug( "%c%c%c\r\n", charLed1, charLed2, charLed3 ); #endif } /** * Main application entry point. */ int main( void ) { uint8_t TxOuputPower = 0; debug("\n\r\n\r SX1276 Continuous Wave at full power Demo Application \n\r"); #if defined TARGET_NUCLEO_L152RE debug(" > Nucleo-L152RE Platform <\r\n" ); #elif defined TARGET_KL25Z debug(" > KL25Z Platform <\r\n" ); #elif defined TARGET_LPC11U6X debug(" > LPC11U6X Platform <\r\n" ); #else debug(" > Untested Platform <\r\n" ); #endif /**********************************************/ /* WARNING */ /* The below settings can damage the chipset */ /* if wrongly used. DO NOT CHANGE THE VALUES! */ /* */ /**********************************************/ #if TEST_HF_OUTPUT == 1 if( Radio.DetectBoardType( ) == SX1276MB1LAS ) // { debug("\r\n TEST_HF_OUTPUT on SX1276MB1LAS: 20 dBm at 915 MHz \r\n" ); Radio.SetChannel( 915000000 ); TxOuputPower = 14; Radio.Write( 0x01, 0x80 ); Radio.Write( 0x44, 0x7B ); Radio.Write( 0x3D, 0xA1 ); Radio.Write( 0x36, 0x01 ); Radio.Write( 0x1e, 0x08 ); Radio.Write( 0x45, 0xDF ); Radio.Write( 0x46, 0x03 ); Radio.Write( 0x4D, 0x87 ); Radio.Write( 0x52, 0x60 ); } else { // SX1276MB1MAS debug("\r\n TEST_HF_OUTPUT on SX1276MB1MAS: 14 dBm at 868 MHz \r\n" ); Radio.SetChannel( 868000000 ); TxOuputPower = 20; Radio.Write( 0x01, 0x88 ); Radio.Write( 0x3D, 0xA1 ); Radio.Write( 0x36, 0x01 ); Radio.Write( 0x1e, 0x08 ); } #elif TEST_LF_OUTPUT == 1 debug("\r\n TEST_LF_OUTPUT on SX1276MB1xAS: 14 dBm at 434 MHz \r\n" ); Radio.SetChannel( 433000000 ); TxOuputPower = 14; Radio.Write( 0x01, 0x88 ); Radio.Write( 0x3D, 0xA1 ); Radio.Write( 0x36, 0x01 ); Radio.Write( 0x1e, 0x08 ); #endif Radio.SetTxConfig( MODEM_LORA, TxOuputPower, 0, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, true, LORA_IQ_INVERSION_ON, 3000000 ); // Switch LED 1 ON Led1 = 1; LedTimer.attach_us( OnLed1TimerEvent, 90000 ); // Sets the radio in Tx mode Radio.Send( NULL, 0 ); debug( "Start main loop: \r\n" ); // Blink LEDs just to show some activity while( 1 ) { if( Led1TimerEvent == true ) { Led1TimerEvent = false; // Switch LED 1 OFF Led1 = 0; // Switch LED 2 ON Led2 = 1; LedTimer.attach_us( OnLed2TimerEvent, 90000 ); PrintLeds( ); } if( Led2TimerEvent == true ) { Led2TimerEvent = false; // Switch LED 2 OFF Led2 = 0; // Switch LED 3 ON Led3 = 1; LedTimer.attach_us( OnLed3TimerEvent, 90000 ); PrintLeds( ); } if( Led3TimerEvent == true ) { Led3TimerEvent = false; // Switch LED 3 OFF Led3 = 0; // Switch LED 1 ON Led1 = 1; LedTimer.attach_us( OnLed1TimerEvent, 90000 ); PrintLeds( ); } } }