You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+46-16Lines changed: 46 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,7 @@
1
1
JT65/JT9/JT4/WSPR/FSQ Encoder Library for Arduino
2
-
=============================================
3
-
This library very simply generates a set of channel symbols for JT65, JT9, JT4, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
2
+
=================================================
3
+
4
+
This library very simply generates a set of channel symbols for JT65, JT9, JT4, FT8, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters), Type 0.0 or 0.5 message for FT8 (v2.0.0 protocol) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
4
5
5
6
Please feel free to use the issues feature of GitHub if you run into problems or have suggestions for important features to implement.
6
7
@@ -28,7 +29,7 @@ There is a simple example that is placed in your examples menu under JTEncode. O
28
29
29
30
To run this example, be sure to download the [Si5351Arduino](https://github.com/etherkit/Si5351Arduino) library and follow the instructions there to connect the Si5351A Breakout Board to your Arduino. In order to trigger transmissions, you will also need to connect a momentary pushbutton from pin 12 of the Arduino to ground.
30
31
31
-
The example sketch itself is fairly straightforward. JT65, JT9, JT4, WSPR, and FSQ modes are modulated in same way: phase-continuous multiple-frequency shift keying (MFSK). The message to be transmitted is passed to the JTEncode method corresponding to the desired mode, along with a pointer to an array which holds the returned channel symbols. When the pushbutton is pushed, the sketch then transmits each channel symbol sequentially as an offset from the base frequency given in the sketch define section.
32
+
The example sketch itself is fairly straightforward. JT65, JT9, JT4, FT8, WSPR, and FSQ modes are modulated in same way: phase-continuous multiple-frequency shift keying (MFSK). The message to be transmitted is passed to the JTEncode method corresponding to the desired mode, along with a pointer to an array which holds the returned channel symbols. When the pushbutton is pushed, the sketch then transmits each channel symbol sequentially as an offset from the base frequency given in the sketch define section.
32
33
33
34
An instance of the JTEncode object is created:
34
35
@@ -64,6 +65,12 @@ On sketch startup, the mode parameters are set based on which mode is currently
64
65
tone_spacing = WSPR_TONE_SPACING;
65
66
tone_delay = WSPR_DELAY;
66
67
break;
68
+
case MODE_FT8:
69
+
freq = FT8_DEFAULT_FREQ;
70
+
symbol_count = FT8_SYMBOL_COUNT; // From the library defines
71
+
tone_spacing = FT8_TONE_SPACING;
72
+
tone_delay = FT8_DELAY;
73
+
break;
67
74
case MODE_FSQ_2:
68
75
freq = FSQ_DEFAULT_FREQ;
69
76
tone_spacing = FSQ_TONE_SPACING;
@@ -105,6 +112,9 @@ Before transmit, the proper class method is chosen based on the desired mode, th
105
112
case MODE_WSPR:
106
113
jtencode.wspr_encode(call, loc, dbm, tx_buffer);
107
114
break;
115
+
case MODE_FT8:
116
+
jtencode.ft_encode(message, tx_buffer);
117
+
break;
108
118
case MODE_FSQ_2:
109
119
case MODE_FSQ_3:
110
120
case MODE_FSQ_4_5:
@@ -135,8 +145,8 @@ Public Methods
135
145
* a channel symbol table.
136
146
*
137
147
* message - Plaintext Type 6 message.
138
-
* symbols - Array of channel symbols to transmit retunred by the method.
139
-
* Ensure that you pass a uint8_t array of size JT65_SYMBOL_COUNT to the method.
148
+
* symbols - Array of channel symbols to transmit returned by the method.
149
+
* Ensure that you pass a uint8_t array of at least size JT65_SYMBOL_COUNT to the method.
140
150
*
141
151
*/
142
152
```
@@ -149,8 +159,8 @@ Public Methods
149
159
* a channel symbol table.
150
160
*
151
161
* message - Plaintext Type 6 message.
152
-
* symbols - Array of channel symbols to transmit retunred by the method.
153
-
* Ensure that you pass a uint8_t array of size JT9_SYMBOL_COUNT to the method.
162
+
* symbols - Array of channel symbols to transmit returned by the method.
163
+
* Ensure that you pass a uint8_t array of at least size JT9_SYMBOL_COUNT to the method.
154
164
*
155
165
*/
156
166
```
@@ -164,8 +174,8 @@ Public Methods
164
174
* a channel symbol table.
165
175
*
166
176
* message - Plaintext Type 6 message.
167
-
* symbols - Array of channel symbols to transmit retunred by the method.
168
-
* Ensure that you pass a uint8_t array of size JT9_SYMBOL_COUNT to the method.
177
+
* symbols - Array of channel symbols to transmit returned by the method.
178
+
* Ensure that you pass a uint8_t array of at least size JT9_SYMBOL_COUNT to the method.
169
179
*
170
180
*/
171
181
```
@@ -178,14 +188,30 @@ Public Methods
178
188
* Takes an arbitrary message of up to 13 allowable characters and returns
179
189
*
180
190
* call - Callsign (6 characters maximum).
181
-
* loc - Maidenhead grid locator (4 charcters maximum).
191
+
* loc - Maidenhead grid locator (4 characters maximum).
182
192
* dbm - Output power in dBm.
183
-
* symbols - Array of channel symbols to transmit retunred by the method.
184
-
* Ensure that you pass a uint8_t array of size WSPR_SYMBOL_COUNT to the method.
193
+
* symbols - Array of channel symbols to transmit returned by the method.
194
+
* Ensure that you pass a uint8_t array of at least size WSPR_SYMBOL_COUNT to the method.
Many thanks to Joe Taylor K1JT for his innovative work in amateur radio. We are lucky to have him. The algorithms in this program were derived from the source code in the [WSJT](http://sourceforge.net/projects/wsjt/) suite of applications. Also, many thanks for Andy Talbot G4JNT for [his paper](http://www.g4jnt.com/JTModesBcns.htm) on the WSPR coding protocol, which helped me to understand the WSPR encoding process, which in turn helped me to understand the related JT protocols.
259
+
Many thanks to Joe Taylor K1JT for his innovative work in amateur radio. We are lucky to have him. The algorithms in this program were derived from the source code in the [WSJT-X](https://sourceforge.net/p/wsjt/) suite of applications. Also, many thanks for Andy Talbot G4JNT for [his paper](http://www.g4jnt.com/JTModesBcns.htm) on the WSPR coding protocol, which helped me to understand the WSPR encoding process, which in turn helped me to understand the related JT protocols.
234
260
235
261
Also, a big thank you to Murray Greenman, ZL1BPU for working allowing me to pick his brain regarding his neat new mode FSQ.
236
262
237
263
Changelog
238
264
---------
265
+
* v1.2.0
266
+
267
+
* Add support for FT8 protocol (79 symbol version introduced December 2018)
sentence=Generate JT65, JT9, JT4, WSPR, and FSQ symbols on your Arduino.
6
-
paragraph=This library very simply generates a set of channel symbols for JT65, JT9, JT4, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
5
+
sentence=Generate JT65, JT9, JT4, FT8, WSPR, and FSQ symbols on your Arduino.
6
+
paragraph=This library very simply generates a set of channel symbols for JT65, JT9, JT4, FT8, or WSPR based on the user providing a properly formatted Type 6 message for JT65, JT9, or JT4 (which is 13 valid characters), Type 0.0 or 0.5 message for FT8 (v2.0.0 protocol) or a callsign, Maidenhead grid locator, and power output for WSPR. It will also generate an arbitrary FSQ message of up to 200 characters in both directed and non-directed format. When paired with a synthesizer that can output frequencies in fine, phase-continuous tuning steps (such as the Si5351), then a beacon or telemetry transmitter can be created which can change the transmitted characters as needed from the Arduino.
0 commit comments