jump to navigation

NexGen Flight Simulator: Hacking the Navigation Computer Display June 6, 2013

Posted by phoenixcomm in 16 Segment driver, Aircraft, Arduino, CP-1252/ASN-128, DIY Aircraft Cockpit, Embedded CPU's, Ethernet, Flight Simulation, Hardware, Indicator Lamps, Multi Function Display, ps2 keybaord, Semiconductors.
Tags: , , ,
1 comment so far

CP-1252This is the CP-1252/ASN-128 Navigation Computer Display.  The NCD was originally designed for Doppler  navigation, but will work in my application. I have reprinted the Analysis of this from my WordPress Blog (22Apr2011)

The Analysis:  The NCD is comprised of 4 groups: Display, Keyboard, Rotary Switches, and Thumb Wheel Switches.  The Display is comprised of 4 16-segment and 13 7-segment PinLite lamps, and two LED’s.  The keyboard is comprised of a 10 key number pad and 4 special keys, it also encodes A-Z. There are two rotary switches, and two thumbwheel switches as well. I also found a users guide, TM-1-1520-238-10 pages 3-34 through 3-46 on the web.

In it’s dim past it had been converted to a flight sim, and the only thing left whrere: the display, switches, light plate, and lots of wire. Each component, had each of their connection(s) brought out in to a header.

The Plan: As it is almost impossible to find a 16-segment display driver, but I really found two parts MAX6954 (SPI and QSPI interface), and MAX6955 (I2C interface). Both devices have the same programing model and have a I/O expander which could handle the keyboard. I have chosen to use the I2C interface. I have broken down the NCD into the following sub-units:

  • Two MAX6955AAX+ :
    • one will handle the 4 16-segment displays.
    • one will handle the 13 7-segment displays.
  • The keyboard will be interfaced via a standard Ps2 keyboard encoder that will be harvested from an old ps2 keyboard.
  • I will also need 2 bytes of I/O as well:
    • 1 byte of output to handle the two rotary switches, via two priority encoders (74LS148).
    • 1 byte for both thumbwheel switches (they are encoded to 4 bit BCD).
  • And lastly I need a USB interface to talk back to the IOP (IO Processor)

I also need a embedded microprocessor, the NCD information does not need to be super fast, as in reality it is only a dumb terminal, so an Arduino should be able to keep up with everything, if there are speed issues I will most likely switch to a TI Stellaris Launchpad module.   The NCD is either taking keystrokes from the pilot, or updating the display. In the words of the Outer Limits “There is nothing wrong with your television. Do not attempt to adjust the picture. We are now in control of the transmission. We control the horizontal and the vertical”. In the scheme of things this unit will only be another end point on the IOP which is sending the key strokes or and knob turns to the simulation processor. And in turn the NCD in effect listens to the NavGroup via the IOP for present positiontime to go etc.

 Keep Tuned in More to Come!

NexGen Flight Simulator Blog Index

ARINC 410 Subsystem – Audio Routing March 4, 2012

Posted by phoenixcomm in Arduino, ARINC 410, Audio, DIY Aircraft Cockpit, Ethernet, G-4390, Gables Engineering, Linux, Radio Sub System, Semiconductors, Software.
add a comment

These are just some thoughts its not all here yet.

The Analysis: Well we need multiple audio sources, from things like VATSIM, NAV Morse code, co-pilot, weapons officer, and if you are flying formation a plane to plane chatter. For VATSIM, and for the inter-plane chatter we will need internet.

So, we need a computer that will have multiple audio cards, well that is going to eliminate a windows box. So I guess I need a Linux box, and we need a distribution that supports ALSA, the Advanced Linux Sound Architecture. So far so good. This box will also handle the radio ARINC-410 interface(s), the Morse Code generator, do the slant range (figures out if you are in range of the station), and drive my DME display. 

So here are all the components:

  • Radio Heads
  • ARINC-410 Interface Card
  • Audio subsystem
  • arduino
  • Linux pc with ALSA

