RFM70 utilising the RSSI feature(access Reg.Bank?)

I have been looking on in here >> http://www.hoperf.com/upload/rf/RFM70.pdf to utilise the Register Bank 1 to get the RSSI feed ? haven't seen any example to do the same.

Any examples? code snippets to do the same?

This is the working code:

#include "RFM70.h"

RFM70class RFM70;

byte RFM70_buf[MAX_PACKET_LEN];  //RFM70 data buffer
unsigned long RFMSendTime = 0;   //next send time
int RFMSendSpeed=1000;           //send packet every 1000 msec


void setup()
{
    Serial.begin(57600);  
    Serial.println("Arduino Start");    
    RFM70.begin();
    RFM70.Initialize();
    RFMSendTime = millis();
  
} 

void loop()
{
    rfmTask();                                    //check for RFM70 event in polling mode
    if (millis() > RFMSendTime)                   //send packet
    {                                                    
      RFMSendTime = millis() + RFMSendSpeed; 
      RFM70_buf[0]=0X41;      
      RFM70_buf[1]=0X42;
      RFM70_buf[2]=0X43;
      RFM70_buf[3]=0X44;      
      RFM70.Send_Packet(WR_TX_PLOAD,RFM70_buf,4);
      Serial.println("Sending data");       
    }  
}

void rfmTask()                //RFM70 event handler
{
  if (RFM70.RfmInterrupt())
  {
    if (RFM70.TxDataSentInterrupt())
    {
       Serial.println("Data sent OK");
       RFM70.SwitchToRxMode();
    }
    if (RFM70.TxDataSentErrorInterrupt())
    {
       Serial.println("Data sent error");
       RFM70.SwitchToRxMode();
    }
    if (RFM70.RxDataReadyInterrupt())
    {
       Serial.println("Data received: ");
       byte rx_len = RFM70.Receive_Packet(RFM70_buf);
       if (rx_len) 
       {
          for(byte i=1;i<rx_len;i++)
          {
            Serial.print(i);
            Serial.print("->");
            Serial.println(RFM70_buf[i]);
          }         
       }    
     }
  }
}

what assertions should be there added in the code to make it read RSSI??

AnyONe folks?, Im exhausted?

You got any luck so far?

Didn't do it, instead got nordic!

void rfm70_setRSSI( unsigned char val, unsigned char enabled ){
   unsigned char j;
   unsigned char WriteArr[ 12 ];

   unsigned long mask=0xA67F0600;
   if (enabled>0)
       mask=0xA67F0200;
   if (val>15)
       val=15;

   mask+=(val<<2);

   rfm70_bank(1);

   for( j = 0; j < 4; j++ ){
     WriteArr[ j ]=( mask>>(8*(j) ) )&0xff;
   }
   rfm70_buffer_write( 5 ,WriteArr, 4 );
   rfm70_bank(0);
}

val = RSSI Treshold for CD detect [0-15]
enabled = RSSI measurment [0-1]

Uses these 2 functions

void rfm70_bank( unsigned char b ){
   unsigned char st = 0x80 & rfm70_register_read( RFM70_REG_STATUS );
   if(( st &&( b == 0 )) || (( st == 0 ) && b )){
      rfm70_register_write( RFM70_CMD_ACTIVATE, 0x53 );
   }
}
void rfm70_buffer_write(
   char reg,
   const unsigned char *pBuf,
   unsigned char length
){
   unsigned char i;
   if( reg < RFM70_CMD_WRITE_REG ){
      reg |= RFM70_CMD_WRITE_REG;
   }
   RFM70_CSN( 0 );                     // Set CSN low, init SPI tranaction
   (void)rfm70_SPI_RW( reg );         // Select register to write tio write
   for( i = 0; i < length; i++ ){      // write all bytes in buffer(*pBuf)
      (void)rfm70_SPI_RW( *pBuf++ );  // write one byte
   }
   RFM70_CSN( 1 );                     // Set CSN high again
}

Cheers :slight_smile: