Jump to content
43oh

This code is used to control a transmitter. Serial data is loaded, based on it a relay is triggered. This works OK, when no more input is provided, I want the relay to stay on.


Recommended Posts

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]

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...