Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
Search
bitx40 VFO
Billy Shepherd
¿ªÔÆÌåÓýI'm doing the same with the same AD9850 and Arduino. I have the BITX40 built and the DDS is built per these links: I hesitate to answer questions...just wanted you to know I'm attempting the same and waiting for someone to answer lol From: [email protected] [[email protected]] on behalf of Adam Sliwa [sq9tla@...]
Sent: Wednesday, March 01, 2017 1:52 AM To: [email protected] Subject: [BITX20] bitx40 VFO I?bought you?trx without DDS.? I'm making DDS witch Arduino Nano and?AD8950 module. I have?any questions.
What is?ferquency VFO (4.8 - 5 MHz for 7-7.2 MHz) ?
How many ?volts should?signal output DDS?
Output signal from VFO on the board? should connect GND or? breake path ?
Regards , adam
|
Billy Shepherd
¿ªÔÆÌåÓýAlso, here is the code that worked or my Arduino Mega
/* Main code by Richard Visokey AD7C - www.ad7c.com Revision 2.0 - November 6th, 2013 */ // Include the library code #include <LiquidCrystal.h> #include <rotary.h> #include <EEPROM.h> //Setup some items #define W_CLK 8?? // Pin 8 - connect to AD9850 module word load clock pin (CLK) #define FQ_UD 9?? // Pin 9 - connect to freq update pin (FQ) #define DATA 10?? // Pin 10 - connect to serial data load pin (DATA) #define RESET 11? // Pin 11 - connect to reset pin (RST) #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.? Must be interrupt pins. LiquidCrystal lcd(12, 13, 7, 6, 5, 4); // I used an odd pin combination because I need pin 2 and 3 for the interrupts. int_fast32_t rx=7200000; // Starting frequency of VFO int_fast32_t rx2=1; // variable to hold the updated frequency int_fast32_t increment = 10; // starting VFO update increment in HZ. int buttonstate = 0; String hertz = "10 Hz"; int? hertzPosition = 5; byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;? //Placeholders String freq; // string to hold the frequency int_fast32_t timepassed = millis(); // int to hold the arduino miilis since startup int memstatus = 1;? // value to notify if memory is current or old. 0=old, 1=current. int ForceFreq = 1;? // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory.? YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET! void setup() { ? pinMode(A0,INPUT); // Connect to a button that goes to GND on push ? digitalWrite(A0,HIGH); ? lcd.begin(16, 2); ? attachInterrupt(0,MyIsr,CHANGE); attachInterrupt(1,MyIsr,CHANGE); ? ? pinMode(FQ_UD, OUTPUT); ? pinMode(W_CLK, OUTPUT); ? pinMode(DATA, OUTPUT); ? pinMode(RESET, OUTPUT); ? pulseHigh(RESET); ? pulseHigh(W_CLK); ? pulseHigh(FQ_UD);? // this pulse enables serial mode on the AD9850 - Datasheet page 12. ? lcd.setCursor(hertzPosition,1);??? ? lcd.print(hertz); ?? // Load the stored frequency? ? if (ForceFreq == 0) { ??? freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6)); ??? rx = freq.toInt();? ? } } void loop() { ? if (rx != rx2){??? ??????? showFreq(); ??????? sendFrequency(rx); ??????? rx2 = rx; ????? } ????? ? buttonstate = digitalRead(A0); ? if(buttonstate == LOW) { ??????? setincrement();??????? ??? }; ? // Write the frequency to memory if not stored and 2 seconds have passed since the last frequency change. ??? if(memstatus == 0){?? ????? if(timepassed+2000 < millis()){ ??????? storeMEM(); ??????? } ????? }?? } void MyIsr(void) { ? unsigned char result = r.process(); ? if (result) {??? ??? if (result == DIR_CW){rx=rx+increment;} ??? else {rx=rx-increment;};?????? ????? if (rx >=30000000){rx=rx2;}; // UPPER VFO LIMIT ????? if (rx <=1000000){rx=rx2;}; // LOWER VFO LIMIT ? } } // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32 void sendFrequency(double frequency) {? ? int32_t freq = frequency * 4294967295/125000000;? // note 125 MHz clock on 9850.? You can make 'slight' tuning variations here by adjusting the clock frequency. ? for (int b=0; b<4; b++, freq>>=8) { ??? tfr_byte(freq & 0xFF); ? } ? tfr_byte(0x000);?? // Final control byte, all 0 for 9850 chip ? pulseHigh(FQ_UD);? // Done!? Should see output } // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line void tfr_byte(byte data) { ? for (int i=0; i<8; i++, data>>=1) { ??? digitalWrite(DATA, data & 0x01); ??? pulseHigh(W_CLK);?? //after each bit sent, CLK is pulsed high ? } } void setincrement(){ ? if(increment == 10){increment = 50; hertz = "50 Hz"; hertzPosition=5;} ? else if (increment == 50){increment = 100;? hertz = "100 Hz"; hertzPosition=4;} ? else if (increment == 100){increment = 500; hertz="500 Hz"; hertzPosition=4;} ? else if (increment == 500){increment = 1000; hertz="1 Khz"; hertzPosition=6;} ? else if (increment == 1000){increment = 2500; hertz="2.5 Khz"; hertzPosition=4;} ? else if (increment == 2500){increment = 5000; hertz="5 Khz"; hertzPosition=6;} ? else if (increment == 5000){increment = 10000; hertz="10 Khz"; hertzPosition=5;} ? else if (increment == 10000){increment = 100000; hertz="100 Khz"; hertzPosition=4;} ? else if (increment == 100000){increment = 1000000; hertz="1 Mhz"; hertzPosition=6;}? ? else{increment = 10; hertz = "10 Hz"; hertzPosition=5;};? ?? lcd.setCursor(0,1); ?? lcd.print("??????????????? "); ?? lcd.setCursor(hertzPosition,1); ?? lcd.print(hertz); ?? delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed. }; void showFreq(){ ??? millions = int(rx/1000000); ??? hundredthousands = ((rx/100000)%10); ??? tenthousands = ((rx/10000)%10); ??? thousands = ((rx/1000)%10); ??? hundreds = ((rx/100)%10); ??? tens = ((rx/10)%10); ??? ones = ((rx/1)%10); ??? lcd.setCursor(0,0); ??? lcd.print("??????????????? "); ?? if (millions > 9){lcd.setCursor(1,0);} ?? else{lcd.setCursor(2,0);} ??? lcd.print(millions); ??? lcd.print("."); ??? lcd.print(hundredthousands); ??? lcd.print(tenthousands); ??? lcd.print(thousands); ??? lcd.print("."); ??? lcd.print(hundreds); ??? lcd.print(tens); ??? lcd.print(ones); ??? lcd.print(" Mhz? "); ??? timepassed = millis(); ??? memstatus = 0; // Trigger memory write }; void storeMEM(){ ? //Write each frequency section to a EPROM slot.? Yes, it's cheating but it works! ?? EEPROM.write(0,millions); ?? EEPROM.write(1,hundredthousands); ?? EEPROM.write(2,tenthousands); ?? EEPROM.write(3,thousands); ?? EEPROM.write(4,hundreds);?????? ?? EEPROM.write(5,tens); ?? EEPROM.write(6,ones);?? ?? memstatus = 1;? // Let program know memory has been written }; From: [email protected] [[email protected]] on behalf of Adam Sliwa [sq9tla@...]
Sent: Wednesday, March 01, 2017 1:52 AM To: [email protected] Subject: [BITX20] bitx40 VFO I?bought you?trx without DDS.? I'm making DDS witch Arduino Nano and?AD8950 module. I have?any questions.
What is?ferquency VFO (4.8 - 5 MHz for 7-7.2 MHz) ?
How many ?volts should?signal output DDS?
Output signal from VFO on the board? should connect GND or? breake path ?
Regards , adam
|
Jack Purdum
The Arduino String processing functions carry a lot of overhead and can fragment your memory. If you can, avoid the String class objects and use C strings (note lowercase 's') using char arrays instead. The following example shows a simple way to store and retrieve a frequency from EEPROM. The two functions of interest are the StoreFrequency() and RetrieveFrequency(). #include <EEPROM.h> #define FREQOFFSET ?10 ? ?// Byte address of where frequency is stored union eUnion{ ? byte v[sizeof(long)]; ? ? ? ? ? ?// Array with enough elements to hold a long data type ? long num; } myUnion; / ? ? Purpose: To store a long data type into EEPROM ? ? Parameter list: ? ? ? ? eUnion m ? ? ? ?// A union with a 4-element byte array, and a long ? ?Return type: ? ? ? ? void ? ? CAUTION: This code assumes that FREQOFFSET defines the address of the long in the EEPROM memory space / void StoreFrequency(eUnion m){ ? ? ? ? ? ?// Write frequency to EEPROM ? int i; ? for (i = 0; i < sizeof(long); i++) ? ? EEPROM.write(FREQOFFSET + i, m.v[i]); } / ? ? Purpose: To retrieve a long data type from EEPROM ? ? Parameter list: ? ? ? ? eUnion m ? ? ? ?// A union with a 4-element byte array, and a long ? ?Return type: ? ? ? ? void ? ? CAUTION: This code assumes that FREQOFFSET defines the address of the long in the EEPROM memory space / long RetrieveFrequency(eUnion m) { ? ? ?// Read a frequency from EEPROM ? ? int i; ? for (i = 0; i < sizeof(long); i++) ? ? m.v[i] = EEPROM.read(FREQOFFSET + i); ? return m.num; } void setup() { ? long frequency = 7040000L; ? long rF; ? ? Serial.begin(9600); ? Serial.print("Frequency = "); ? Serial.println(frequency); ? myUnion.num = frequency; ? ? ? ? ?// Store frequency in union ? StoreFrequency(myUnion); ? ? ? ? ?// write it to EEPROM ? rF = RetrieveFrequency(myUnion); ?// Retrieve it ? Serial.print("Retrieved Frequency = "); ? Serial.println(rF); } void loop() { } A union in C is a little chunk of memory that's capable of holding the largest member of whatever is defined in the union. Since frequency is expressed as a long, we need to reserve 4 bytes of memory (e.g., sizeof(long)). We then assign the frequency into the union with the statement: ? myUnion.num = frequency; ? ? ? ? ?// Store frequency in union The StoreFrequency() function simply writes that frequency to EEPROM as 4 bytes of data. It could care less that it's a long. To the compiler, it's just 4 bytes of data. Likewise, RetrieveFrequency() simply reads those same 4 bytes of data back into the byte array named v[]?that is part of the union. The code has no clue what those 4 bytes are, but we know it's the frequency, so we treat them as a long and return that value with the statement: ? return m.num; This is a pretty simple way to read and write to EEPROM. The nice thing about unions is that it doesn't have to contend with how the compiler stored the byte-order of the data (e.g., the Endian Problem). Jack, W8TEE From: Billy Shepherd <billy.shepherd@...> To: [email protected] Sent: Tuesday, April 4, 2017 12:36 PM Subject: Re: [BITX20] bitx40 VFO Also, here is the code that worked or my Arduino Mega
/* Main code by Richard Visokey AD7C - www.ad7c.com Revision 2.0 - November 6th, 2013 */ // Include the library code #include <LiquidCrystal.h> #include <rotary.h> #include <EEPROM.h> //Setup some items #define W_CLK 8?? // Pin 8 - connect to AD9850 module word load clock pin (CLK) #define FQ_UD 9?? // Pin 9 - connect to freq update pin (FQ) #define DATA 10?? // Pin 10 - connect to serial data load pin (DATA) #define RESET 11? // Pin 11 - connect to reset pin (RST) #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.? Must be interrupt pins. LiquidCrystal lcd(12, 13, 7, 6, 5, 4); // I used an odd pin combination because I need pin 2 and 3 for the interrupts. int_fast32_t rx=7200000; // Starting frequency of VFO int_fast32_t rx2=1; // variable to hold the updated frequency int_fast32_t increment = 10; // starting VFO update increment in HZ. int buttonstate = 0; String hertz = "10 Hz"; int? hertzPosition = 5; byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;? //Placeholders String freq; // string to hold the frequency int_fast32_t timepassed = millis(); // int to hold the arduino miilis since startup int memstatus = 1;? // value to notify if memory is current or old. 0=old, 1=current. int ForceFreq = 1;? // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory.? YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET! void setup() { ? pinMode(A0,INPUT); // Connect to a button that goes to GND on push ? digitalWrite(A0,HIGH); ? lcd.begin(16, 2); ? attachInterrupt(0,MyIsr,CHANGE); attachInterrupt(1,MyIsr,CHANGE); ? ? pinMode(FQ_UD, OUTPUT); ? pinMode(W_CLK, OUTPUT); ? pinMode(DATA, OUTPUT); ? pinMode(RESET, OUTPUT); ? pulseHigh(RESET); ? pulseHigh(W_CLK); ? pulseHigh(FQ_UD);? // this pulse enables serial mode on the AD9850 - Datasheet page 12. ? lcd.setCursor(hertzPosition,1);??? ? lcd.print(hertz); ?? // Load the stored frequency? ? if (ForceFreq == 0) { ??? freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6)); ??? rx = freq.toInt();? ? } } void loop() { ? if (rx != rx2){??? ??????? showFreq(); ??????? sendFrequency(rx); ??????? rx2 = rx; ????? } ????? ? buttonstate = digitalRead(A0); ? if(buttonstate == LOW) { ??????? setincrement();??????? ??? }; ? // Write the frequency to memory if not stored and 2 seconds have passed since the last frequency change. ??? if(memstatus == 0){?? ????? if(timepassed+2000 < millis()){ ??????? storeMEM(); ??????? } ????? }?? } void MyIsr(void) { ? unsigned char result = r.process(); ? if (result) {??? ??? if (result == DIR_CW){rx=rx+increment;} ??? else {rx=rx-increment;};?????? ????? if (rx >=30000000){rx=rx2;}; // UPPER VFO LIMIT ????? if (rx <=1000000){rx=rx2;}; // LOWER VFO LIMIT ? } } // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32 void sendFrequency(double frequency) {? ? int32_t freq = frequency * 4294967295/125000000;? // note 125 MHz clock on 9850.? You can make 'slight' tuning variations here by adjusting the clock frequency. ? for (int b=0; b<4; b++, freq>>=8) { ??? tfr_byte(freq & 0xFF); ? } ? tfr_byte(0x000);?? // Final control byte, all 0 for 9850 chip ? pulseHigh(FQ_UD);? // Done!? Should see output } // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line void tfr_byte(byte data) { ? for (int i=0; i<8; i++, data>>=1) { ??? digitalWrite(DATA, data & 0x01); ??? pulseHigh(W_CLK);?? //after each bit sent, CLK is pulsed high ? } } void setincrement(){ ? if(increment == 10){increment = 50; hertz = "50 Hz"; hertzPosition=5;} ? else if (increment == 50){increment = 100;? hertz = "100 Hz"; hertzPosition=4;} ? else if (increment == 100){increment = 500; hertz="500 Hz"; hertzPosition=4;} ? else if (increment == 500){increment = 1000; hertz="1 Khz"; hertzPosition=6;} ? else if (increment == 1000){increment = 2500; hertz="2.5 Khz"; hertzPosition=4;} ? else if (increment == 2500){increment = 5000; hertz="5 Khz"; hertzPosition=6;} ? else if (increment == 5000){increment = 10000; hertz="10 Khz"; hertzPosition=5;} ? else if (increment == 10000){increment = 100000; hertz="100 Khz"; hertzPosition=4;} ? else if (increment == 100000){increment = 1000000; hertz="1 Mhz"; hertzPosition=6;}? ? else{increment = 10; hertz = "10 Hz"; hertzPosition=5;};? ?? lcd.setCursor(0,1); ?? lcd.print("??????????????? "); ?? lcd.setCursor(hertzPosition,1); ?? lcd.print(hertz); ?? delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed. }; void showFreq(){ ??? millions = int(rx/1000000); ??? hundredthousands = ((rx/100000)%10); ??? tenthousands = ((rx/10000)%10); ??? thousands = ((rx/1000)%10); ??? hundreds = ((rx/100)%10); ??? tens = ((rx/10)%10); ??? ones = ((rx/1)%10); ??? lcd.setCursor(0,0); ??? lcd.print("??????????????? "); ?? if (millions > 9){lcd.setCursor(1,0);} ?? else{lcd.setCursor(2,0);} ??? lcd.print(millions); ??? lcd.print("."); ??? lcd.print(hundredthousands); ??? lcd.print(tenthousands); ??? lcd.print(thousands); ??? lcd.print("."); ??? lcd.print(hundreds); ??? lcd.print(tens); ??? lcd.print(ones); ??? lcd.print(" Mhz? "); ??? timepassed = millis(); ??? memstatus = 0; // Trigger memory write }; void storeMEM(){ ? //Write each frequency section to a EPROM slot.? Yes, it's cheating but it works! ?? EEPROM.write(0,millions); ?? EEPROM.write(1,hundredthousands); ?? EEPROM.write(2,tenthousands); ?? EEPROM.write(3,thousands); ?? EEPROM.write(4,hundreds);?????? ?? EEPROM.write(5,tens); ?? EEPROM.write(6,ones);?? ?? memstatus = 1;? // Let program know memory has been written }; From: [email protected] [[email protected]] on behalf of Adam Sliwa [sq9tla@...]
Sent: Wednesday, March 01, 2017 1:52 AM To: [email protected] Subject: [BITX20] bitx40 VFO I?bought you?trx without DDS.? I'm making DDS witch Arduino Nano and?AD8950 module. I have?any questions.
What is?ferquency VFO (4.8 - 5 MHz for 7-7.2 MHz) ?
How many ?volts should?signal output DDS?
Output signal from VFO on the board? should connect GND or? breake path ?
Regards , adam
|
Jack Purdum
Billy: I know that no one sits there spinning their tuning encoder 24/7, stopping every 2.1 seconds along the way. But if someone did do that, the EEPROM may become suspect after 139 days. I would suggest the following small changes: #define EPAUSE ? ?60000L ? ?// Place after the #include preprocessor directives... // then in loop() ? ? ? if(timepassed +?EPAUSE < millis()){ ?// If I hang around for more than a minute... This would make it pretty easy for someone to change the I'm-just-tuning-around delay to some other value that better-suits their tuning preferences. Sometimes I paused for several seconds listening to a transmission before moving on. Most of the time, I would not need to preserve that particular frequency in EEPROM as I do a hunt-and-pounce type of movement. Jack, W8TEE From: Billy Shepherd <billy.shepherd@...> To: [email protected] Sent: Tuesday, April 4, 2017 12:36 PM Subject: Re: [BITX20] bitx40 VFO Also, here is the code that worked or my Arduino Mega
/* Main code by Richard Visokey AD7C - www.ad7c.com Revision 2.0 - November 6th, 2013 */ // Include the library code #include <LiquidCrystal.h> #include <rotary.h> #include <EEPROM.h> //Setup some items #define W_CLK 8?? // Pin 8 - connect to AD9850 module word load clock pin (CLK) #define FQ_UD 9?? // Pin 9 - connect to freq update pin (FQ) #define DATA 10?? // Pin 10 - connect to serial data load pin (DATA) #define RESET 11? // Pin 11 - connect to reset pin (RST) #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); } Rotary r = Rotary(2,3); // sets the pins the rotary encoder uses.? Must be interrupt pins. LiquidCrystal lcd(12, 13, 7, 6, 5, 4); // I used an odd pin combination because I need pin 2 and 3 for the interrupts. int_fast32_t rx=7200000; // Starting frequency of VFO int_fast32_t rx2=1; // variable to hold the updated frequency int_fast32_t increment = 10; // starting VFO update increment in HZ. int buttonstate = 0; String hertz = "10 Hz"; int? hertzPosition = 5; byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;? //Placeholders String freq; // string to hold the frequency int_fast32_t timepassed = millis(); // int to hold the arduino miilis since startup int memstatus = 1;? // value to notify if memory is current or old. 0=old, 1=current. int ForceFreq = 1;? // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory.? YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET! void setup() { ? pinMode(A0,INPUT); // Connect to a button that goes to GND on push ? digitalWrite(A0,HIGH); ? lcd.begin(16, 2); ? attachInterrupt(0,MyIsr,CHANGE); attachInterrupt(1,MyIsr,CHANGE); ? ? pinMode(FQ_UD, OUTPUT); ? pinMode(W_CLK, OUTPUT); ? pinMode(DATA, OUTPUT); ? pinMode(RESET, OUTPUT); ? pulseHigh(RESET); ? pulseHigh(W_CLK); ? pulseHigh(FQ_UD);? // this pulse enables serial mode on the AD9850 - Datasheet page 12. ? lcd.setCursor(hertzPosition,1);??? ? lcd.print(hertz); ?? // Load the stored frequency? ? if (ForceFreq == 0) { ??? freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6)); ??? rx = freq.toInt();? ? } } void loop() { ? if (rx != rx2){??? ??????? showFreq(); ??????? sendFrequency(rx); ??????? rx2 = rx; ????? } ????? ? buttonstate = digitalRead(A0); ? if(buttonstate == LOW) { ??????? setincrement();??????? ??? }; ? // Write the frequency to memory if not stored and 2 seconds have passed since the last frequency change. ??? if(memstatus == 0){?? ????? if(timepassed+2000 < millis()){ ??????? storeMEM(); ??????? } ????? }?? } void MyIsr(void) { ? unsigned char result = r.process(); ? if (result) {??? ??? if (result == DIR_CW){rx=rx+increment;} ??? else {rx=rx-increment;};?????? ????? if (rx >=30000000){rx=rx2;}; // UPPER VFO LIMIT ????? if (rx <=1000000){rx=rx2;}; // LOWER VFO LIMIT ? } } // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32 void sendFrequency(double frequency) {? ? int32_t freq = frequency * 4294967295/125000000;? // note 125 MHz clock on 9850.? You can make 'slight' tuning variations here by adjusting the clock frequency. ? for (int b=0; b<4; b++, freq>>=8) { ??? tfr_byte(freq & 0xFF); ? } ? tfr_byte(0x000);?? // Final control byte, all 0 for 9850 chip ? pulseHigh(FQ_UD);? // Done!? Should see output } // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line void tfr_byte(byte data) { ? for (int i=0; i<8; i++, data>>=1) { ??? digitalWrite(DATA, data & 0x01); ??? pulseHigh(W_CLK);?? //after each bit sent, CLK is pulsed high ? } } void setincrement(){ ? if(increment == 10){increment = 50; hertz = "50 Hz"; hertzPosition=5;} ? else if (increment == 50){increment = 100;? hertz = "100 Hz"; hertzPosition=4;} ? else if (increment == 100){increment = 500; hertz="500 Hz"; hertzPosition=4;} ? else if (increment == 500){increment = 1000; hertz="1 Khz"; hertzPosition=6;} ? else if (increment == 1000){increment = 2500; hertz="2.5 Khz"; hertzPosition=4;} ? else if (increment == 2500){increment = 5000; hertz="5 Khz"; hertzPosition=6;} ? else if (increment == 5000){increment = 10000; hertz="10 Khz"; hertzPosition=5;} ? else if (increment == 10000){increment = 100000; hertz="100 Khz"; hertzPosition=4;} ? else if (increment == 100000){increment = 1000000; hertz="1 Mhz"; hertzPosition=6;}? ? else{increment = 10; hertz = "10 Hz"; hertzPosition=5;};? ?? lcd.setCursor(0,1); ?? lcd.print("??????????????? "); ?? lcd.setCursor(hertzPosition,1); ?? lcd.print(hertz); ?? delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed. }; void showFreq(){ ??? millions = int(rx/1000000); ??? hundredthousands = ((rx/100000)%10); ??? tenthousands = ((rx/10000)%10); ??? thousands = ((rx/1000)%10); ??? hundreds = ((rx/100)%10); ??? tens = ((rx/10)%10); ??? ones = ((rx/1)%10); ??? lcd.setCursor(0,0); ??? lcd.print("??????????????? "); ?? if (millions > 9){lcd.setCursor(1,0);} ?? else{lcd.setCursor(2,0);} ??? lcd.print(millions); ??? lcd.print("."); ??? lcd.print(hundredthousands); ??? lcd.print(tenthousands); ??? lcd.print(thousands); ??? lcd.print("."); ??? lcd.print(hundreds); ??? lcd.print(tens); ??? lcd.print(ones); ??? lcd.print(" Mhz? "); ??? timepassed = millis(); ??? memstatus = 0; // Trigger memory write }; void storeMEM(){ ? //Write each frequency section to a EPROM slot.? Yes, it's cheating but it works! ?? EEPROM.write(0,millions); ?? EEPROM.write(1,hundredthousands); ?? EEPROM.write(2,tenthousands); ?? EEPROM.write(3,thousands); ?? EEPROM.write(4,hundreds);?????? ?? EEPROM.write(5,tens); ?? EEPROM.write(6,ones);?? ?? memstatus = 1;? // Let program know memory has been written }; From: [email protected] [[email protected]] on behalf of Adam Sliwa [sq9tla@...]
Sent: Wednesday, March 01, 2017 1:52 AM To: [email protected] Subject: [BITX20] bitx40 VFO I?bought you?trx without DDS.? I'm making DDS witch Arduino Nano and?AD8950 module. I have?any questions.
What is?ferquency VFO (4.8 - 5 MHz for 7-7.2 MHz) ?
How many ?volts should?signal output DDS?
Output signal from VFO on the board? should connect GND or? breake path ?
Regards , adam
|
to navigate to use esc to dismiss