A simple improvement that I have done to all my RTL-SDR sticks is the hardening against electromagnetic interferences (EMI) or noise using a self made sheet metal housing.
The ADSB receiver OS image that I use provides several performance graphs including the CPU temperature. For receivers installed on a remote location that is maybe not enough to monitor what’s going on inside and outside the box. For that reason I decided to install additional temperature sensors in my ADSB receiver box. My choice was the the Dallas DS1820 1-wire temperature sensor. It’s easy to interface to an Raspberry Pi and the kernel comes already with drivers. Perfect for that purpose.
This upgrade is divided into two steps: 1. Connect the DS1820 to the Raspberry Pi and configure the kernel drivers – 2. Reconfiguring the collectd service and the shell script that is creating the performance graph so that the additional temperatures will be logged and plotted as well.
Here is a first upgrade for my ADSB receiver box – GPS precision time. The MLAT position calculation for aircrafts depends on a precise time. While there is already a time synchronization between MLAT receivers in a specific area it is also possible to add a precise time source to improve the calculation result. A GPS receiver is such source when equipped with a PPS (pulse per second) output. The PPS is a signal with a width of less than one second and a sharply rising or abruptly falling edge that accurately repeats once per second with low jitter. The GPS time and PPS signal are then used to sync the internal ntp time service and keep a low offset and jitter.
In a previous post I described how to control the internal tuner module of a common 1.2GHz FPV receiver by a PC.
Since this setup was only for general tests I put some more efforts and put an AVR tiny44 in control.
On a 4 channel receiver I removed the original micro-controller and replace it by a AVR tiny44, running on internal 8MHz oscillator.
The tiny44 takes inputs from the 4 DIP switches and controls the tuner by I2C and the LED.
Attached to this post is the source code for the tiny44, written for WinAVR compiler.
With this code you have the following functionality:
|ON||OFF||OFF||OFF||Favorite frequency 1, default 1240MHz|
|OFF||ON||OFF||OFF||Favorite frequency 2, default 1280MHz|
|ON||ON||OFF||OFF||Favorite frequency 3, default 1276MHz|
|OFF||OFF||ON short||OFF||Manual tune, 1MHz up|
|OFF||OFF||OFF||ON short||Manual tune, 1MHz down|
|OFF||OFF||ON long||OFF||Auto tune, 1MHz up every 100ms|
|OFF||OFF||OFF||ON long||Auto tune, 1MHz down every 100ms|
For DIP3 and DIP4 a long press will be >1 second.
The frequency set using DIP3 and DIP4 will be stored in EEPROM 5 seconds after last tuning action (DIP switch used).
After power cycle this frequency will be the start for new tuning.
Frequency range for manual/auto tuning is 850MHz to 2200MHz in 1MHz steps.
Wiring is given in the source code, header of main.c.
Ok Dan, here you go. 😉
A short summary of my attempts to control the tuner modules of widely spread 1.3GHz FPV receivers.
The description covers the receivers coming with two sets shown below:
The first one is a 23 channel receiver, the second a 4 channel only.
Both receivers are equipped with the same tuner module which uses a TA1322FN down converter. The tuner module is driven by a micro-controller via I2C bus. Details about the internal I2C bus protocol can be found in the TA1322FN datasheet.
The tuner module is set by a single 4 byte data frame in both receivers.
The following is an example from the 4 channel receiver setting the receiving frequency to 1080Mhz:
Data frame send to tuner: 0xC2 0x30 0xBC 0x8E
Split up in accordance with the datasheet:
ADDR 1 1 0 0 0 0 1 0 = 0xC2 MA1 MA0 R/W DIV1 0 0 1 1 0 0 0 0 = 0x30 N14 N13 N12 N11 N10 N09 N08 DIV2 1 0 1 1 1 1 0 0 = 0xBC N07 N06 N05 N04 N03 N02 N01 N00 CTRL 1 0 0 0 1 1 1 0 = 0x8E CP T1 T0 TS2 TS1 TS0 OS
ADDR = tuner module I2C address
DIV1 & DIV2 = PLL divider
CTRL = PLL control byte
Band switch byte is not send and therefore not used.
From the control byte the PLL is set to:
– 50uA charge pump current
– normal operation mode & charge pump on
– reference divider 1/64 resulting in 62.5 KHz reference frequency
The divider is set to 12476. With the following math it’s possible to calculate the reception frequency:
fosc = 2 x fr x divider = 2 x 62.5 KHz x 12476 = 1559.5 MHz
To high? No, you must subtract the 1. IF with 480 MHz, so 1559.5 MHz – 480 MHz = 1079.5 MHz
The 23channel receiver uses a slightly different data frame 0xC2 0x30 0xC8 0x8E which results in a reception frequency of 1081 MHz.
For my tests I used a USB-I2C interface. The USB-ISS from robot-electronics.co.uk is very handy for this purpose and supports not only I2C but also other bus types.
VS2010 Source code for PC based MFC program is attached to this post. The program will just let you set the reception frequency in a range from 850 MHz to 2200 MHz.