Tuesday, March 31, 2015

HF APRS -- FLDIGI style using PSK/MFSK/etc

HF APRS has always been a mixed bag.  If you used a traditional 300 baud packet modem, it was typically hit and miss situation.  Signal to noise ratios had to be very high to be successful.  If you had a thunderstorm on 40m or 80m, probably not a good chance of being successful.

We all know that many of the robust modes in FLDIGI are able to operate at much lower signal to noise ratios and are much more resistant to fading, interference, and the like.

I am please to announce the TDRC is going to start testing APRS on HF using BPQ32's APRS client.  Here are the instructions on how to get your station on the air and have fun in the testing.

Some advantages of NVIS HF APRS:

1) Don't need line of sight or near line of sight conditions to the nearest digipeater or receiving stations.
2) 5 watts will get you out upwards of 200 miles for a given area.
3) Hidden transmitter syndrome is rampant on 2m and 440 APRS, as the digipeater usually is the only station that can hear everyone.  Stations more than a handful of miles apart can't hear each other, so then it becomes a battle of who is heard first at the digi.
4) If we DON'T follow the digipeater paradigm on HF, all stations should be able to hear each other directly, which should cut down on the traffic load.
5) The amount of infrastructure can be reduced by the fact that stations are hearing each other directly, rather than needing several digipeater paths to carry the traffic to them.

Please note that I am not against VHF APRS.  I love it.  Just pointing out that a well run HF NVIS APRS system could take things to an even higher level, especially given the flexibility that FLDIGI gives for modes.

So, how do you do it?

1) Download the latest BPQ32 software from http://www.cantab.net/users/john.wiseman/Downloads/LastestInstaller/BPQ32_6.0.10.1_20150214.exe.  Run and install.

2) Download the latest copy of FLDIGI from http://www.w1hkj.com/downloads/fldigi/fldigi-3.22.01_setup.exe. Run and install.

3) Replace the BPQ32.CFG file with the following. Anywhere there is KD5NJR, change it to YOUR callsign.  Change the coordinates in the APRS section to match yours (otherwise you will show up at my house!)

/* This begins a multi-line comment
The purpose of this configuration is simply to confirm that the basic BPQ32
system is operable.  It contains only a LOOPBACK port.
To perform the basic test, compile this configuration file by executing
bpqcfg.exe, which will generate bpqcfg.bin. Now execute BPQTerminal.exe, and
in the lowest window enter:
You should receive the following response:
This is the CTEXT.
If you get the above response the basic test has succeeded.
This file: \Examples\Minimal\bpqcfg.txt
*/ This ends a multi-line comment
;See LOCATOR details at:
; SYSOP Passord - See http://www.cantab.net/users/john.wiseman/Documents/Node%20SYSOP.html
NODECALL=KD5NJR-5  ; Node callsign
NODEALIAS=TDRNDE ; Node alias (6 characters max)
IDMSG:   ; UI broadcast text from NODECALL to fixed dest ID
***   ; Denotes end of IDMSG text
BTEXT:   ; UI broadcast text from BCALL to destination UNPROTO=
***   ; Denotes end of BTEXT text
INFOMSG:  ; The INFO command text follows:
***   ; Denotes end of INFOMSG text
KD5NJR-5 > Main Node for Tulsa metro and surrounding areas.
TYPE - I for System Information
TYPE - H for Node Commands
TYPE N for Routes to other Network Nodes
TYPE ? for Available Applications
***   ; Denotes end of CTEXT text
FULL_CTEXT=1  ; 0=send CTEXT to L2 connects to NODEALIAS only
   ; 1=send CTEXT to all connectees
; Network System Parameters:
OBSINIT=6  ; Initial obsolescence set when a node is included
   ; in a received nodes broadcast. This value is then
   ; decremented by 1 every NODESINTERVAL.
OBSMIN=4  ; When the obsolescence of a node falls below this
   ; value that node's information is not included in
   ; a subsequent nodes broadcast.
NODESINTERVAL=0  ; Nodes broadcast interval in minutes
IDINTERVAL=0  ; 'IDMSG' UI broadcast interval in minutes, 0=OFF
BTINTERVAL=0  ; The BTEXT broadcast interval in minutes, 0=OFF
L3TIMETOLIVE=25  ; Max L3 hops
L4RETRIES=3  ; Level 4 retry count
L4TIMEOUT=60  ; Level 4 timeout in seconds s/b > FRACK x RETRIES
L4DELAY=10  ; Level 4 delayed ack timer in seconds
L4WINDOW=4  ; Level 4 window size
MAXLINKS=63  ; Max level 2 links
MAXNODES=128  ; Max nodes in nodes table
MAXROUTES=64  ; Max adjacent nodes
MAXCIRCUITS=128  ; Max L4 circuits
MINQUAL=168  ; Minimum quality to add to nodes table
; INP3 Routing is experimental.  The two parms which follow will be ignored
; unless activated in the ROUTES: section.
MAXHOPS=4  ; INP3 hop limit to add to tables
MAXRTT=90  ; INP3 max RTT in seconds
BUFFERS=255  ; Packet buffers - 255 means allocate as many as
   ; possible, normally about 130, depending upon other
   ; table sizes.
; TNC default parameters:
PACLEN=128  ; Max packet size (236 max for net/rom)
PACLEN is a problem! The ideal size depends on the link(s) over which a packet
will be sent. For a session involving another node, we have no idea what is at
the far end. Ideally each node should have the capability to combine and then
refragment messages to suit each link segment - maybe when there are more BPQ
nodes about than 'other' ones, I'll do it. When the node is accessed directly,
things are a bit easier, as we know at least something about the link. So,
currently there are two PACLEN params, one here and one in the PORTS section.
This one is used to set the initial value for sessions via other nodes and for
sessions initiated from here. The other is used for incoming direct (Level 2)
sessions. In all cases the TNC PACLEN command can be used to override the
; Level 2 Parameters:
; T1 (FRACK), T2 (RESPTIME) and N2 (RETRIES) are now in the PORTS section
T3=120   ; Link validation timer in seconds
IDLETIME=720  ; Idle link shutdown timer in seconds
; Configuration Options:
AUTOSAVE=1  ; Saves BPQNODES.dat upon program exit
BBS=1   ; 1 = BBS support included, 0 = No BBS support
NODE=1   ; Include switch support
HIDENODES=1  ; If set to 1, nodes beginning with a #
   ; require a 'N *' command to be displayed.
; The *** LINKED command is intended for use by gateway software, and concern
; has been expressed that it could be misused. It is recommended that it be
; disabled (=N) if unneeded.
ENABLE_LINKED=N  ; Controls processing of *** LINKED command
   ; Y = allows unrestricted use
   ; A = allows use by application program
   ; N = disabled
AX25 port definitions:
The LOOPBACK port simulates a connection by looping input to output. To test,
start BPQTerminal and enter: 'C 1 MYNODE via MYCALL'
In this example '1' is the LOOPBACK port number. The LOOPBACK port is provided
for testing purposes and would rarely be included in an established system.
;  PACLEN=64
;    ADDR 7342 PATH C:\Program Files (x86)\Fldigi-3.22.01\fldigi.exe
;    TIMEOUT=10
;    RETRIES=5
Symbol=a        ; Icon to display for station.
Symset=B        ; This is a "B" in a Red Diamond.
;    Specify a Dest Addreess and Path for each port you want to use for APRS. No dest means receive only port
;    Ports without an APRSPath statement will not be used by the Digi
;    Note if you specify APRS as the destination call it will be replaced by the current BPQ32 APRS
;    identification destination - APBPQ1. If you really want to send APRS, specify APRS-0.
APRSPath 1=APRS,WIDE2-2                        ; PORT 1
BeaconInterval=30                  ; Send Beacon every 30 minute. Minimum is 5 mins
MobileBeaconInterval=2              ; Beacon interval when moving
;    Define Crossport Digi. For each port, a list of ports to send a packet to (IS means send to APRS-IS)
;    If a Digimap isn't specified for a port, digi out on the port the packet arrived on,
;        and send to APRS-IS (if enabled)
;    If you want to digi on same port, but not send to APRS-IS, Specify Digimap n=n
;    If you dont want to digi on a port, specify Digimap n=
;    If you only have one APRS port, you probably don't need a Digimap statement
Digimap 1=1             ; Packets from 1 to 9, but not APRS-IS

