Skip to content

Commit f9f4cde

Browse files
update example sender
1 parent 9b5088b commit f9f4cde

File tree

4 files changed

+91
-34
lines changed

4 files changed

+91
-34
lines changed

examples/LoRa/OLED_LoRa_Sender/OLED_LoRa_Sender.ino

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#include "heltec.h"
2121
#include "images.h"
2222

23-
#define BAND 433E6 //you can set band here directly,e.g. 868E6,915E6
23+
#define BAND 868E6 //you can set band here directly,e.g. 868E6,915E6
2424

2525
unsigned int counter = 0;
2626
String rssi = "RSSI --";
@@ -63,6 +63,9 @@ void loop()
6363

6464
// send packet
6565
LoRa.beginPacket();
66+
67+
//LoRa.setTxPower(txPower,RFOUT_pin);RFOUT_pin could be RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO, this board only support RF_PACONFIG_PASELECT_PABOOST
68+
LoRa.setTxPower(14,RF_PACONFIG_PASELECT_PABOOST);
6669
LoRa.print("hello ");
6770
LoRa.print(counter);
6871
LoRa.endPacket();
@@ -72,4 +75,4 @@ void loop()
7275
delay(1000); // wait for a second
7376
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
7477
delay(1000); // wait for a second
75-
}
78+
}

examples/LoRa/OLED_LoRa_Sender/images.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,7 @@ const char inactiveSymbol[] PROGMEM = {
9595
B00000000,
9696
B00000000
9797
};
98+
99+
//Added by Sloeber
100+
#pragma once
101+

src/lora/LoRa.cpp

Lines changed: 61 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#define IRQ_PAYLOAD_CRC_ERROR_MASK 0x20
4848
#define IRQ_RX_DONE_MASK 0x40
4949

50+
5051
#define MAX_PKT_LENGTH 255
5152

5253
LoRaClass::LoRaClass() :
@@ -277,37 +278,66 @@ void LoRaClass::sleep()
277278
writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_SLEEP);
278279
}
279280

280-
void LoRaClass::setTxPower(int level, int outputPin)
281-
{
282-
if (PA_OUTPUT_RFO_PIN == outputPin)
283-
{
284-
// RFO
285-
if (level < -1) {
286-
level = -1;
287-
}
288-
else if (level > 14){
289-
level = 14;
290-
}
291-
writeRegister(REG_PaDac,0x84);
292-
writeRegister(REG_PA_CONFIG, RFO | (level + 1));
293-
//spiWrite(RH_RF95_REG_09_PA_CONFIG, RH_RF95_MAX_POWER | (power + 1));
294-
// writeRegister(REG_PA_CONFIG, RFO | level);
295-
}
296-
297-
else {
298-
// PA BOOST
299-
if (level < 2)
300-
{
301-
level = 2;
302-
}
303-
else if (level > 17)
304-
{
305-
level = 17;
306-
}
307-
//writeRegister(REG_LR_OCP,0x3f);
308-
writeRegister(REG_PaDac,0x87);
309-
writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2));//writeRegister(REG_PA_CONFIG, PA_BOOST | (level - 2))
310-
}
281+
void LoRaClass::setTxPower(int8_t power, int8_t outputPin)
282+
{
283+
uint8_t paConfig = 0;
284+
uint8_t paDac = 0;
285+
286+
paConfig = readRegister( REG_PA_CONFIG );
287+
paDac = readRegister( REG_PaDac );
288+
289+
paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | outputPin;
290+
paConfig = ( paConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
291+
292+
if( ( paConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
293+
{
294+
if( power > 17 )
295+
{
296+
paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_ON;
297+
}
298+
else
299+
{
300+
paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_OFF;
301+
}
302+
if( ( paDac & RF_PADAC_20DBM_ON ) == RF_PADAC_20DBM_ON )
303+
{
304+
if( power < 5 )
305+
{
306+
power = 5;
307+
}
308+
if( power > 20 )
309+
{
310+
power = 20;
311+
}
312+
paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
313+
}
314+
else
315+
{
316+
if( power < 2 )
317+
{
318+
power = 2;
319+
}
320+
if( power > 17 )
321+
{
322+
power = 17;
323+
}
324+
paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
325+
}
326+
}
327+
else
328+
{
329+
if( power < -1 )
330+
{
331+
power = -1;
332+
}
333+
if( power > 14 )
334+
{
335+
power = 14;
336+
}
337+
paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
338+
}
339+
writeRegister( REG_PA_CONFIG, paConfig );
340+
writeRegister( REG_PaDac, paDac );
311341
}
312342

313343
void LoRaClass::setTxPowerMax(int level)

src/lora/LoRa.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,26 @@
1111
#define PA_OUTPUT_PA_BOOST_PIN 1
1212
#define PA_OUTPUT_RFO_PIN 0
1313

14+
/*!
15+
* RegPaConfig
16+
*/
17+
#define RF_PACONFIG_PASELECT_MASK 0x7F
18+
#define RF_PACONFIG_PASELECT_PABOOST 0x80
19+
#define RF_PACONFIG_PASELECT_RFO 0x00 // Default
20+
21+
#define RF_PACONFIG_MAX_POWER_MASK 0x8F
22+
23+
#define RF_PACONFIG_OUTPUTPOWER_MASK 0xF0
24+
25+
/*!
26+
* RegPaDac
27+
*/
28+
#define RF_PADAC_20DBM_MASK 0xF8
29+
#define RF_PADAC_20DBM_ON 0x07
30+
#define RF_PADAC_20DBM_OFF 0x04 // Default
31+
32+
33+
1434
#if defined (__STM32F1__)
1535
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
1636
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value
@@ -47,7 +67,7 @@ class LoRaClass : public Stream {
4767
void idle();
4868
void sleep();
4969

50-
void setTxPower(int level, int outputPin);
70+
void setTxPower(int8_t power, int8_t outputPin);
5171
void setTxPowerMax(int level);
5272
void setFrequency(long frequency);
5373
void setSpreadingFactor(int sf);

0 commit comments

Comments
 (0)