by: Torbjørn Tyridal
published: ??.??.2009
License: Creative Commons by-nc

All usual disclaimers apply. No warranty of any kind provided. follow these advices at your own risk and expense.

Introduction

All those nice R/C simulators and no hardware to control them. I do have a hitec prism 7 though. This project will propose an interface to connect the prism 7 to the PC's USB port. This will let you use prism 7 (and probably any other) ppm/pcm based transmitter with software such as FMS, probably also ms flight simulator, if you so wish.

Use with commercial simulators

This interface will not work with Phoenix, Reflex XTR, Realflight, Aerofly etc. Those sims are typically shipped with a custom joystick with some specific id's and doing some authentication back and forth between the simulator and the input device.
Such protocols and codes are not revealed here. If you known them, this is all hardware you'll need. (I've even heard some of them are customers of Atmel)

Hardware

usb key with level converter

three piece hardware mod (don't mind the red wires in upper left corner - they are left overs from ps3guitar)

For prototyping the Atmel USB key (AT90USBKey) is great. The one and only additional, but important part, is level conversion so we don't burn the uC: One transistor and two resistors with about the right resistance, not to large to miss edges, not to small to avoid oscillation.

signal&ground pins for prism7

Signal & ground pins for prism7

The transmitter signal is tapped of the Prism 7 in the rf-module socket.
For the schematics, please note that the power module is optional and not really tested - it will also depend on your transmitter, although ~9-10 V is usually a safe assumtion.
In addition only option2 for level conversion is tested, as seen in figure1. (I didn't have any free npn transistor laying around)

Schematics

PPM/PCM R/C transmitter USB interface schematics

Software

oscillator view of ppm signal

PPM signal example

The ppm signal from the transmitter is a puls-train with varying distance(time) from the previous edge (nominal to 1.5ms if I recall correctly). n-number of channels are transmitted and then there is a short pause until it all repeats.

A nice way of capturing this is to setup a timer and pin-level-change interrupt. Reset the timer on every positive or negative edge (depending on your transmitter) and convert that time to a 8-bit value for the USB HID report. We sync by letting the timer run out.

The software depends on the usb stack provided by atmel with the AVR usb key. the stack can also be found in AVR328 USB Generic HID Implementation on megaAVR devices

code