LowPowerLab Forum

Software support => Wireless Programming (aka OTA) => Topic started by: huuchinh02 on October 14, 2015, 10:10:04 PM

Title: RFM69 - Relation bitrates, frequency deviation and RxBw
Post by: huuchinh02 on October 14, 2015, 10:10:04 PM
Hello every one,

I am studying with RFM69HCW. My devices transmited and received data together, but it drop some packet when rx mode.
Example: I have a transmiter and receiver, I set transmiter every t (ms) send a packet. I get result in below:

     t(ms)                      Tx counter                                 Rx Counter
      512                            1200                                         1191
      256                            2000                                         1989
      128                          10000                                         9953
      64                            20000                                       19788
      32                            50000                                       49465
      16                            50000                                       49442

I don't want this losting data, I think that reason config bitrate, frequency deviation and RxBw
Any help make me appreciate, Tks!
Title: Re: RFM69 - Relation bitrates, frequency deviation and RxBw
Post by: Felix on October 14, 2015, 10:15:27 PM
Hi, can you give more detail?
What library, settings and hardware are you using with your HCW?
Title: Re: RFM69 - Relation bitrates, frequency deviation and RxBw
Post by: huuchinh02 on October 14, 2015, 10:34:56 PM
I use library of lowpower lab

Using MCU stm32f103
DIO0 connect interrupt MCU

my code configuration


Rfm69h_Write(RFM69H_FIFO_ACCESS,0x00);
  /* Operation mode */
  Rfm69h_Write(RFM69H_OPERATING_MODE,RF_OPMODE_SEQUENCER_ON | RF_OPMODE_LISTEN_OFF | RF_OPMODE_STANDBY);
  Rfm69h_Write(RFM69H_DATA_MODULE,RF_DATAMODUL_DATAMODE_PACKET | RF_DATAMODUL_MODULATIONTYPE_FSK | RF_DATAMODUL_MODULATIONSHAPING_00);
  Rfm69h_Write(RFM69H_BITRATE_MSB,RF_BITRATEMSB_100000);
  Rfm69h_Write(RFM69H_BITRATE_LSB,RF_BITRATELSB_100000);
  /* Frequency Deviation */
  Rfm69h_Write(RFM69H_FREQUENCY_DEVIATION_MSB,RF_FDEVMSB_280000);
  Rfm69h_Write(RFM69H_FREQUENCY_DEVIATION_LSB,RF_FDEVLSB_280000);
  /* Frequency bandwidth */
  Rfm69h_Write(RFM69H_FREQUENCY_RF_MSB,RF_FRFMSB_868);
  Rfm69h_Write(RFM69H_FREQUENCY_RF_MID,RF_FRFMID_868);
  Rfm69h_Write(RFM69H_FREQUENCY_RF_LSB,RF_FRFLSB_868);

  Rfm69h_Write(RFM69H_LNA_SETTING, (Rfm69h_Read(RFM69H_LNA_SETTING)& 0x7F) | RF_LNA_ZIN_50);
  /* Power RF */
  Rfm69h_Write(RFM69H_PA_LEVEL_POWER_CONTROL,RF_PALEVEL_OUTPUTPOWER_11101 | RF_PALEVEL_PA0_OFF | RF_PALEVEL_PA1_ON |RF_PALEVEL_PA2_ON);
 
  // RXBW defaults are { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_5} (RxBw: 10.4KHz)
  Rfm69h_Write(RFM69H_CHANNEL_FILTTER_BW,RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_20 | RF_RXBW_EXP_0);  // BitRate < 2*RxBw
  /* DIO mapping */
  Rfm69h_Write(RFM69H_DIO_MAPPING_1,RF_DIOMAPPING1_DIO0_01); /* DIO0 - interrupt TX-RX mode */
  Rfm69h_Write(RFM69H_DIO_MAPPING_2,RF_DIOMAPPING2_CLKOUT_OFF); /* DIO5 - OFF */

  /* writing to this bit ensures that the FIFO & status flags are reset */
  Rfm69h_Write(RFM69H_IRQ_FLAGS_2,RF_IRQFLAGS2_FIFOOVERRUN);
  Rfm69h_Write(RFM69H_RSSI_THRESHOLD_CONTROL,0xD2);
 
  /* Preamble Size */
  Rfm69h_Write(RFM69H_PREAMBLE_LENGTH_MSB,0x00);
  Rfm69h_Write(RFM69H_PREAMBLE_LENGTH_LSB,0x05); /* 5 bytes preamble */
 
  /* Sync word config */
  Rfm69h_Write(RFM69H_SYNC_WORD_CONFIG,RF_SYNC_ON | RF_SYNC_FIFOFILL_AUTO | RF_SYNC_SIZE_4 | RF_SYNC_TOL_0);
  Rfm69h_Write(RFM69H_SYNC_WORD_VALUE_BYTE_1,'A');
  Rfm69h_Write(RFM69H_SYNC_WORD_VALUE_BYTE_2,'C');
  Rfm69h_Write(RFM69H_SYNC_WORD_VALUE_BYTE_3,'I');
  Rfm69h_Write(RFM69H_SYNC_WORD_VALUE_BYTE_4,'S');
 
  /* Packet 1 config */
  Rfm69h_Write(RFM69H_PACKET_CONFIG_1,RF_PACKET1_FORMAT_FIXED | RF_PACKET1_DCFREE_OFF | RF_PACKET1_CRC_ON | RF_PACKET1_CRCAUTOCLEAR_ON | RF_PACKET1_ADRSFILTERING_OFF);
 
  /* Lenth data transmission */
  Rfm69h_Write(RFM69H_PAYLOAD_LENGTH,RF_DATA_LEN);

  Rfm69h_Write(RFM69H_FIFO_THRESHOLD,RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY | RF_DATA_LEN);
 
  /* Packet 2 config */
  Rfm69h_Write(RFM69H_PACKET_CONFIG_2,RF_PACKET2_RXRESTARTDELAY_2BITS | RF_PACKET2_AUTORXRESTART_ON | RF_PACKET2_AES_OFF);
 
  Rfm69h_Write(RFM69H_TEST_LNA,RF_TESTLNA_HIGH_SENSITIVITY);
 
  Rfm69h_Write(RFM69H_FADING_MARGIN_IMPROVEMENT,RF_DAGC_IMPROVED_LOWBETA0);

  /* Set RX mode to ready receiving data */
  Rfm69h.ToRxMode=true;




