SCRIBER – Hellschreiber on a humble PIC

updateUSB controlled version of Scriber + Evaluation PCB, Available – April 2019


Brazil using 1mW via the QO100 Satellite
Brazil using 1mW via the QO100 Satellite

The screen shot above is courtesy of Roland, PY4ZBZ, the equipent had just been switched on, the text is still easily readable with large frequency drifts / doppler.

Duplex Scriber to Scriber QSO on QO100 - 21/3/2019
Duplex Scriber to Scriber QSO on QO100 – 21/3/2019


Scriber_v1.0 Source Code→  Download Page

SCRIBER is an RS232 to Multi-tone Hellschreiber converter in a 14pin DIL PIC16F1615  microcontroller. The output is an audio signal and PTT control designed to connect directly to an SSB transceiver. The audio signal SCRIBER synthesizes will display as text directly on a waterfall display. No decoder is required. The spectraly pure (clean to >50dB) output is well suited for linear amplification to high power in the crowded HF bands.

Multi-tone Hellschreiber is unique in being an inherently variable detection threshold mode – ‘the slower you go the farther you can go’.  SCRIBER takes full advantage of this ability using it’s Bandwidth control which varies both speed and bandwidth in unison over a 100:1 range.

Scriber's output spectrum

Screen shot of Scriber’s output at typing speed in beacon mode showing the spectral purity and text clarity


Poly Phase Multi-tone Hellschreiber (PP/mt Hell)
Full ASCII character set plus 10db ‘lifted’ dot & dash CW characters
100:1 variable speed/bandwidth, 3char/s typing speed to 5Hz bandwidth QRSS
Good text clarity and spectral purity
80 character double Buffered Message input
Message Resend
Beacon mode
Beacon Message store in flash memory.
PTT control of the radio
Tone Invert switch for LSB

User Controls

In keeping with the philosophy of Fuzzy modes, the Bandwidth and Speed controls are analogue (real knobs!) and may be set over a 100:1 range from a fast wideband ‘chat’ at 30 wpm using 500Hz Bandwidth, down to extreme narrow band QRSS at 2 characters/minute and 5 Hz Bandwidth.
This corresponds to a 20dB increase in detection threshold at the slowest speeds.

Sriber BW controlThe effect of varying the Bandwidth control in real time, as the bandwidth is reduced, the speed will decrease and the received S/N will increased. The above picture shows only a small portion of the 100:1 range of this control.

Scriber Speed controlThe effect of varying the Speed control in real time, bandwidth is not changed but more integration time is available. This is useful when doppler spreading is present or to slow a maximum bandwidth signal to fit a webSDR. The stretched vertical pixel columns in the last two characters clearly show the poly phasing of the raised cosine windows used in pp/mt hell.

The only other controls are a Beacon on/off switch which will continuously send the message held in the beacon store and a Normal/Invert switch which inverts the characters, useful for sending in lower sideband  or to descending waterfall displays.

Weak Signal Performance

The 3 screen captures below show weak signals at various transmitted bandwidths. In each case the waterfall display controls were optimised to match the transmission and the signal level reduced to a level where the image was still unmistakable. The signal levels quoted are for an equivalent single carrier .

Sribe 500Hz BW -125dBm 500Hz BW Typing speed, 30 wpm @ -125dBm on 144MHz

Scriber 50Hz BW -135dBm 50Hz BW  Slow hell, 3 wpm @ -135dBm on 144MHz

Scribe 5Hz BW -145dBm 5Hz BW very slow, 2 char/min @ -145dBm on 144MHz

RS232 message input

SCRIBER accepts standard ASCII  messages upto 80 characters terminated with a <CR> at 9600baud and echo’s the message back to the terminal as it’s being sent. The message is sent on receipt of the <CR> character.

If just a <CR> is input at the prompt, Scriber will resent the last message sent ( useful for a ‘QRZ’ repeat request).

If the first character in the message is an ‘underscore’ ( ‘_’  , 5f hex) the remainder of the message will be stored in flash memory and sent repeatedly when the BEACON switch is ON.

Visual CW Characters

