Sunday, February 28, 2010

NetBeans Java IDE

I've been using Netbeans IDE to write C/C++ code now for several years. All that time I have never written a graphical interface with it. I program mostly for Unix shell.

I decided this weekend since I had the time I was going to learn how to do it.

I wanted to code something simple yet useful to amateur radio as I want to start writing applications for the Blackberry smartphones.

This version of the dipole calculator is not written for the Blackberry however as it uses a different JDK and you have to pay $20 to get a certificate key so you can use the locked portions of the JDK. I'm not quite ready to shell out the $20 if I can't even get the JDK to work with Netbeans.

Anyway, the link to the free software is to the left in the sidebar.

Here is the source code:
(Netbeans IDE creates most of the code, I wrote only a few lines which are highlighted in bold text)


import java.text.NumberFormat;


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/*
 * DiPoleGUI.java
 *
 * Created on Feb 28, 2010, 6:41:19 AM
 */
/**
 *
 * @author Tim
 */
public class DiPoleGUI extends javax.swing.JFrame {


    double frequency = 0, wire_length = 0;


    /** Creates new form DiPoleGUI */
    public DiPoleGUI() {
        initComponents();
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    //                          
    private void initComponents() {

        ButtonCalculate = new javax.swing.JButton();
        Reset = new javax.swing.JButton();
        DataInputMHz = new javax.swing.JFormattedTextField();
        DataInputLength = new javax.swing.JFormattedTextField();
        Frequency1 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        ResultHalfLength = new javax.swing.JFormattedTextField();
        jSeparator1 = new javax.swing.JSeparator();
        jSeparator2 = new javax.swing.JSeparator();
        ResultHalfLength1 = new javax.swing.JFormattedTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabel4 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Dipole Calculator");

        ButtonCalculate.setText("Calculate");
        ButtonCalculate.setPreferredSize(new java.awt.Dimension(77, 23));
        ButtonCalculate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ButtonCalculateActionPerformed(evt);
            }
        });

        Reset.setText("Reset");
        Reset.setPreferredSize(new java.awt.Dimension(61, 23));
        Reset.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ResetActionPerformed(evt);
            }
        });

        DataInputMHz.setText("0");
        DataInputMHz.setPreferredSize(new java.awt.Dimension(12, 20));
        DataInputMHz.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                DataInputMHzFocusGained(evt);
            }
        });

        DataInputLength.setText("0");
        DataInputLength.setPreferredSize(new java.awt.Dimension(12, 20));
        DataInputLength.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                DataInputLengthActionPerformed(evt);
            }
        });
        DataInputLength.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                DataInputLengthFocusGained(evt);
            }
        });

        Frequency1.setText("Frequency");

        jLabel1.setText("Overall Length");

        ResultHalfLength.setBackground(new java.awt.Color(153, 153, 153));
        ResultHalfLength.setEditable(false);
        ResultHalfLength.setPreferredSize(new java.awt.Dimension(109, 20));

        jSeparator1.setForeground(new java.awt.Color(0, 0, 204));

        jSeparator2.setForeground(new java.awt.Color(0, 0, 204));

        ResultHalfLength1.setBackground(new java.awt.Color(153, 153, 153));
        ResultHalfLength1.setEditable(false);
        ResultHalfLength1.setPreferredSize(new java.awt.Dimension(109, 20));
        ResultHalfLength1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ResultHalfLength1ActionPerformed(evt);
            }
        });

        jLabel2.setText("Feet");

        jLabel3.setText("MHz");

        jTextArea1.setColumns(20);
        jTextArea1.setEditable(false);
        jTextArea1.setFont(new java.awt.Font("Arial Black", 0, 13)); // NOI18N
        jTextArea1.setLineWrap(true);
        jTextArea1.setRows(5);
        jTextArea1.setText("Enter the resonant frequency in MHz or the overall antenna wire length and press the calculate button to calculate the missing value.");
        jScrollPane1.setViewportView(jTextArea1);

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel4.setText("DIPOLE CALCULATOR By AJ4UU");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(194, 194, 194)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(Reset, javax.swing.GroupLayout.Alignment.CENTER, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(ButtonCalculate, javax.swing.GroupLayout.Alignment.CENTER, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                            .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(ResultHalfLength1, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(95, 95, 95)
                                .addComponent(ResultHalfLength, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(28, 28, 28)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                            .addComponent(jLabel4)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 441, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(161, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(Frequency1, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(DataInputMHz, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(DataInputLength, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(123, 123, 123))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {ButtonCalculate, Reset});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel4)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(DataInputLength, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(Frequency1)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(DataInputMHz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(ButtonCalculate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(Reset, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(ResultHalfLength1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(ResultHalfLength, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))))
        );

        pack();
    }//
                       



    private void ButtonCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
        //double frequency, wire_length;
        frequency = Double.parseDouble(DataInputMHz.getText());
        wire_length = Double.parseDouble(DataInputLength.getText());
        if (wire_length == 0) {
            wire_length = 468 / frequency;
            DataInputLength.setValue(wire_length);
        } else if (frequency == 0) {
            frequency = 468 / wire_length;
            DataInputMHz.setValue(frequency);
        }
        ResultHalfLength.setValue(wire_length / 2);
        ResultHalfLength1.setValue(wire_length / 2);


    }                                              


    private void ResetActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // TODO add your handling code here:
        DataInputMHz.setText("0");
        DataInputLength.setText("0");
        ResultHalfLength.setText(null);
        ResultHalfLength1.setText(null);
        wire_length = frequency = 0;
    }                                    


    private void DataInputMHzFocusGained(java.awt.event.FocusEvent evt) {                                        
        // TODO add your handling code here:
        DataInputMHz.setText(null);
        DataInputLength.setText("0");
    }                                       


    private void DataInputLengthFocusGained(java.awt.event.FocusEvent evt) {                                           
        // TODO add your handling code here:
        DataInputLength.setText(null);
        DataInputMHz.setText("0");
    }                                          


    private void ResultHalfLength1ActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
    }                                                


    private void DataInputLengthActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
    }                                              


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {


            public void run() {
                new DiPoleGUI().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.JButton ButtonCalculate;
    private javax.swing.JFormattedTextField DataInputLength;
    private javax.swing.JFormattedTextField DataInputMHz;
    private javax.swing.JLabel Frequency1;
    private javax.swing.JButton Reset;
    private javax.swing.JFormattedTextField ResultHalfLength;
    private javax.swing.JFormattedTextField ResultHalfLength1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                  
}

Monday, February 15, 2010

15m DiPole

Saturday, February 6, 2010

RadioWavz DX40 and BPSK31 Video

It's Alive.. It's Alive

That large sunspot area that I was talking about last week has finally rotated around to the front side. There are quite a lot of very small surface disturbances but only a couple of actual sunspots. Hopefully more will emerge over the next few days as the actual count and solar flux is still quite low.

Tuesday, February 2, 2010

RadioWavz DX40 OCF Dipole


Got the RadioWavz 40m OCF (DX40) up yesterday afternoon and the band was busy during the evening and I couldn't make any contacts. This morning however I did make a contact to Topeka, KS so I know it gets out.

The installed height of 20 feet is horrible for 40m as the takeoff angle is straight up in the air. So it will be only local stations for now until I move to a place where I can hang it at 66 feet.

Also the long leg is mostly across the oak tree and that has some serious signal degradation I'm sure. Some day I'll have a better area for a small antenna farm.



Here is the opposite angle showing a closer view of the short leg.

Sunday, January 31, 2010

Off Air AGAIN!

UPDATE: 2 Feb 2010
I found an old SB Live 5.1 soundcard in an old PC case and after some struggles with drivers and resource conflicts it is now running happily alongside my PCs built in soundcard.

The soundcard I use for my digital modes died today.  I'll be getting a SignaLink when I get my new radio with the tax check.  The laptop I plan on using does not have DB9 comport so the USB SignaLink will be what I use. It's fully isolated and avoids noise caused by ground loops and computer birdy chirps.

I'm not sure when that will be though and could take several weeks.  Until then no PSK reporter from my QTH.

New Spot on the Front

In addition to the large spot on the backside, a new spot is emerging on the front side which will continue to support the SF while we wait for the large spot to rotate around to the front.

See the left sidebar for the image.

Saturday, January 30, 2010

Large Spot on the Backside

Over at the STEREO website there appears to be a very large sunspot only it's not visible from earth, yet.

On the ahead image you can see the spot just disappearing past the area not visible to the telescopes and on the behind image you can see the spot appearing from the non visible area.

All in all the spot covers 120 degrees of the suns surface.  That's pretty big for the beginning of the new solar cycle.

In this image you can see the spot on the right about to go out of view of the Ahead spacecraft.  Also visible is the sunspot currently visible from earth.













In this Behind image you can see the sunspot appearing over the edge.













In this image of the far side of the Sun the spot covers approximately 120 degrees so you can see the spot is pretty big even though we can't see it from earth and only about 30 degrees of it on each end.


To see the animated image of the complete visible surface of the sun you'll have to head over to the STEREO site to see it.

I can't wait for this one to come into view and maybe 10 meters will open for a week or so.

Monday, January 25, 2010

Pretty Betty SDR Demo

Pretty neat.  I'm thinking seriously about going SDR on my next radio purchase.

http://www.youtube.com/watch?v=7TIJBzpRfrQ

Saturday, January 23, 2010

Back On The Air

Back on the air today.. but for some reason I just could not make any contacts.

I did log one RTTY contact from a HAM in a contest, but most of my CQs and replies went unanswered.

One PSK contact replied 60Hz too low and I didn't know if it was me or him off frequency.  He never came back to me.

Other than that I read a lot today on DDS and Quadrature decoding.  Looked at an interesting chip the AD9854 DDS with quad decoder built in.  Would make a very nice Software Radio once I figure out how to get my hands on one and etch a board for it.  That's the hard part. :)

Anyway.. still looking forward to my 40m OCF that should arrive this week.  Hope to do some CW on 40m late next week or next weekend.

Friday, January 22, 2010

Sunspot 1041 On The Rise

With the house painting on hold due to the weather will I get to hook up to my antennas for this sunspot passing?

Who knows, but maybe this weekend I'll hook back up since I doubt the contractors are working.

Wednesday, January 20, 2010

AJ4UU Off Air Temporarily

Off air temporarily as the house is being pressure washed and painted.  We had to remove all objects from the outside of the house to include antenna cables.

Should be back on the air in a couple of days.

RadioWavz DX40 Windom Ordered

Just got off the phone with the sales rep over at RadioWavz.com and ordered the DX40 with 16' vertical and iso-balun.

I should get it by this time next week so I can be on the air that weekend by the latest (hopefully sooner).

I'll update this post with the product and installation details.

Update (Saturday 30 Jan 2010)
The sales rep said it could ship as early as Monday, 25 Jan, and I'd have it by the next weekend.  However that wasn't the case. The antenna shipped last Wednesday, Jan 27, and is currently on a FedEx truck in Crestview, FL awaiting delivery on Monday, 1 Feb.

Monday, January 18, 2010

Current Sun Activity



Sunspot 1040 is just about to set over the Sun's right horizon. It's been a decent sunspot and spiked some propagation on 10 meters earlier this week.

The good news is there is another sunspot just about to rise over the Sun's left horizon and should continue to provide communications during the upcoming week.

To see the animated image take a look at the STEREO web page.


Saturday, January 16, 2010

How to properly modulate a BPSK signal


An over modulated BPSK signal causes spurious emissions that cause interference to the whole band pass and then some. This happens when either the audio level output from the computer or the mic gain on the radio are set to high. It has little to do with how much RF power you are pushing. Too much power may cause inter-modulation in someones receiver which is why we always want to successfully communicate on as little power as possible. With BPSK31 you can literally talk the world over on 20 watts even when the conditions are not great.




An over modulated BPSK signal outside the band pass of the receiver can still cause interference. The amount of interference depends on the capabilities of your receiver and whether you attenuate the loud signals or not. Usually for any digital mode you do not want to attenuate the signal levels as the digital modes are intended to be low power modes and even during poor propagation they can communicate worldwide on very low power. Having to attenuate the loud signals means the low power signals will disappear off the screen.



Here is an example of how well PSK works with low power. Here I am copying 100% a signal from Warminster, PA into Fort Walton Beach, FL using my dummy load as an antenna. The station in PA said he was running 30W.

IMPORTANT SAFETY
  1. For soundcard digital modes do not ever transmit more than 50% of your radios rated max RF power. If you have a 100W SSB radio then 50W is the max you will want to transmit with soundcard digital modes. PSK is a low power mode and you should never need more than 25W even when the conditions are poor. Ive talked to Europe from Florida on 25 W and no sunspots during the sunspot minimum of 2009 using only a dipole at 20 feet above ground. If you have a directional gain antenna you can use considerably less power.
  2. Do not send more power to your dummy load than it is rated for in continuous operation. Usually 1/4 of the SSB rating is all you will want to transmit. If you have a 100W dummy load then 25W is pushing the limits for continuous operation.
BE A CONSIDERATE OPERATOR
  1. Do not tune or make audio adjustments on frequencies where others are operating. While adjusting your radio you WILL cause interference to others operating in and/or near your passband. Move to a quite area where it is permissible to transmit digital modes. You can even select a band that is not open for propagation and that will further reduce the amount of interference you cause.
  2. Don't forget to transmit your call sign when testing and adjusting your audio levels over the air.
  3. Always use the lowest power possible to make the contact. If the operator on the other end keeps sending QRZ? QRZ? or QSB then you can bump your power up until they copy you.
  4. Make sure you turn off your operating systems default sounds. You don't want any randoms beeps and dings going off during your transmission. For best results use a separate soundcard for your radio operations. Many computer-radio interfaces have built in external soundcards so you do not have to use your computer soundcard. You will have to adjust your PSK software to use the alternate soundcard.
To properly modulate a BPSK (or really any soundcard digital mode) start with your sound card Wave level at 20% and your Master soundcard output at 80%. Set you radio mic gain and RF gain to zero.

While monitoring your ALC manually key the transmitter in SSB mode (no audio) and slowly adjust your RF power up until your ALC level reduces to zero. If your ALC is at zero with your RF power at zero then turn your RF power up to where it would normally register a few watts on CW.

Unkey your radio.

Now on your digital software set the radio to transmit (F1 on DM 780). Only transmit a carrier signal do not press any letters or numbers (data).

Now slowly turn the mic gain up until the RF meter reads 10 watts carrier. If you can't obtain 10 watts before the mic gain hits 50% then slowly increase your RF gain to obtain the 10 watts. When data is actually transmitted the power level will double to about 20 watts. Check the ALC and make sure it is still at zero. Reduce the mic gain if the ALC is above zero and adjust RF gain for 10 watts.

Stop transmitting the carrier from the PSK software. (F4 on DM-780)

Now its time to send some data to see the results of these settings.

Type a few lines of "TESTING TESTING TESTING DE (YOUR CALL)" in the transmit text box of your PSK software.

Start the software transmitting (F2 on DM-780) and watch the power out level and the ALC level. The power out should peak around 20 watts and there should be no deflection of the ALC meter.

Stop the PSK software from transmitting (F4 on DM-780).



Here are the radio and soundcard settings I used to produce a 10W carrier only signal into my Kenwood TS-180S.

The red dots indicate values that you want to achieve and the blue dots represent values you adjust to achieve them.

I wanted 80% Master output from the soundcard and I wanted 20% Wave output to indicate 20 watts of radiated power. So I set the Master and Wave their respective values and adjusting the dB pad in DM 780 (PSK software) and the mic gain level I set the RF power out put to 10W on a carrier only signal. I made sure the ALC needle never moved from zero. If you can't achieve these values without ALC deflection then adjust the dB pad to the right to reduce the audio and re-adjust the mic gain for 10 watts and zero ALC.

Now it's time to go on the air. Don't forget to give and get a proper signal report and include the IMD and S/N ratio which are more meaningful to a digital soundcard modes. A IMD of -23dB to -30dB is great. -20dB and less causes some spurious emissions in the passband and they are evident as sidebars on either side of the signal.

And don't forget to hook your radio up to your antenna. Even though it is possible to hear signals with it I doubt anyone will hear you outside your own neighborhood.


Good luck and good DX.

Friday, January 15, 2010

Biggest Sunspot of 2010

Currently the biggest sunspot of 2010 and probably for the last several years is floating across the surface of the sun yielding a solar flux index of 90. It was as high as 94 earlier in the week.

I was looking on my spot collector and noticed 10m had opened up for a short periods during the week. Lets hope conditions remain through the weekend so I can give it a shot.

Saturday, January 9, 2010

First CW Contacts

I don't have a way to hand key CW on this TS-180S so I built an interface that makes the RS232 CST/RST signals key the radio. Once I figured the VOX delay was too short (it was dropping into RX after every letter) and made adjustment to it I was off to the races.

The CQNA contest was in full swing with lots of CQs on the band and short QSOs. That was just perfect for me to test the rig out. I made 25 contacts, 13 on 20m and 12 on 15m.

Now to get a key and get a 40m antenna as I work days and 40 is all I have in the evening.

Tuesday, January 5, 2010

Systematic Call Change to AJ4UU

I applied for a systematic call change from KI4EOY online last weekend. The FCC got the application on Monday and my new call was issued today, Tuesday. Who said the govt was slow!!

The sunspot count is low and 20m is not good enough for me to get out with my simple setup. I'll wait a few days, it's bound to change.