rfm69hcw frequency calculator

Datasheet
.
FXOSC | always 32 Mhz | Crystal oscillator frequency | int value
FSTEP | always 61 hz | FSTEP = FXOSC / ( 2 ^ 19 ) | int value
.
Reg0 | RegFrfMsb (0x07) | MSB of the RF carrier frequency | 8-bit hex value
Reg1 | RegFrfMid (0x08) | Middle byte of the RF carrier frequency | 8-bit hex value
Reg2 | RegFrfLsb (0x09) | LSB of the RF carrier frequency | 8-bit hex value
.
Frf = Fstep ⋅ Frf(23;0)

Frf =

/*****************************************************************/
#include
#include
#include

#define FXOSC 32000000
// #define FSTEPdiv 524288

uint32_t rfm_freq(uint8_t reg0, uint8_t reg1, uint8_t reg2)
{
 uint8_t FSTEP;

 uint32_t FSTEPdiv, RegsBigEndian, frequency;

 FSTEPdiv = pow(2,19);
 FSTEP = FXOSC / FSTEPdiv;

 RegsBigEndian = (reg0 << 16) | (reg1 << 8) | reg2;

 frequency = FSTEP * RegsBigEndian;

 return frequency;
}

void main(void)
{
 uint8_t reg0, reg1, reg2;

 // 433.92 MHz
 reg0 = 0x6C;
 reg1 = 0x5C;
 reg2 = 0xA0;

 printf("%d\n", rfm_freq(reg0, reg1, reg2));
}
/*****************************************************************/