Two little used character pairs have been ‘stolen’ from the full ASCII set and used to send the ‘dot’ and ‘dash’ morse characters.

An ‘open square bracket < [ >’ will send a ‘dot’.   A ‘ close square bracket < ] >’ will send a ‘dash’.  These keys are usually adjacent on a keyboard making manual entry of visual CW easy. The keys are case insensitive.

Both CW symbols are single horizontal lines and have only one tone present so SCRIBER sends these two at a higher output level (lifted by 10dB). If the text characters are lost in the noise it may still be possible to use visual CW.  It is also useful in beacon mode for station identification or as a more visible message end (K) character.

The forward and back slash characters ( / and \ ) are also single tone and given a 10 dB  boost (highlight). They may prove useful as  preamble eg.  /\/\/\/\/\  , or used as a pair during a QSO  eg.   /\ = QRQ (send faster, signal is strong) , \/ = QRS (send slower, signal is weak)

Analogue Interface

An optional use audio interface is available on pins 11,12 & 13 of the chip, this enables 5v p-p speech or data on pin 12 to be passed to the PWM output on pin 5 when pin 11 is pulled low. Alternatively, if RX audio is fed to pin 12 then pin 13 will output a combination of both the TX & RX signals. Feeding this output to a PC running Spectran or Argo allows easy ‘netting’ to a received signal and monitoring of both sides of a QSO on screen.

The PC terminal

I use a simple line based RS232 terminal program called Termite which offers a few useful facilities like message store and repeat messages , but any serial terminal or a 2nd micro-controller may be used.

termite1 Scriber’s heading and prompt

termite2 Termite’s simple setup screen

The Scriber’s input is double buffered and will accept a new message whilst a previous message is being sent. Flow control is not implemented, so large streamed ascii files are not supported.

Electrical spec :-

Supply 2.5 to 5.5 volts @ <10mA
Hellschreiber centre frequency 800 Hz +/- 1%
Total signal bandwidth 5Hz to 500Hz settable in 1dB sensitivity steps
Character speed 2 char/min to 3char/sec (100:1 speed range)
Spectral purity > 50dB
Sample Frequency 15.625KHz
PWM O/P 31.25 KHz, 9 bit resolution, centre aligned PWM
RS232 In/Out std ASCII @ 9600baud, 8 bit, 1 stop, no parity

Basic Scriber Circuit
Basic Scriber Circuit

Pic16f1615 Scriber Pin functions

Pin 1 – Vcc +5v supply @ 5mA, Needs to be ‘clean’ to <10mV p-p to prevent supply noise contaminating the spectral purity of the output signal on pin 5.

Pin 2 – Beacon switch, 0v selects beacon mode.

Pin 3 – Invert switch, 0v selects tone inversion (mirror text).

Pin 4 – Reset push button, 0v resets the microcontroller (transmission abort).

Pin 5 – Hellschreiber PWM output – a 31.25 KHz (+/- 1%) square wave is always present on this pin. When no message is being sent (idling) the duty cycle is 50:50. During transmissions the duty cycle is 100% modulated with the 800Hz Hellschreiber signal. The o/p may be used in many ways (see below) but is usually low pass filtered to provide an audio signal. This o/p can source or sink upto 100mA

pin 6 – TX select output – active high during message sending. Used to switch the radio to transmit. may be used to directly drive an opto isolator LED (upto 100mA) or via a transistor/FET inverter to drive a Push to Talk (PTT). A fixed 50mS delay is applied after activation before the message starts to allow for relay switching times.

pin 7 – TXD – direct 9600baud rs232 (idle = 0v) o/p back to the terminal. this is 0v/5v level rs232, sufficient for short cables.

pin 8 – RXD – 9600 baud message input from the terminal, this is UART polarity (idle= 5v) and requires an inverter to interface to      RS232

pin 9 – Speed – Analogue 0 to 5v input, slows the hellschreiber speed below optimum to allow more time integration (5v = fastest)

pin 10 – BW – Analogue 0 to 5v input, sets the hellschreiber signal bandwidth and optimum sending speed for that BW (5v = widest)

