NTX2 transmitter

Posted on


The NTX2 is a transmitter on the 434MHz frequency.

As seen in previous post, this frequency can be used without licence in most of Europe. NTX2 power is 10mW wich is authorised in the sky.

According to the documentation, NTX2 is supposed to transmit only to 500m, but with good line of sight, signal can be received from the sky at more that 40Km.

NTX2 is transmiting by applying a voltage on it’s TXD pin. Changing this voltage let us change a bit the frequency used to transmit.

The module is factory-set to produce the specified FM deviation with a TXD input to pin 7 of 3V amplitude, i.e. 0V “low”, 3V “high

So we can apply some voltage on TXD pin to represent a 0 and another voltage to represent a 1. On the receiver side, we will see the frequency changing, and we will be able to decode 1 and 0.

The “factory” frequency (for exemple 434.650 MHz) is around 1.2V applied on TXD pin (not 1.5V)

When applying a voltage < 1.2V the frequency will be under 434.650Mhz, and applying a voltage > 1.2V, the frequency will be above 434.650Mhz.

The NTX2’s TXD input is normally driven directly by logic levels but will also accept analogue drive (e.g. 2-tone signalling). In this case it is recommended that TXD (pin 7) be DC-biased to 1.2V approx.

As read on UKHAS, the better “shift” seems to be around 500Hz.
If we want 500Hz between 0 and 1, we shoud apply a difference of 0.25V on the TXD Pin.

FM deviation (peak) ±3 kHz

So we have 6KHz deviation for 3V range.

3V / 6000 = 0.0005V for 1Hz 500 × 0.0005V = 0.25V for 500Hz

So we can apply for exemple 2V for a 0 and 2.25V for a 1… (Or 1.25V and 1.5V etc..)

GPIO / Serial

According to UKHAS members, it’s not possible to use a regular GPIO output on the RaspberryPi to properly shift voltage to the NTX2 TXD. The reason is the Raspberry is not “real time”, so you will successfully change voltage (output of GPIO and voltage divider), but the timing will not be accurate enough to successfuly decode packets.

The “trick” is to use a serial connection. The reason is the serial circuit has it’s own crystal that will produce an accurate timing.

Dave Akerman use the internal embeded serial available on the Raspbery. As I wanted to keep the embedded serial, available for control, I used a Profilic PL2303 USB serial instead. This worked fine.

Note that the arduino has an accurate timing and don’t need the “serial” trick

Voltage divider

Output of the serial of the RaspberryPi is 3.3V level but output of Profilic PL2303 could be AFAIK 3.3V or 5V level.

In both cases, we will need a Voltage Divider to have the 0.25V shift within the range 0 - 3V. For exemple we could have: Low level (0V) -> 2.38 V High level (5V)-> 2.63 V

See details on UKHAS wiki and see how to calculate resistors.

Using the serial device

Using serial is, I think, also nice, as we can easily sent data to the serial device.. It will be automatically “coded” to 0 and 1. So having the NTX2 transmitting “Hello wold” is just:

  • Setting the RaspberryPi serial device to the correct settings (Baudrate, Bit par character, Parity, Stop bit):

man stty

  • Sending the text to the serial device:

echo "Hello world" > /dev/serialDevice

On the dl-fldigi side, we can easily decode by setting the same serial parameters into the RTTY tab