. Since each ARINC-410 Interfaces have 3 bits for addressing the heads you can have 8 heads per interface. I could add a board select to each board so two boards gives you 16 radios..

Now you will notice that the lower arrow allows you to chain crew stations, so that means you need one audio adapter per crew station. Each of the Isolation Amplifiers use the radio heads volume control.  With all of this we still have not taken care of the mic.

Notes:

  • the audio wiring between the head and the interface has to shielded.
  • I have just use 3 audio sources for an example.
  • Remember that you have to dedicate one channel for an intercom (if you have multiple crew stations).

ARINC 410 Interface subsystem, Continued March 2, 2012

Posted by phoenixcomm in Arduino, ARINC 410, Audio, DIY Aircraft Cockpit, Ethernet, G-4390, Gables Engineering, Linux, Radio Sub System, Relay, Semiconductors, Software.
2 comments

More information and gotchas:  

Interface Specification:  Remember I said that that the ARINC-410 has 5 bits?  That means our Bus_0 through Bus_4 is the ARINC-410 A throgh E.  Now I can use Bus_5 for Read/Write (the write is Low Active). Ok that only leaves one more,  Bus_6 and I’m going to use it for a strobe. I can do that with a Schmitt Trigger.  Now I did say that was all, but hey what about a reset line?? I don’t know if I need one but we can use Bus_7, and that gives us all 8 bits in the interface.

Outputs:  Well what are our outputs?  The table below shows the standard outputs, that is what the interface has to drive.

Function Voltage Notes
Panel Lights 28v
Dial Lights 28v
DME Lamp 28v Only on NAV

We read the position of the power switch in the status register. But it would be nice to drive all those fault flags.  So how do you drive 28vdc from TTL? There are really 4 ways:

  1. High Voltage Inverter Buffer/Drivers; such as 5406, 5416, 7406, 7416. But have no voltage immunity.
  2. Relays; You still need to drive them, that is the coil.
  3. Optoisolator;  such as TIL111. My personal choice for driving HV loads, and there good for 70volts..
  4. Solid State Relays; SSR’s are robust, and can handle both large currents and high voltages.. You can find used ones on ebay.

Audio:  The Gables Radio’s have Volume IN-HI, IN-LOW, OUT-HI and OUT-LOW. This will be a headache  that I don’t want to deal with in this post. But we still need to handle the audio some how. This leaves two choices:

  1. Do what Microsoft Flight Simulator and others do. Just ignore it.
  2. Lets build an audio sub-system.  The benefits really starts to shine when you have more that one position to fill.. ie. pilot, co-pilot, navigator, weapons officer
    • If you fly VATSIM their audio is now on a channel, on the COMM head.
    • We now can simulate Morse Code signals & DME milage station on the NAV head. More later as this will dictate other changes, like outputs to drive from-to flags, etc.
    • You can chain the audio outputs.
    • You can have the same audio at the instructors console.
    • You can record the audio for play back.

Looks like we need a part 3 later..

ARINC 410 Interface subsystem February 21, 2012

Posted by phoenixcomm in Arduino, ARINC 410, Audio, DIY Aircraft Cockpit, Ethernet, Flight Simulation, G-4390, Gables Engineering, Linux, Radio Sub System, Semiconductors, Software.
Tags: , , , , , , , , ,
5 comments

Well it’s about time I posted this interface. I’m not going to show you the whole thing because it goes on for pages and pages. Instead I’m going walk you through one channel in and one channel out.  I’m going to assume that you have a older radio head you know the ones with out the fancy LED displays.  Most (here I go assuming again) use the ARINC 410 interface which is a 2 of 5 code. I described it here in an older blog.

G-3717

Gables G-3717 Dual Nav Head

Nav Pinout

The Analysis: Well the first thing we found out about ARINC 410 that the signals are low active which means they must be ‘pulled up’  if the radio head does not have pull up resistors installed. As you see from the NAV-1 table we need the following information:

Signal Name ARINC410
Whole MC TENS A, B, E
Whole MC UNITS A, B, C, D, E
FRAC. MC TENTHS A, B, C, D, E
FRAC. MC HUND. B, C
DME TENS A, E
DME UNITS A, B, C, D, E
DME TENTHS A, B, C, D, E
DME HUND C
FREQ SEL COM.
DME Indicator 2
ILS Energize
ILS TEST SW
POWER
PANEL LTS  28v
DIAL LTS  28v
VOLUME 3

The Plan and a little more Analysis:  I need to get the 4 connectors for the Gables G-4390 (five heads in one panel).   So the one connector is a PTO2A-22-55P so I need my connector guy to give me the mate to this number. It looks like I only have to worry about the fields labeled DME and that a max of 5 bits. So I’m just going to throw away the other 3 bits. There is no off the shelf  2 0f 5  to ASCII decoder, so lets not worry well do that in the driver..

I picked a Arduino  Duemilanove to run the driver and talk to the flight simulator. It only has 14 digital I/O, so could use the Mega 2560 as it has a bunch of digital I/O.

The Plan:  Ok. So we have to talk to the different heads in the plane. And you could have a bunch. So we need a protocol to talk bi-directional to the heads.. here we go.

  1. Write to the interface the head & channel you want to talk to.
  2. Read the response from the head.

Bi-directional communication must use two ports one out and one in.. but its easy to combine them and use tri-state drivers.  First I want to use the 74LS125 or 126. This is an quad package, with each of the buffers having separate controls.   So I can get away with 8 bits..  first since the max we need is to count 0 – 5 thats 3 bits. So lets use the first 3, that give us 5 more to select a max of 32 heads. So lets take a pair of 74LS138 3 to 8 decoder one of them has to be hooked up to the D0, D1, D3 to decode which of the words you want A to E. The second 138 is hooked up to the D4, D5, D6 this will give us 8 radios, really 7, because I’m going to use 0 for power status & LED controls..  Next you have to AND the Radio + Chanel to drive the 5 74LS125 Tri-State Control signals..   So if you use my signals you end up with this: EN_Chan1 + EN_Radio1 = EN_R1Ch1.

The Software:  Ok here goes I’m not going to write the code.. but here is what you need to do.

  1. Initialize the registers.. #int radio = 0; int channel = 0; odd = 0; max_radio = (you radio count + 1(status)); freq [radio][chan]; freq2[radio][chan];
  2. Start Odd / Even loop.. #for(odd = 0; odd < 2; odd++)
  3. Start Radio loop.. # for(radio = 0; channel < max_radio;  radio++)
  4. Start Channel loop.. # for(channel = 0; channel < 5; channel++)
  5. write to the control register with radio, channel.
  6. read the control register and store the results..
  7. if ( odd = 0){ freq[radio][chan] = result from reg}
  8.  if (odd = 1){ freq2[radio][chan] = result from reg}
  9. if (odd > 1) write ERROR.
  10. End of Channel Loop
  11. End of Radio Loop
  12. if(odd = 1){  now check for changes.. you want to do this with some loops..
  13. if( freq[radio][chan] != freq2[radio][chan])  its changed.. now send to the simulator..
  14. odd = 0;}
  15. End of Odd /Even loop

FINS & FYI:  You will need a bunch of the 125’s and lots of pull up resistors. Just for doing my Gables G-4390 with out any more radios lets do some math.. 5 heads * 5 channels per * 5 bits = 5 cubed or 125 buffers (32 packages)  & 125 resistors this is not including status or light drivers..  I wire wrap (power tools), but that a lot of buffers. I am working on putting the whole thing into a Xilinx part. This is a product that I am going sell at Flite-Tronics.com. This still leaves the problem with audio, or driving other indicators, like ILS flags, etc.   If you attempt this I really recommend that you check out Avnet they have the best prices for semiconductors period.

I wish to thank Gables Engineering for the pin-outs and outline dimensions.

%d bloggers like this: