// ******************************************** HARDWARE IMPORTANT******************************************************** // With an Arduino UN0/Nano : uses a resistive divider to reduce the voltage: // MOSI (pin 11) to ADF DATA // SCK (pin13) to ADF CLK // Select (PIN 3) to ADF LE // // Resistive divider 560 Ohm with 1000 Ohm to ground on Arduino pins 11, 13 et 3 to adapt from 5V // to 3.3V the digital signals DATA, CLK and LE send by the Arduino. // // Arduino pin 2 (for lock detection) directly connected to ADF4351 card MUXOUT. // The ADF card is 5V powered by the ARDUINO // ******************************************** HARDWARE IMPORTANT******************************************************** #include #define ADF4351_LE 3 #define LOCK 2 uint32_t registers[6] = {0x4E0358, 0x80087D1, 0x4E42, 0x4B3, 0x8C803C, 0x580005} ; // 3910 MHz with 25MHz ref double RFout, REFin, PFDRFout, OutputChannelSpacing, FRACF; unsigned int long RFint,RFintold, INTA, MOD, FRAC; int modif = 0; byte OutputDivider; void WriteRegister32(const uint32_t value) //Programme un registre 32bits { digitalWrite(ADF4351_LE, LOW); for (int i = 3; i >= 0; i--) // loop round 4 x 8bits SPI.transfer((value >> 8 * i) & 0xFF); // offset, byte mask and send via SPI digitalWrite(ADF4351_LE, HIGH); digitalWrite(ADF4351_LE, LOW); } void SetADF4351() // bung the data into the ADF4351 { for (int i = 5; i >= 0; i--) WriteRegister32(registers[i]); } void SerialPrintRegisters() { for (int i = 0; i <=5; i++) { Serial.print("Register "); Serial.print(i); Serial.print(" "); Serial.print(registers[i],HEX); Serial.print(" "); } Serial.println(); } void setup() { Serial.begin (9600); pinMode(LOCK,INPUT); pinMode(ADF4351_LE, OUTPUT); // Setup pins digitalWrite(ADF4351_LE, HIGH); SPI.begin(); // Init SPI bus SPI.setDataMode(SPI_MODE0); // CPHA = 0 et Clock positive SPI.setBitOrder(MSBFIRST); // poids forts en tête } void loop() { delay (2000); SetADF4351(); // Programme tous les registres de l'ADF4351 SerialPrintRegisters(); }