;    Define Digipeating parameters

;TraceCalls=WIDE,TRACE  ; Calls for CALLN-n Processing with Trace
;FloodCalls=USA        ; Calls for CALLN-n Processing without Trace
DigiCalls=KD5NJR-10        ; Calls for Normal (ie no SSID manipulation) Digi
                        ; For a Local "Fillin" Digi, you could include WIDE1-1 and leave out TraceCalls and FloodCalls
;ReplaceDigiCalls      ; Replace DigiCalls with APRSCall. Omit if you want the call to be left as it is received.
MaxTraceHops=2        ; Max value of n in CALLN-n processing. If a packet is received with n greater than
MaxFloodHops=2        ; this, the value will be replaced BEFORE it is decremented.
;    Specify position. You can specify a fixed LAT/LONG, or use GPS
LAT=3601.42N          ; Must be in standard APRS Format (ddmm.mmN/S)
LON=09549.82W          ; Must be in standard APRS Format (dddmm.mmE/W)
; The Digi can generate Object and Item reports.
; The format is pretty strict - a single space between param=value pairs,
; a comma but no spaces in PATH and PORT string.

; Minimum interval is 10 mins. You can have as many OBJECT lines as you need.
; See thr APRS specification for information on how to format an Object or Item string.

; OBJECT PATH=APRS,WIDE1-1 PORT=1,IS INTERVAL=30 TEXT=;444.80BPQ*111111z5807.60N/00610.63Wr%156 R15m

; IGATE Params. If specified you will gate RF packets and your beacons to APRS-IS
;ISHost=    ; APRS-IS Host Name. May be either an IPV4 or an IPV6 Host
;ISPort=14551                ; Normal port for a filtered feed
;ISPasscode=?????            ; If you don't already have a passcode I can issue you one.
; You can specify a filter command to be sent when you log on to APRS-IS. Normally you don't
; need one. The APRS Mapping Application (BPQAPRS) sets a filter when it starts,
; and if you aren't running an APRS application, there isn't much point in getting info from APRS-IS
;ISFilter=m/50              ; Filter Command if needed

ROUTES:   ; Locked routes (31 maximum)
/*   ; Begin comment block
MAXFRAME, Frack and PACLEN if stated override the port defaults.
INP3Enable = 1 enables, 0 or null disable.  The INP3 (internode protocol)
implementation in BPQ32 is experimental.  See additional details in bpqaxip.cfg.
Example of a route statement using INP3:
Locked routes tend to be overused and should not be set unless truly needed.
*/   ; End comment block
; No routes are specified, as they would be meaningless for this configuration.
***   ; Denotes end of locked routes
You can define additional Node commands that are available to your users. These may connect to
applications running on you computer, or be aliases or 'shortcuts' to other node commands.
For example you can define the command "BBS". This can either be set up to connect to a BBS running
on your computer, or to be an alias for a command that connects to a BBS on another system.
You can set up a callsign that if connected to will select the command, and if required cause the
call to be added to your NODES list.
The format is:
APPLICATION n,CMD,New Command,Call,Alias, Quality
n Application Number. You can define up to 32.
CMD The command the user types
New Command (optional) The Node command to be run
Call (optional) The call which directly invokes CMD
Alias and Quality (optional) If specified, causes an entry for Call and Alias to be added to your
NODES table with the specified Quality
For example:
Associated with each Application number is an applications mask. Most BPQ32 applications can be configured to
use any Application. An exception is AR-Cluster using the OCX interface, which must be Appl 1. Normally an Application Mask is configured in the application, rather than an Application Number. The following table gives
the Application Mask values:
  Appl: 1,2,3,4,5,6,7,8, etc
  Decimal Mask: 1,2,4,8,16,32,64,128, etc
  Hexadecimal Mask: 0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80, etc

; In this example no applications are supported.