//////*Interrupt program*/////////
void RFM69H_ISR(void)
{
  RF_DataTypeDef tmp;
 
  volatile uint8_t status1;
  volatile uint8_t status2;
  uint8_t iCount;
 
  status1=Rfm69h_Read(RFM69H_IRQ_FLAGS_1);
  status2=Rfm69h_Read(RFM69H_IRQ_FLAGS_2);
 
  /* Send data */
  if(status2 & RF_IRQFLAGS2_PACKETSENT)
  {
    RFM69H_ClearTxBusy();/* Module is not busy */
    Rfm69h.ToRxMode=true;/* back again RX mode */
    /* Calc time */
    LED_Off(LED1);
    Time=TO_GetCurrentTime()-Time;
    TxCnt++;
  }

 
  /* Received data */ 
  if((status1 & RF_IRQFLAGS1_SYNCADDRESSMATCH) &&
     (status2 & RF_IRQFLAGS2_PAYLOADREADY) && /* detected data */
     (status2 & RF_IRQFLAGS2_CRCOK) /* CRC ok */
    )
  {
    for(iCount=0; iCount<sizeof(tmp); iCount++)
    {
      *((uint8_t *)&tmp+iCount)= Rfm69h_Read(RFM69H_FIFO_ACCESS);
    }
    StoreRx(tmp);
    Rfm69h.ToRxMode=true;/* back again RX mode */
    LED_Toggle(LED1);
    RxCnt++;
  }
}