Controlando un Synthesizer ADF4351

Este es mi primera intervención en el un foro y sepan disculpar si no lo ago de forma correcto o cometo errores.
Ase tiempo comencé a jugar con los Arduino y me parecieron interesante no tengo muchos conocimiento de programación y tampoco de electrónica lo que se lo aprendí fue en la Internet y amigos que me fueron enseñando
Estoy precisando ayuda para interpretar un código de una librería que encotre para manejar el ADF4350 pero no funciona correctamente adema preciso modificar un poco para usarla con el ADF4351 tiene muy pocas diferencias
El codigo original GitHub - JQIamo/ADF4350-arduino: Arduino library for interfacing with Analog Devices ADF4350 (and similar) PLL chips.
Una parte no la entiendo la otra descubre y lo comente a mi modo

void ADF4350::setR1(){
    unsigned long r1 =   (_phase << 15) + // phase value = 1
                          (2 << 3) + // modulus value = 1
                            1; // register value
    byte r1Ary[] = { lowByte(r1 >> 24), lowByte(r1 >> 16), lowByte(r1 >> 8), lowByte(r1) };
    memcpy(&_r1, &r1Ary, sizeof(r1Ary));// copia el contenido de r1Ary en _r1 memcpy(destino ,origen ,lardo) con sizeof() se obtiene el largo
}

Supongo que es una tontería pero para mi no

Lo has explicado correctamente.
No has explicado las diferencias entre los dos chips.
Cuales son las correcciones que debes hacer?

Surbyte gracias por tu atención y tiempo
Las diferencias son pocas son unos pocos bit que en vedad no afectan, el código tal cual debería funcionar
Creo que entendí que es lo que hace el código que prepara el registro de configuración
El ejemplo siguiente es con el registro 5 de configuración que es de 32 bit y solo se precisan definir 2 bit de configuración y 3 de control

Lo estándar es que active la salida (LD)en 1 cuando enganche el PLL debería quedar configurado como 01 y los bit de control como 101 que identifica el registro tambien los bit 20,19 deberían quedar en 1

El código original

void ADF4350::setR5()
{

    unsigned long r5 = (1 << 22) + (3<<19) + 5; // lock detect pin mode = digital lock detect
   byte r5Ary[] = { lowByte(r5 >> 24), lowByte(r5 >> 16), lowByte(r5 >> 8), lowByte(r5) };
   memcpy(&_r5, &r5Ary, sizeof(r5Ary));

}

Pero
Esta línea no hace lo que creo que debería hacer
unsigned long r5 = (1 << 22) + (3<<19) + 5;

Rota uno 22 lugares =10000000000000000000000
Rota el 3 19 lugares =110000000000000000000
y 5 =101
La suma quedaría como
10110000000000000000101
Pero no es así

Arme un programita para probar

void setup() 
{
Serial.begin(9600);
}
void loop() 
{
unsigned long r7 = (1<<15) ; // lock detect pin mode = digital lock detect
   Serial.println(r7,BIN);
}

Los resudados
(1<<14) Me devuelve 100000000000000
(1<<15) Me devuelve 11111111111111111000000000000000
(1<<16) Me devuelve 0

Y funciona pero con menos de 16 bit con mayores a 16 no funciona
Pero según la referencia de Arduino debería funcionar

Estoy tratando de encontrarle la vueltas

No lo he probado en arduino, pero en simulador me da el resulstado esperado.
¿Qué versión del IDE estás utilizando?
De todas formas prueba a ver si así cambia la cosa:

unsigned long r7 = (1UL<<15) ; // lock detect pin mode = digital lock detect

Noter
Muchas gracias
Con tu ayuda pude resolver el problema de la rotación con 32bit
Por las dudas comento
Estoy con la versión 1.6.7