#include "DDS.h" // pin connections #define RESET 0 // Pin RST #define DATA 1 // Pin DATA #define FQ_UD 2 // Pin FQ #define W_CLK 3 // Pin CLK #define XTALFREQ nnnnn // actual freq of AD9850 module xtal if not exactly 125MHz // DDS object DDS dds(W_CLK, FQ_UD, DATA, RESET); double frequency = 7100000; void setup() { dds.init(); dds.trim(XTALFREQ); dds.setFrequency(frequency); // set the frequency, use a double }
Here is an example sketch using the DDS library
// DDS sketch using DDS library from M0XPD, uses soft SPI. #include "DDS.h" #include "LiquidCrystal.h" // pin connections #define RESET 0 // Pin RST #define DATA 1 // Pin DATA #define FQ_UD 2 // Pin FQ #define W_CLK 3 // Pin CLK #define D4 4 // LCD data pins #define D5 5 #define D6 6 #define D7 7 #define RS 8 // LCD RS * EN pins #define EN 9 #define BUTTONS A0 // buttons read , analog level // names of bands char bandName[][5] = {"160", "80", "60", "40", "30", "20", "17", "15", "12", "10"}; // array lookup of lower, current and upper band limits #define LOWER 0 #define CURRENT 1 #define UPPER 2 // band limits double freqRange[10][3] = { {1810000, 1900000, 2000000}, {3500000, 3600000, 3800000}, {5258000, 5100000,5406500}, {7000000, 7100000, 7200000}, {10100000, 10300000, 10150000}, {14000000, 14200000, 14350000}, {18068000, 18050000, 18168000}, {21000000, 21250000, 21450000}, {24890000, 24700000, 24990000}, {28000000, 28500000, 29700000} }; // DDS object DDS dds(W_CLK, FQ_UD, DATA, RESET); // LCD object LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // band number int band; // actual frequency double frequency; void setup() { dds.init(); dds.trim(124970000); // crystal is not exactly 125MHz lcd.begin(16, 2); band = 0; // 160m band frequency = freqRange[band][CURRENT]; // current freq, start or last on this band } void loop() { int x; x = analogRead(BUTTONS); if (x < 100) // Right { while(analogRead(BUTTONS) < 100); if(frequency < freqRange[band][UPPER]) frequency += 1000; } else if (x < 200) { while(analogRead(BUTTONS) < 200); if(frequency < freqRange[band][UPPER]) frequency += 50; } else if (x < 400) { while(analogRead(BUTTONS) < 400); if(frequency > freqRange[band][LOWER]) frequency -= 50; } else if (x < 600) { while(analogRead(BUTTONS) < 600); if(frequency > freqRange[band][LOWER]) frequency -= 1000; } else if (x < 800) { while(analogRead(BUTTONS) < 800); freqRange[band][CURRENT] = frequency; // save previous band freq if(band < 9) band++; else band = 0; frequency = freqRange[band][CURRENT]; // load current band last freq } lcdDisplay(bandName[band], frequency); dds.setFrequency(frequency); // output frequency } // display LCD band & freq void lcdDisplay(char* b, double f) { lcd.setCursor(0,0); // write band & freq lcd.print("Band = "); lcd.setCursor(0, 1); lcd.print("Freq = "); delay(100); // stop flicker lcd.setCursor(7,0); // clear band data lcd.print(" "); lcd.setCursor(7,0); // write band data lcd.print(b); lcd.setCursor(7, 1); // clear freq data lcd.print(" "); lcd.setCursor(7, 1); // write freq data lcd.print(f/1000); }
No comments:
Post a Comment