MAXREFDES161# is a high-performance frequency synthesizer capable of generating frequencies from 23.5MHz to 6GHz. The on-board level translators allow the board to be compatible with +3.3V and +5V microcontroller platforms. Moreover, the low-noise low dropout regulators (LDOs) provide clean power supplies for optimal performance. The board is designed specifically for the Arduino form-factor pinout.
Diff: main.cpp
- Revision:
- 0:69e25b5e9580
diff -r 000000000000 -r 69e25b5e9580 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jul 30 14:19:56 2018 +0000 @@ -0,0 +1,76 @@ +#include "mbed.h" +#include <stdio.h> + +#include "MAX2871.h" + +int main() { + +#define D6 P0_6 +#define D8 P1_4 +#define D9 P1_5 +#define D10 P1_3 +#define D11 P1_1 +#define D12 P1_2 +#define D13 P1_0 + + + SPI spi(D11,D12,D13); //mosi, miso, sclk + Serial pc(USBTX,USBRX,9600); //tx, rx, baud + + DigitalOut le(D10,1); //Latch enable pin for MAX2871 + DigitalIn ld(D6); //Lock detect output pin + DigitalOut led(LED_BLUE,1); //blue LED on MAX32600MBED board + + DigitalOut rfouten(D8,1); //RF output enable pin + DigitalOut ce(D9,1); //Chip enable pin + + double freq_entry; //variable to store user frequency input + char buffer[256]; //array to hold string input from terminal + + double v_tune, temperature; //stores TUNE voltage and die temperature of MAX2871 + uint32_t vco; //stores active VCO in use + double freq_rfouta; //variable to calculate ouput frequency from register settings + + spi.format(8,0); //CPOL = CPHA = 0, 8 bits per frame + spi.frequency(1000000); //1 MHz SPI clock + + MAX2871 max2871(spi,D10); //create object of class MAX2871, assign latch enable pin + + max2871.powerOn(true); //set all hardware enable pins and deassert software shutdown bits + + max2871.setPFD(50.0,2); //inputs are reference frequency and R divider to set phase/frequency detector comparison frequency + + //The routine in the while(1) loop will ask the user to input a desired + //output frequency, check that it is in range, calculate the corresponding + //register settings, update the MAX2871 registers, and then independently + //use the programmed values to re-calculate the output frequency chosen + while(1){ + pc.printf("\n\rEnter a frequency in MHz:"); + fgets(buffer,256,stdin); + pc.printf("Line: %s\n", buffer); //store entry as string until newline entered + freq_entry = floor(1000*atof(buffer))/1000; //convert string to a float with 1kHz precision + if((freq_entry < 23.5) || (freq_entry > 6000.0)) //check the entered frequency is in MAX2871 range + pc.printf("\n\rNot a valid frequency entry."); + else + { + pc.printf("\n\rTarget: %.3f MHz",freq_entry); //report the frequency derived from user's input + max2871.setRFOUTA(freq_entry); //update MAX2871 registers for new frequency + + while(!ld) //blink an LED while waiting for MAX2871 lock detect signal to assert + { + led = !led; + wait_ms(30); + } + led = 1; + + vco = max2871.readVCO(); //read the active VCO from MAX2871 + v_tune = max2871.readADC(); //read the digitized TUNE voltage + freq_rfouta = max2871.getRFOUTA(); //calculate the output frequency of channel A + temperature = max2871.readTEMP(); //read die temperature from MAX2871 + + //print the achieved output frequency and MAX2871 diagnostics + pc.printf("\n\rActual: %.3f MHz",freq_rfouta); + pc.printf("\n\rVTUNE: %.3f V, VCO: %d, TEMP: %f",v_tune,vco,temperature); + } + } +}