pin 11 – external PTT switch,  audio present on pin 12 is output as 31.25KHz PWM on pin 5 when this pin is held low, pin 6 is driven high (TX) whilst this pin in low,  leave unconnected if not required.

pin 12 – ADC audio input, 0 to 5v analogue input, bias externally to mid rail, audio on this pin is converted to PWM on pin5 when pin 11 is low. leave unconnected if not required. (connect to pin 5 of PicKit 3 for incircuit programming)

pin 13 – DAC audio output, 0 to 5v analogue output of the PWM signal on pin 5 during transmissions, local monitor of pin 12 during idle, leave unconnected if not required. (connect to pin 4 of PicKit 3 for incircuit programming )

pin 14 – Vss 0V Ground.


pins  2, 3, 4 ,8 & 11 have internal pull-up resistors

pin 13 is a high impedance output , a unity gain buffer and simple R-C filter are normally required if this pin is used.

any circuitry connected to pins 12 & 13 must be temporarily disconnected during in-circuit programming of the chip.

Using Scriber with an SSB radio

The output on pin 5 of the chip is a 31.25KHz PWM square wave modulated by the 800Hz hellschreiber signal. This signal is normally low pass filtered to obtain a clean audio signal to drive the data (or mic) input of an SSB radio. The basic circuit given above uses a simple passive RC filter to give a 500mV p-p clean output and remove the dc component. Alternatively, a 2nd order 1.5KHz active LPF may be used to obtain a higher signal level if required.

The RX audio (or data output) from the radio is fed to a PC running Spectran or Argo or similar spectrum display software. It is very useful to display Scribers output during transmission on the same display, this makes it easy to ‘net’ to a received signals frequency, adjust the sending BW and speed controls and view both sides of a QSO. A simple resistive mixer in the audio fed to the PC may be used to combine the RX and TX audio signals, alternatively, the RX audio may be applied to ADC input (pin12) of chip and the PC fed from DAC output (pin13), ( additional RC filtering, biasing and buffering is required to use these pins).

The TX audio level is best set using a string of preamble characters  ( /\/\/\/\ ), adjust the drive level such that the transmitter output power is at least 3dB below the transmitters maximum power. This will ensure a clean transmission and prevent the transmitters ALC modulating the amplitude.

Using Scriber at mm or light waves

The PWM output may be used directly to pulse modulate an LED, Laser or PIN switch to impose text, speech or data directly onto a carrier wave in applications where spectral purity is less important. As a simple example, an LED may be driven directly by pin 5 of the chip (upto 100mA),  a photo diode + pre-amp fed into a PC running Spectran is all that is required to receive the signal. The received spectrum will be seen to contain a number of ‘copies’ (aliases & harmonics) of the original signal. Spectran will only recover the baseband signal however SRD software such as HDSDR may be used to tune into any of the higher frequency ‘copies’,  the AM signal at 31.25KHz is particularly useful as a subcarrier to avoid 1/f noise, 100Hz hum and ambient light associated with the baseband signal. also present is an alias signal at 15.625KHz, this is effectively double sideband suppressed carrier (DSB) and may be tuned as either LSB or USB.

Scriber will generate PWM speech at pin 5 when mid rail biased audio (limited to 5v p-p) is fed to pin12 (ADC) and pin 11 is pulled low (external PTT).

On the Air

Hellschreiber, like RTTY and CW, is a free format QSO mode, however the following format suggestions may be found useful.

  • CQ calls – using a preamble of  ‘ /\/\/\/\ ‘ in front of a CQ message will immediately identify the signal as pp/mt hell and enable the receive end to adjust the waterfall speed and RBW controls to quickly resolve the text. Additionally the / and \ characters are transmitted at a 10dB higher level and have a very distinct audio signature.
  • It is usual to leave the Speed control at maximum and use the BW control to set the required bandwidth, Scriber will then use the highest sending speed for the bandwidth selected. A good starting point for CQ’s etc is 100Hz to 200Hz Bandwidth.
  • Optional use a pair of / and \ characters at the end of a message as simple feedback may be found useful.  /\ = QRQ (send faster, signal is strong) , \/ = QRS (send slower, signal is weak).