wa3tfs 0 Posted February 25, 2021 Share Posted February 25, 2021 THIS CODE WORKS IN ALL WAYS EXCEPT WHEN IT LOOPS BACK TO GET MORE DATA, AND NONE IS BEING SENT, IT TURNS OFF THE RELAY THAT HAS BEEN SET ON. i NEED TO KEEP THE RELAY SET WHEN NO SERIAL INPUT DATA IS THERE. WHEN DIFFERENT DATA, OR THE SAME DATA IS INPUT, IT AGAIN WORKS AS EXPECTED UNTIL LOOPING BACK TO LOOK FOR MORE DATA. THE RESULT, IS THAT THE RELAY IS JUST PULSED ON UNTIL THE NEXT LOOP THROUGH. CAN ANYONE HELP ME TO GET THE RELAYS TO STAY ON WHEN SELECTED UNTIL NEW DATA IS INPUT FOR A DIFFERENT ONE? (ALSO, I HAVE NO IDEA WHY THIS WANTS TO DISPLAY COLOR HERE INSTEAD OF JUST PRINTING THE COLOR WHEN I EXPORT THE CODE FOR THE FORUM). #include <msp430g2553.h> #define W_CLK 7 [color=#007F00]// Pin 7 - connect to AD9850 module word load clock pin (CLK)[/color] #define FQ_UD 10 [color=#007F00]// Pin 10 - connect to freq update pin (FQ_UD)[/color] #define DATA 9 [color=#007F00]// Pin 9 - connect to serial data load pin (DATA)[/color] #define RESET 8 [color=#007F00]// Pin 8 - connect to reset pin (RST).[/color] #define pulseHigh(pin) {[color=#FF8000]digitalWrite[/color](pin, [color=#0066FF]HIGH[/color]); [color=#FF8000]digitalWrite[/color](pin, [color=#0066FF]LOW[/color]); } #define ONESXTY 6 [color=#007F00]// select 160 meter band filter PIN 6[/color] #define EIGHTY 5 [color=#007F00]// select 80 meter band filter PIN 5[/color] #define FORTY 11 [color=#007F00]//select 40 meter band filter PIN 11[/color] #define TWENTY 15 [color=#007F00]//select 20 meter and above filter PIN 15[/color] #define FIFTEEN 18 [color=#007F00]//SELECT 15 meter and above filter PIN 18[/color] #define TOP 19 [color=#007F00]//SELECT 10 METER LPF PIN 19[/color] #define B_CLK 12 [color=#007F00]//clock BFO DDS PIN 12[/color] #define BQ_UD 13 [color=#007F00]//load BFO DDS PIN 13[/color] #define BATA 14 [color=#007F00]//BFO frequency PIN 14[/color] #define BESET 2 [color=#007F00]//BFO reset PIN 2[/color] [color=#FF8000]long[/color] bfo; [color=#FF8000]long[/color] frequency; [color=#FF8000]long[/color] oldfreq; [color=#FF8000]long[/color] val; [color=#FF8000]long[/color] val2; [color=#FF8000]long[/color] val3; [color=#FF8000]long[/color] val4; [color=#FF8000]long[/color] bfreq; [color=#007F00]// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line[/color] [color=#FF0000]void[/color] tfr_bfobyte([color=#FF8000]byte[/color] data) { [color=#FF0000]for[/color] ([color=#FF8000]int[/color] f=0; f<8; f++, data>>=1) { [color=#FF8000]digitalWrite[/color](BATA, data & 0x01); pulseHigh(B_CLK); [color=#007F00]//after each bit sent, CLK is pulsed high[/color] } } [color=#007F00]// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line[/color] [color=#FF0000]void[/color] tfr_byte([color=#FF8000]byte[/color] data) { [color=#FF0000]for[/color] ([color=#FF8000]int[/color] i=0; i<8; i++, data>>=1) { [color=#FF8000]digitalWrite[/color](DATA, data & 0x01); pulseHigh(W_CLK); [color=#007F00]//after each bit sent, CLK is pulsed high[/color] } } [color=#007F00]// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32[/color] [color=#FF0000]void[/color] sendFrequency([color=#FF0000]double[/color] frequency) { [color=#FF0000]int32_t[/color] freq = frequency * 34.35973836; [color=#007F00]// note 125 MHz clock on 9850[/color] [color=#FF0000]for[/color] ([color=#FF8000]int[/color] b=0; b<4; b++, freq>>=8) { tfr_byte(freq & 0xFF); } tfr_byte(0x000); [color=#007F00]// Final control byte, all 0 for 9850 chip[/color] pulseHigh(FQ_UD); [color=#007F00]// Done! Should see output[/color] } [color=#007F00]// frequency calc from datasheet page 8 = <sys clock> * <BFO DDS frequency tuning word>/2^32[/color] [color=#FF0000]void[/color] sendBfo([color=#FF0000]double[/color] bfo) { [color=#FF0000]int32_t[/color] bfreq = bfo * 34.35973836; [color=#007F00]// note 125 MHz clock on 9850V[/color] [color=#FF0000]for[/color] ([color=#FF8000]int[/color] e=0; e<4; e++, bfreq>>=8) { tfr_bfobyte(bfreq & 0xFF); } tfr_bfobyte(0x000); [color=#007F00]// Final control byte, all 0 for 9850 chip[/color] pulseHigh(BQ_UD); [color=#007F00]// Done! Should see BFO output[/color] } [color=#007F00]//added this code to talk serially[/color] [color=#FF0000]void[/color] [color=#8B308B][b]setup[/b][/color]() { [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]begin[/color](9600); [color=#007F00]// configure launchpad data pins for output[/color] [color=#FF8000]pinMode[/color](FQ_UD, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](W_CLK, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](DATA, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](RESET, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](ONESXTY, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](EIGHTY, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](FORTY, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](TWENTY, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](FIFTEEN, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](TOP, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](B_CLK, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](BQ_UD, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](BATA, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]pinMode[/color](BESET, [color=#0066FF]OUTPUT[/color]); [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//SET UP INITIAL STATE OF CONTROL PINS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//ON START UP ACTIVATE NO FILTER[/color] pulseHigh(RESET); [color=#007F00]//main dds reset[/color] pulseHigh(W_CLK); [color=#007F00]//main dds clock[/color] pulseHigh(FQ_UD); [color=#007F00]// this pulse enables updates main dds [/color] pulseHigh(BESET); [color=#007F00]//bfo dds reset[/color] pulseHigh(B_CLK); [color=#007F00]//bfo dds clock[/color] pulseHigh(BQ_UD); [color=#007F00]// this pulse updates bfo dds28500000[/color] } [color=#007F00]//added this below to input required frequencies and offsets[/color] [color=#007F00]//this also selects the proper low pass filter and BFO for the frequencies programmed[/color] [color=#FF0000]void[/color] [color=#FF8000]loop[/color]() { [color=#FF0000]if[/color] ([color=#8B308B][b]Serial[/b][/color].[color=#FF8000]available[/color]()) { frequency = [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]parseInt[/color](); [color=#007F00]//if (frequency == oldfreq) goto loop1;[/color] [color=#FF0000]if[/color] (frequency<1000) goto loop1; [color=#FF0000]if[/color] (frequency>1500000 && frequency<2100000) { [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER[/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); [color=#007F00]//delay (10000); //test relay active[/color] } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } [color=#FF0000]if[/color] (frequency>2100001 && frequency<4000000) { [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER [/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } [color=#FF0000]if[/color] (frequency>4000001 && frequency<7400000) { [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER [/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } [color=#FF0000]if[/color] (frequency>7400001 && frequency<14500000) { [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER[/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } [color=#FF0000]if[/color] (frequency>14400001 && frequency<28000000) { [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER [/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } [color=#FF0000]if[/color] (frequency>28000001 && frequency<35000000) { [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]HIGH[/color]); [color=#007F00]//IF TRUE TURN ON THIS FILTER [/color] [color=#8B308B][b]Serial[/b][/color].[color=#FF8000]println[/color]([color=#0066FF]"transmit accepted"[/color]); } [color=#FF0000]else[/color] { [color=#FF8000]digitalWrite[/color](TOP, [color=#0066FF]LOW[/color]); [color=#007F00]//TURN OFF OTHER LOW PASS FILTERS[/color] [color=#FF8000]digitalWrite[/color](EIGHTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FORTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](TWENTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](FIFTEEN, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] [color=#FF8000]digitalWrite[/color](ONESXTY, [color=#0066FF]LOW[/color]); [color=#007F00]//IF TRUE TURN OFF THIS FILTER[/color] } oldfreq == frequency; [color=#FF0000]if[/color] (frequency<(7400000)) { bfo = (8996900); [color=#007F00]//LSB bfo injection frequency 8996600[/color] frequency = (frequency + 100); [color=#007F00]//add or subtranct to set exact transmit freq 250[/color] } [color=#FF0000]else[/color] { bfo = (9000250); [color=#007F00]//test bfo offset replace next line[/color] [color=#007F00]//bfo = (9000000); //USB bfo injection frequency[/color] frequency = (frequency + 70); [color=#007F00]//add or subtract to set exact transmit freq (195)[/color] } [color=#FF0000]if[/color] (frequency<(13999000))[color=#007F00]//changed to get lo lower[/color] { frequency = (frequency + bfo);[color=#007F00]// create local oscillator injection offset (350) from bfo to correct transmit frequency[/color] } [color=#FF0000]else[/color] { frequency = (frequency + bfo);[color=#007F00]// set higher frequency injection offset for higher RF output at upper frequencies (15,14,12 and 10 meters)[/color] } bfo = bfo; sendFrequency(frequency); [color=#007F00]// send LO frequency to DDS ctrl.Offset 175 corrects frequency[/color] [color=#007F00]//Serial.print(frequency); //print actual value to monitor to debug offset not displayed[/color] [color=#007F00]//Serial.print(bfo); //print actual value to monitor to debug[/color] sendBfo(bfo); [color=#007F00]// send BFO frequency to DDS ctrl.[/color] [color=#7E7E7E][b]loop1:[/b][/color]; } } [/quote] Quote Link to post Share on other sites
wa3tfs 0 Posted February 25, 2021 Author Share Posted February 25, 2021 I've reposted this since the program insists on displaying the word"color" instead of showing it so please disregard this mess and look to the new posting if you please. thanks, Quote Link to post Share on other sites
wa3tfs 0 Posted February 26, 2021 Author Share Posted February 26, 2021 The bug has been fixed so please disregard this item Quote Link to post Share on other sites
wa3tfs 0 Posted February 26, 2021 Author Share Posted February 26, 2021 The software has been fixed. Please disregard this posting. Quote Link to post Share on other sites
wa3tfs 0 Posted February 26, 2021 Author Share Posted February 26, 2021 Software has been fixed, please disregard this posting. Quote Link to post Share on other sites
Rei Vilo 695 Posted March 2, 2021 Share Posted March 2, 2021 It would be nice to share the solution. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.