SX1276 Tx Continuous Wave Demo Application

Dependencies:   SX1276Lib mbed

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.

Committer:
GregCr
Date:
Tue Aug 19 09:15:10 2014 +0000
Revision:
1:edbca7c3fbad
Parent:
0:d5e61ad8edd9
Child:
2:c6e6da9fc5e1
version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:d5e61ad8edd9 1 /*
GregCr 0:d5e61ad8edd9 2 / _____) _ | |
GregCr 0:d5e61ad8edd9 3 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 0:d5e61ad8edd9 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 0:d5e61ad8edd9 5 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 0:d5e61ad8edd9 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
GregCr 0:d5e61ad8edd9 7 ( C )2014 Semtech
GregCr 0:d5e61ad8edd9 8
GregCr 0:d5e61ad8edd9 9 Description: Tx Continuous Wave implementation
GregCr 0:d5e61ad8edd9 10
GregCr 0:d5e61ad8edd9 11 License: Revised BSD License, see LICENSE.TXT file include in the project
GregCr 0:d5e61ad8edd9 12
GregCr 0:d5e61ad8edd9 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
GregCr 0:d5e61ad8edd9 14 */
GregCr 0:d5e61ad8edd9 15 #include "mbed.h"
GregCr 0:d5e61ad8edd9 16 #include "sx1276-hal.h"
GregCr 0:d5e61ad8edd9 17
GregCr 0:d5e61ad8edd9 18 #define TEST_HF_OUTPUT 1
GregCr 0:d5e61ad8edd9 19 #define TEST_LF_OUTPUT = !TEST_HF_OUTPUT
GregCr 0:d5e61ad8edd9 20
GregCr 0:d5e61ad8edd9 21 #define LORA_BANDWIDTH 0 // [0: 125 kHz,
GregCr 0:d5e61ad8edd9 22 // 1: 250 kHz,
GregCr 0:d5e61ad8edd9 23 // 2: 500 kHz,
GregCr 0:d5e61ad8edd9 24 // 3: Reserved]
GregCr 0:d5e61ad8edd9 25 #define LORA_SPREADING_FACTOR 9 // [SF7..SF12]
GregCr 0:d5e61ad8edd9 26 #define LORA_CODINGRATE 1 // [1: 4/5,
GregCr 0:d5e61ad8edd9 27 // 2: 4/6,
GregCr 0:d5e61ad8edd9 28 // 3: 4/7,
GregCr 0:d5e61ad8edd9 29 // 4: 4/8]
GregCr 0:d5e61ad8edd9 30 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
GregCr 0:d5e61ad8edd9 31 #define LORA_FIX_LENGTH_PAYLOAD_ON false
GregCr 0:d5e61ad8edd9 32 #define LORA_IQ_INVERSION_ON false
GregCr 0:d5e61ad8edd9 33
GregCr 0:d5e61ad8edd9 34 SX1276MB1xAS Radio( NULL, NULL, NULL, NULL, NULL );
GregCr 0:d5e61ad8edd9 35
GregCr 0:d5e61ad8edd9 36 #if USE_LEDS
GregCr 0:d5e61ad8edd9 37 DigitalOut Led1( LED1 );
GregCr 0:d5e61ad8edd9 38 DigitalOut Led2( LED2 );
GregCr 0:d5e61ad8edd9 39 DigitalOut Led3( LED3 );
GregCr 0:d5e61ad8edd9 40 #else
GregCr 0:d5e61ad8edd9 41 bool Led1 = 0;
GregCr 0:d5e61ad8edd9 42 bool Led2 = 0;
GregCr 0:d5e61ad8edd9 43 bool Led3 = 0;
GregCr 0:d5e61ad8edd9 44 #endif
GregCr 0:d5e61ad8edd9 45
GregCr 0:d5e61ad8edd9 46 static Timeout LedTimer;
GregCr 0:d5e61ad8edd9 47 volatile bool Led1TimerEvent = false;
GregCr 0:d5e61ad8edd9 48 volatile bool Led2TimerEvent = false;
GregCr 0:d5e61ad8edd9 49 volatile bool Led3TimerEvent = false;
GregCr 0:d5e61ad8edd9 50
GregCr 0:d5e61ad8edd9 51 /*!
GregCr 0:d5e61ad8edd9 52 * \brief Function executed on Led 1 Timeout event
GregCr 0:d5e61ad8edd9 53 */
GregCr 0:d5e61ad8edd9 54 void OnLed1TimerEvent( void )
GregCr 0:d5e61ad8edd9 55 {
GregCr 0:d5e61ad8edd9 56 Led1TimerEvent = true;
GregCr 0:d5e61ad8edd9 57 }
GregCr 0:d5e61ad8edd9 58
GregCr 0:d5e61ad8edd9 59 /*!
GregCr 0:d5e61ad8edd9 60 * \brief Function executed on Led 2 Timeout event
GregCr 0:d5e61ad8edd9 61 */
GregCr 0:d5e61ad8edd9 62 void OnLed2TimerEvent( void )
GregCr 0:d5e61ad8edd9 63 {
GregCr 0:d5e61ad8edd9 64 Led2TimerEvent = true;
GregCr 0:d5e61ad8edd9 65 }
GregCr 0:d5e61ad8edd9 66
GregCr 0:d5e61ad8edd9 67 /*!
GregCr 0:d5e61ad8edd9 68 * \brief Function executed on Led 3 Timeout event
GregCr 0:d5e61ad8edd9 69 */
GregCr 0:d5e61ad8edd9 70 void OnLed3TimerEvent( void )
GregCr 0:d5e61ad8edd9 71 {
GregCr 0:d5e61ad8edd9 72 Led3TimerEvent = true;
GregCr 0:d5e61ad8edd9 73 }
GregCr 0:d5e61ad8edd9 74
GregCr 0:d5e61ad8edd9 75 void PrintLeds( )
GregCr 0:d5e61ad8edd9 76 {
GregCr 0:d5e61ad8edd9 77 #if !USE_LEDS
GregCr 0:d5e61ad8edd9 78 char charLed1 = ( Led1 == true ) ? '0' : 'x';
GregCr 0:d5e61ad8edd9 79 char charLed2 = ( Led2 == true ) ? '0' : 'x';
GregCr 0:d5e61ad8edd9 80 char charLed3 = ( Led3 == true ) ? '0' : 'x';
GregCr 0:d5e61ad8edd9 81 debug( "%c%c%c\r\n", charLed1, charLed2, charLed3 );
GregCr 0:d5e61ad8edd9 82 #endif
GregCr 0:d5e61ad8edd9 83 }
GregCr 0:d5e61ad8edd9 84
GregCr 0:d5e61ad8edd9 85 /**
GregCr 0:d5e61ad8edd9 86 * Main application entry point.
GregCr 0:d5e61ad8edd9 87 */
GregCr 0:d5e61ad8edd9 88 int main( void )
GregCr 0:d5e61ad8edd9 89 {
GregCr 0:d5e61ad8edd9 90 uint8_t TxOuputPower = 0;
GregCr 0:d5e61ad8edd9 91
GregCr 1:edbca7c3fbad 92 debug("\n\r\n\r SX1276 Continuous Wave at full power Demo Application \n\r");
GregCr 1:edbca7c3fbad 93
GregCr 1:edbca7c3fbad 94 #if defined TARGET_NUCLEO_L152RE
GregCr 1:edbca7c3fbad 95 debug(" > Nucleo-L152RE Platform <\r\n" );
GregCr 1:edbca7c3fbad 96 #elif defined TARGET_KL25Z
GregCr 1:edbca7c3fbad 97 debug(" > KL25Z Platform <\r\n" );
GregCr 1:edbca7c3fbad 98 #elif defined TARGET_LPC11U6X
GregCr 1:edbca7c3fbad 99 debug(" > LPC11U6X Platform <\r\n" );
GregCr 1:edbca7c3fbad 100 #else
GregCr 1:edbca7c3fbad 101 debug(" > Untested Platform <\r\n" );
GregCr 1:edbca7c3fbad 102 #endif
GregCr 1:edbca7c3fbad 103
GregCr 0:d5e61ad8edd9 104 /**********************************************/
GregCr 0:d5e61ad8edd9 105 /* WARNING */
GregCr 0:d5e61ad8edd9 106 /* The below settings can damage the chipset */
GregCr 0:d5e61ad8edd9 107 /* if wrongly used. DO NOT CHANGE THE VALUES! */
GregCr 0:d5e61ad8edd9 108 /* */
GregCr 0:d5e61ad8edd9 109 /**********************************************/
GregCr 0:d5e61ad8edd9 110
GregCr 0:d5e61ad8edd9 111 #if TEST_HF_OUTPUT == 1
GregCr 0:d5e61ad8edd9 112
GregCr 0:d5e61ad8edd9 113 if( Radio.DetectBoardType( ) == SX1276MB1LAS ) //
GregCr 0:d5e61ad8edd9 114 {
GregCr 1:edbca7c3fbad 115 debug("\r\n TEST_HF_OUTPUT on SX1276MB1LAS: 20 dBm at 915 MHz \r\n" );
GregCr 0:d5e61ad8edd9 116 Radio.SetChannel( 915000000 );
GregCr 0:d5e61ad8edd9 117 TxOuputPower = 14;
GregCr 0:d5e61ad8edd9 118 Radio.Write( 0x01, 0x80 );
GregCr 0:d5e61ad8edd9 119 Radio.Write( 0x44, 0x7B );
GregCr 0:d5e61ad8edd9 120 Radio.Write( 0x3D, 0xA1 );
GregCr 0:d5e61ad8edd9 121 Radio.Write( 0x36, 0x01 );
GregCr 0:d5e61ad8edd9 122 Radio.Write( 0x1e, 0x08 );
GregCr 0:d5e61ad8edd9 123 Radio.Write( 0x45, 0xDF );
GregCr 0:d5e61ad8edd9 124 Radio.Write( 0x46, 0x03 );
GregCr 0:d5e61ad8edd9 125 Radio.Write( 0x4D, 0x87 );
GregCr 0:d5e61ad8edd9 126 Radio.Write( 0x52, 0x60 );
GregCr 1:edbca7c3fbad 127
GregCr 1:edbca7c3fbad 128
GregCr 1:edbca7c3fbad 129 }
GregCr 1:edbca7c3fbad 130 else
GregCr 1:edbca7c3fbad 131 { // SX1276MB1MAS
GregCr 1:edbca7c3fbad 132 debug("\r\n TEST_HF_OUTPUT on SX1276MB1MAS: 14 dBm at 868 MHz \r\n" );
GregCr 1:edbca7c3fbad 133 Radio.SetChannel( 868000000 );
GregCr 1:edbca7c3fbad 134 TxOuputPower = 20;
GregCr 1:edbca7c3fbad 135 Radio.Write( 0x01, 0x88 );
GregCr 1:edbca7c3fbad 136 Radio.Write( 0x3D, 0xA1 );
GregCr 1:edbca7c3fbad 137 Radio.Write( 0x36, 0x01 );
GregCr 1:edbca7c3fbad 138 Radio.Write( 0x1e, 0x08 );
GregCr 0:d5e61ad8edd9 139 }
GregCr 0:d5e61ad8edd9 140
GregCr 0:d5e61ad8edd9 141 #elif TEST_LF_OUTPUT == 1
GregCr 0:d5e61ad8edd9 142
GregCr 1:edbca7c3fbad 143 debug("\r\n TEST_LF_OUTPUT on SX1276MB1xAS: 14 dBm at 434 MHz \r\n" );
GregCr 0:d5e61ad8edd9 144 Radio.SetChannel( 433000000 );
GregCr 0:d5e61ad8edd9 145 TxOuputPower = 14;
GregCr 0:d5e61ad8edd9 146 Radio.Write( 0x01, 0x88 );
GregCr 0:d5e61ad8edd9 147 Radio.Write( 0x3D, 0xA1 );
GregCr 0:d5e61ad8edd9 148 Radio.Write( 0x36, 0x01 );
GregCr 0:d5e61ad8edd9 149 Radio.Write( 0x1e, 0x08 );
GregCr 0:d5e61ad8edd9 150
GregCr 0:d5e61ad8edd9 151 #endif
GregCr 0:d5e61ad8edd9 152
GregCr 0:d5e61ad8edd9 153 Radio.SetTxConfig( MODEM_LORA, TxOuputPower, 0, LORA_BANDWIDTH,
GregCr 0:d5e61ad8edd9 154 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
GregCr 0:d5e61ad8edd9 155 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
GregCr 0:d5e61ad8edd9 156 true, LORA_IQ_INVERSION_ON, 3000000 );
GregCr 0:d5e61ad8edd9 157
GregCr 0:d5e61ad8edd9 158 // Switch LED 1 ON
GregCr 0:d5e61ad8edd9 159 Led1 = 1;
GregCr 0:d5e61ad8edd9 160 LedTimer.attach_us( OnLed1TimerEvent, 90000 );
GregCr 0:d5e61ad8edd9 161
GregCr 0:d5e61ad8edd9 162 // Sets the radio in Tx mode
GregCr 0:d5e61ad8edd9 163 Radio.Send( NULL, 0 );
GregCr 0:d5e61ad8edd9 164
GregCr 0:d5e61ad8edd9 165 debug( "Start main loop: \r\n" );
GregCr 0:d5e61ad8edd9 166 // Blink LEDs just to show some activity
GregCr 0:d5e61ad8edd9 167 while( 1 )
GregCr 0:d5e61ad8edd9 168 {
GregCr 0:d5e61ad8edd9 169 if( Led1TimerEvent == true )
GregCr 0:d5e61ad8edd9 170 {
GregCr 0:d5e61ad8edd9 171 Led1TimerEvent = false;
GregCr 0:d5e61ad8edd9 172
GregCr 0:d5e61ad8edd9 173 // Switch LED 1 OFF
GregCr 0:d5e61ad8edd9 174 Led1 = 0;
GregCr 0:d5e61ad8edd9 175 // Switch LED 2 ON
GregCr 0:d5e61ad8edd9 176 Led2 = 1;
GregCr 0:d5e61ad8edd9 177
GregCr 0:d5e61ad8edd9 178 LedTimer.attach_us( OnLed2TimerEvent, 90000 );
GregCr 0:d5e61ad8edd9 179 PrintLeds( );
GregCr 0:d5e61ad8edd9 180 }
GregCr 0:d5e61ad8edd9 181
GregCr 0:d5e61ad8edd9 182 if( Led2TimerEvent == true )
GregCr 0:d5e61ad8edd9 183 {
GregCr 0:d5e61ad8edd9 184 Led2TimerEvent = false;
GregCr 0:d5e61ad8edd9 185
GregCr 0:d5e61ad8edd9 186 // Switch LED 2 OFF
GregCr 0:d5e61ad8edd9 187 Led2 = 0;
GregCr 0:d5e61ad8edd9 188 // Switch LED 3 ON
GregCr 0:d5e61ad8edd9 189 Led3 = 1;
GregCr 0:d5e61ad8edd9 190
GregCr 0:d5e61ad8edd9 191 LedTimer.attach_us( OnLed3TimerEvent, 90000 );
GregCr 0:d5e61ad8edd9 192 PrintLeds( );
GregCr 0:d5e61ad8edd9 193 }
GregCr 0:d5e61ad8edd9 194
GregCr 0:d5e61ad8edd9 195 if( Led3TimerEvent == true )
GregCr 0:d5e61ad8edd9 196 {
GregCr 0:d5e61ad8edd9 197 Led3TimerEvent = false;
GregCr 0:d5e61ad8edd9 198
GregCr 0:d5e61ad8edd9 199 // Switch LED 3 OFF
GregCr 0:d5e61ad8edd9 200 Led3 = 0;
GregCr 0:d5e61ad8edd9 201 // Switch LED 1 ON
GregCr 0:d5e61ad8edd9 202 Led1 = 1;
GregCr 0:d5e61ad8edd9 203
GregCr 0:d5e61ad8edd9 204 LedTimer.attach_us( OnLed1TimerEvent, 90000 );
GregCr 0:d5e61ad8edd9 205 PrintLeds( );
GregCr 0:d5e61ad8edd9 206 }
GregCr 0:d5e61ad8edd9 207 }
GregCr 0:d5e61ad8edd9 208 }
GregCr 0:d5e61ad8edd9 209