Noticed this feature.
Poor working module, which is initialized to the first.
void setup() {
Serial.begin(SERIAL_BAUD);
delay(10);
if (radio2.initialize(FREQUENCY,NODEID_2,NETWORKID))
Serial.println("Second RFM69 OK");
if (radio1.initialize(FREQUENCY,NODEID_1,NETWORKID))
Serial.println("First RFM69 OK");
radio1.encrypt(ENCRYPTKEY);
radio2.encrypt(ENCRYPTKEY);
radio1.promiscuous(promiscuousMode);
radio2.promiscuous(promiscuousMode);
}
Result:
Second RFM69 OK
First RFM69 OK
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 2 RFM... Fail
Send From 2 RFM... Fail
Send From 2 RFM... Fail
Send From 2 RFM... Fail
Send From 2 RFM... Fail
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 1 RFM... ok!
Send From 2 RFM... Fail
Send From 1 RFM... ok!
Send From 1 RFM... ok!
void setup() {
Serial.begin(SERIAL_BAUD);
delay(10);
if (radio1.initialize(FREQUENCY,NODEID_1,NETWORKID))
Serial.println("First RFM69 OK");
if (radio2.initialize(FREQUENCY,NODEID_2,NETWORKID))
Serial.println("Second RFM69 OK");
radio1.encrypt(ENCRYPTKEY);
radio2.encrypt(ENCRYPTKEY);
radio1.promiscuous(promiscuousMode);
radio2.promiscuous(promiscuousMode);
}
Result:
First RFM69 OK
Second RFM69 OK
Send From 1 RFM... Fail
Send From 1 RFM... Fail
Send From 1 RFM... Fail
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 1 RFM... Fail
Send From 2 RFM... ok!
Send From 2 RFM... ok!
Send From 1 RFM... Fail
Also, if you first sending with a "bad" (for the current firmware) RFM69 and then sending with a "good" (for the current firmware) RFM69 will be a delay.
Then, at a constant parcels with good RFM69 no delay.
For example:
First RFM69 OK
Second RFM69 OK
Send From 1 RFM... !!!no delay!!! Fail
Send From 2 RFM... !!!delay!!! ok!
Send From 2 RFM... !!!no delay!!! ok!
Send From 2 RFM... !!!no delay!!! ok!
Send From 1 RFM... !!!no delay!!! Fail
Send From 2 RFM... !!!delay!!! ok!
UPDATE:New result:
If you send a "good" RFM69. That comes ACK.
If bad, then there is no ACK.
Sender result:
Second RFM69 OK
First RFM69 OK
Send From 1 RFM... ok!
Send From 2 RFM... Fail
Receiver result:
[1] 123 A [RX_RSSI:-34] - ACK sent
[2] 123 A [RX_RSSI:-39] - ACK sent
[2] 123 A [RX_RSSI:-40] - ACK sent
[2] 123 A [RX_RSSI:-40] - ACK sent
Conclusions:Homemade board -> Moteino:With the RFM69 initialized last all is well.
With the first RFM69 initialized no ACK.
Moteino->Homemade board:With the RFM69 initialized last, sending only occurs the first time. In this Atmega does not froze.
With the first RFM69 initialized not take anything.
UPDATE 2:The problem is interrupted.
I corrected the library:
bool RFM69::initialize(byte freqBand, byte nodeID, byte networkID)
{
...
if (_slaveSelectPin == 10)
Serial.print("[1]: ");
else if (_slaveSelectPin == 17)
Serial.print("[2]: ");
return true;
...
}
void RFM69::setMode(byte newMode)
{
if (newMode == _mode) return; //TODO: can remove this?
if (_slaveSelectPin == 10)
Serial.print("[1]: ");
else if (_slaveSelectPin == 17)
Serial.print("[2]: ");
switch (newMode) {
case RF69_MODE_TX:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_TRANSMITTER);
if (_isRFM69HW) setHighPowerRegs(true);
Serial.println("MODE_TX");
break;
case RF69_MODE_RX:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_RECEIVER);
if (_isRFM69HW) setHighPowerRegs(false);
Serial.println("MODE_RX");
break;
case RF69_MODE_SYNTH:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_SYNTHESIZER);
Serial.println("MODE_SYNTH");
break;
case RF69_MODE_STANDBY:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_STANDBY);
Serial.println("MODE_STANDBY");
break;
case RF69_MODE_SLEEP:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_SLEEP);
Serial.println("MODE_SLEEP");
break;
default: return;
}
void RFM69::interruptHandler() {
if (_slaveSelectPin == 10)
Serial.print("[1]: ");
else if (_slaveSelectPin == 17)
Serial.print("[2]: ");
if (_mode == RF69_MODE_RX && (readReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PAYLOADREADY))
{
...
Serial.println(" interrupt ok");
}
Serial.println("interrupt");
RSSI = readRSSI();
}
void setup() {
Serial.begin(SERIAL_BAUD);
delay(10);
if (radio1.initialize(FREQUENCY,NODEID_1,NETWORKID))
Serial.println("First RFM69 OK");
if (radio2.initialize(FREQUENCY,NODEID_2,NETWORKID))
Serial.println("Second RFM69 OK");
Serial.println();
radio1.encrypt(ENCRYPTKEY);
radio2.encrypt(ENCRYPTKEY);
radio1.promiscuous(promiscuousMode);
radio2.promiscuous(promiscuousMode);
}
Result[1]: First RFM69 OK
[2]: Second RFM69 OK
Send From 1 RFM...
[1]: MODE_RX
[1]: MODE_STANDBY
[1]: MODE_TX
[2]: interrupt
[1]: MODE_STANDBY
Send From 1 RFM...
[1]: MODE_RX
[1]: MODE_STANDBY
[1]: MODE_TX
[2]: interrupt
[1]: MODE_STANDBY
Send From 2 RFM...
[2]: MODE_RX
[2]: MODE_STANDBY
[2]: MODE_TX
[2]: interrupt
[2]: MODE_STANDBY
Send From 2 RFM...
[2]: MODE_RX
[2]: MODE_STANDBY
[2]: MODE_TX
[2]: interrupt
[2]: MODE_STANDBY
[1] 123 A [RX_RSSI:-29]
[1] 123 A [RX_RSSI:-30]
[2] 123 A [RX_RSSI:-35]
[2] 123 A [RX_RSSI:-35]
Interrupt is triggered at the RFM69 which last initialized.What to do?