4) Run FLDIGI and follow the instructions for general configuration. Then configure FLDIGI as shown http://www.cantab.net/users/john.wiseman/Documents/FLDigiDriver.html. Make sure your squelch is set with the appropriate level in FLDIGI. Also turn on KPSQL.

5) Fire up the BPQ32 software and open the APRS icon.  You should start beaconing shortly.  Make sure your radio is set to 7.036 Mhz USB and the FLDIGI software is set to 1500 Hz center frequency.  Let's try PSK-250 for now.  We may look at either MFSK or PSKR-250 if outlying stations have problems copying packets consistently.

If you have any questions, email me at ae5me@yahoo.com.

Tuesday, March 24, 2015

KS Satern Net was fun

Was just tuning around on the new 80m dipole and found the KS and Western MO Satern PSK31 net.  Meets every Tuesday night at 9 PM on 3579.5 kHz.  KC0NUG was net control out of Overland Park, KS.  He was consistently 27-29 db.  Very copiable signal for a station running only 20 watts.

Check it out!

Thursday, March 19, 2015

Green County Hamfest Door Prize Winner

Winner of the Raspberry Pi 2 door prize at Green County Hamfest was Chris Krug KC5IIE.  Congrats to Chris!

FLDIGI Training "Hands on" video

A video of "hands on" FLDIGI training is available at http://new.livestream.com/fbctuttle/events/1792672.

You can watch these in each of the six individual parts.  This video was shot at the training that was conducted in Oklahoma City in February.

Speaking of training, we have been invited for a "short" one hour training session at Ham Holiday coming up this summer.

Monday, March 16, 2015

Thursday Night Roundtable

See ya Thursday night at 2100 local time (Central Daylight) on 3583 kHz for the digital roundtable.  I'll ( Scott / KD5NJR) be listening on that frequency.  And Jeff / AE5ME will be listening on 145.03 FM Simplex as well.

Hamfest 2015

Had a good time at Hamfest.  If you'd like to start with digital radio , let us know where you're at and what radio you have available for digital experiments.  And from there we'll figure out your rig interface options and get FL-DIGI config'd.  Drop Scott a line at kd5njr@gmail.com.... 

Wednesday, March 11, 2015

It's coming : Hamfest !!!


We're on Facebook


Check it out .  

international Morse Code

From our friend Wikipedia , 
Some information on spacings in Morse Code. 

Zero is a long symbol. 
- - - - -
15 units of dash total
 4 units of silence between dashes total 
 And we'd wrap up with 3 units of silence until the next character . 

I wonder if a 10 ms dit sounds about right ? 

Fun with Interrupts

Something I avoided in college until my senior year was interrupts and interrupt service routines . 

They seemed a little scary.  Interrupts could happen at anything .  The service routines and to be fast and short .  

But they can make life easier and they're what makes multitasking possible .  

There are other ways , but I think a program that keeps checking a pin to see if a dit is still a dit , or if it's turned into a dash, or if some kind of space has happened , and if so , which one , would turn into a large state machine and a huge mess if not planned correctly.  

So , I sketched this out. Again, assuming a normal Arduino and an external audio source and the crude Schmitt trigger interface from a recent post.  

What I don't have worked out is the spacing values for what's a dit and what isn't . 

What's the best way to deal with a bad fist ?  

We shall see...  

A "Mic Check" for the Esplora

The Arduino website has some good sample code .  

I found this bit that looked like a microphone test .  

I haven't tried it yet , but I roughed in a squelch control ....  I think . 

Second Small Arduino Experiment

After getting that first experiment going where we are reading the speaker out line from the Baofeng into the Arduino, we'd move on to working with the Digital input and those Schmitt triggers ...

I don't have any code yet , just this rough but for the comments block . 

Thoughts on an Arduino / Baofeng Experiment

Thinking about how to detect a signal and how to distinguish it from static / noise .  

Luckily , we have A and D inputs on the Arduino. 

I'll have to keep my eyes open at Hamfest for some of these small parts . 

I'll try to write some rough code after Hamfest.  I've got a couple plain Arduinos and an Esplora with an on-board mic.