Hellschreiber M0IFA (Intermediate Frequency Amplifier) Lots of digital modes • If you start to look at the lower part of ham bands you find lots of digital comms Examples

PSK31 PSK63 RTTY HELL

PACTOR OLIVIA CONTESTIA hfradio.org.uk/html/digital_modes.html Fuzzy comms?

• Lots of things today are Digital, ON|OFF, but how about the Analog world - we humans are analog!

• Modes that are analogue, human readable, uncoded, direct viewing or printing modes, are called ‘Fuzzy'.

• Examples: Morse, , SSTV, NBTV…Hellschreiber Hellschreiber

• Sending text in pulses over radio or telephone line

• Divides each text character into pixels in a glyph (a font is a set of glyphs, made of pixels)

• Sending the pixels as pulses

• German name, “bright writing”. A pun on name of inventor Rudolf Hell, patented in 1929 Hellschreiber

• First sent by radio by keying a CW TX, dot by dot

• ON = black spot (pixel), OFF = white space

• Called Feld-Hell (“field” comms by German army, inventor “Mr Hell”)

• Good immunity to interference, also clandestine as nothing sent until key pressed

• Graphic, so can transmit any character, e.g Chinese, Korean, Arabic How does it work?

Pulses sent for each pixel 1 2

Sent twice. Allows for mistiming

3 Sequencing • Pixels are sent at different Frequencies or Tones

• MT-Hell, Multi-Tone Hell, sends all Tones for a vertical column of pixels at once

• S/MT-Hell, Sequential Tones sends Tones for each pixel in sequence

• Slow S/MT-Hell very good under poor conditions, as slow as one pixel/second Official Hell font

• Font is 7 x 14 pixels

• First column contains “sync” pulse, starts paper moving. Paper auto- stops after six columns (one character)

• Dot timing 112.5 baud 8.16ms), for a 7x7 font = 2.5ch/sec, or 25wpm. Vertical column timing is fixed at 17.5cols/sec

• Can be sent much more slowly for high S/N ratio

• Pixels are read up bottom to top, left to right columns My Font & Glyph coding b7 Freq Time b0

• You can chose Tone Frequencies & Tone Time

• Pixels of the font are read “up columns” b0 to b7

• Font can be official 7x14 or 5x7, 5x5, 3x5. (my code)

• Tone frequency standard is USB, b0 = low freq

• Frequency/Tone spacing can be very small (1-2Hz) so BW can be very small (7-14Hz).

• Time of pixels can be anything, milliseconds to seconds Transmitter

Arduino UNO DDS BPF, PA I2C

Si5351 Message Fixed or KB input

• Very simple electronics, Arduino + DDS

• For low sidebands should have sloping sides to pulses…

• Can use breadboard made in BARS Tech Group (info available) Transmitter

Arduino UNO and

Si5351 DDS module with LCD display and

Rotary Encoder C++ code byte glyphs[][6] = { {' ', 0x00, 0x00, 0x00, 0x00, 0x00, }, {'/', 0x04, 0x08, 0x10, 0x20, 0x40, }, {'0', 0x7C, 0x8A, 0x92, 0xA2, 0x7C, }, {'1', 0x00, 0x42, 0xFE, 0x02, 0x00, }, {'2', 0x42, 0x86, 0x8A, 0x92, 0x62, }, Glyph table in Hex 5 cols {'3', 0x84, 0x82, 0xA2, 0xD2, 0x8C, }, {'4', 0x18, 0x28, 0x48, 0xFE, 0x08, }, {'5', 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, }, {'6', 0x3C, 0x52, 0x92, 0x92, 0x0C, }, {'7', 0x80, 0x8E, 0x90, 0xA0, 0xC0, }, {'8', 0x6C, 0x92, 0x92, 0x92, 0x6C, }, {'9', 0x60, 0x92, 0x92, 0x94, 0x78, }, {'A', 0x7E, 0x88, 0x88, 0x88, 0x7E, }, {'B', 0xFE, 0x92, 0x92, 0x92, 0x6C, }, Read Msg {'C', 0x7C, 0x82, 0x82, 0x82, 0x44, }, {'D', 0xFE, 0x82, 0x82, 0x44, 0x38, }, Char by char {'E', 0xFE, 0x92, 0x92, 0x92, 0x82, }, {'F', 0xFE, 0x90, 0x90, 0x90, 0x80, }, {'G', 0x7C, 0x82, 0x92, 0x92, 0x5E, }, {'H', 0xFE, 0x10, 0x10, 0x10, 0xFE, }, {'I', 0x00, 0x82, 0xFE, 0x82, 0x00, }, {'J', 0x04, 0x02, 0x82, 0xFC, 0x80, }, 0x7E {'K', 0xFE, 0x10, 0x28, 0x44, 0x82, }, {'L', 0xFE, 0x02, 0x02, 0x02, 0x02, }, Look up pixels of {'M', 0xFE, 0x40, 0x30, 0x40, 0xFE, }, {'N', 0xFE, 0x20, 0x10, 0x08, 0xFE, }, Glyphs {'O', 0x7C, 0x82, 0x82, 0x82, 0x7C, }, {'P', 0xFE, 0x90, 0x90, 0x90, 0x60, }, {'Q', 0x7C, 0x82, 0x8A, 0x84, 0x7A, }, {'R', 0xFE, 0x90, 0x98, 0x94, 0x62, }, {'S', 0x62, 0x92, 0x92, 0x92, 0x8C, }, {'T', 0x80, 0x80, 0xFE, 0x80, 0x80, }, {'U', 0xFC, 0x02, 0x02, 0x02, 0xFC, }, {'V', 0xF8, 0x04, 0x02, 0x04, 0xF8, }, {'W', 0xFC, 0x02, 0x1C, 0x02, 0xFC, }, {'X', 0xC6, 0x28, 0x10, 0x28, 0xC6, }, {'Y', 0xE0, 0x10, 0x0E, 0x10, 0xE0, }, {'Z', 0x86, 0x8A, 0x92, 0xA2, 0xC2, }, }; Columns Code

Send tones for outFreq of each pixel of char Si5351

// take glyphs of message and send void sendMsg(char *m) { int c, i, j; // c scans msg, i & j scan the glyphs & rows int pix; Message // pix scans pixel cols in glyph c = 0; 1 Up to end while (m[c] != '\0') { // scan until end of msg for (i = 0; i < NGLYPHS; i++) { 2 Scan glyphs // scan glyphs, scan all rows to preserve timing if (m[c] == glyphs[i][0]) { // if m[c] found at [i][0] for (j = 1; j <= 5; j++) { 3 If glyph found // read glyphs[j][1] to [j][5] for (pix = 1; pix <= 7; pix++) { read columns // font cols b1-b7 for USB if (bitRead(glyphs[i][j], pix) == 1) { // send pix outFreq(freq + (pix * SHIFT), PIXTIME); // calc output freq } else { delay(PIXTIME); 4 If pixel ‘on’ } } output freq } delay(CHARGAP); } } c++; } } Reception • Any RX, USB

• Using SDR on 40m, RX 7076KHz USB frequency TX on 7077kHz Gives 1000Hz tones

Sidebands • Example: 2.2Hz tones sent for 220ms each Demo

UNO UNO

Si5351 Si5351 DCRX

LCD LCD Enc

A/D MacBook Argo Demo Si5351 DCRX