Skip navigation

For the past few years, hey its been more like a decade. I have been working on an experimental aircraft the Phoenix2000 which was to have flown in, yup you guessed it, thirteen years ago. Well we can all dream a little. In my currently reduced circumstances I can not build the airframe, hey there is only so much crap you can get into a two bedroom apartment. So a few years ago I decided to write a simulation of the aircraft. As it turns out building the plane is much easier than getting all the software correct. And since this is a FBW that is FLY BY WIRE ie no cables from the controls to the surfaces, the software MUST BE RIGHT! Well so I wanted to build a repository for all my documents, part numbers, drawings, etc. so that people could comment on my work.

Most of my software is PROPRIETARY, but the APIs are PUBLIC. I will release software only via the SUN MICROSYSTEMS Licence, and with the proper NON-DISCLOSURE AGREEMENT in place. Also let me say this: This is not for Microsoft Windows© This system will only run under UNIX / Linux, so please don't ask for a Windows distro.


To this end I have published parts of the invtory system.



Keep Tuned In More To Come

Cris H~

If you can remember last time I said that I would describe the Control program running on the Linux box. Well its rather simple once you understand the signal(2) command. This is the mechanism which receives the interrupt and then sends it the right handler or function.


This diagram is a simplified block diagram of RadioControl running on the LinuxPc.


So lets assume that the pilot changed the frequency on the Radio #2 on that Gables head.

DATA TO RadioControl from the Slave

  • The Slave will send a 5 byte stream.
  • The first byte is 0xFF as to tell the HOST that a message is ready.
  • The second byte's first nibble is the 'helper' to that tells RadioControl which of the RadioControl_xxx programs to send the packet to.  So now the RSS has the information so what is it going to do with it.

DATA TO Simulation Possessor FROM RSS.

DATA TO RSS FROM Simulation Possessor


    • It could do nothing but ACK this transmission and then the RSS would run as if every thing is normal
    • Then the RSS would have to calculate the Slant-Range and update the required instruments.
    • If the audio is on or not the Morse Code Generator will have to pump out the stations ID (if required)
    • The Host will also have to send DME (miles) + TO/FROM flag.


    • It could say that the radio is dead. (fault) and tell the RSS to change the flags.
    • It could say that the radio power circuit breaker is blown.  (fault) and tell the RSS to change the flags.


Pease Note. That calculation of the Slant-Range, along with the station ID is part of a FAA Database look up, and or knowing where the aircraft is part of the RSS NAVGROUP network listener.


Keep Tuned in More To Come

Cris H~

This is a copy of Scotts article that I found the picture of so called good soldering technique published in Import Tuner:


The most fundamental skill needed to assemble any electronic project is that of soldering. Basic soldering is a skill that's easy to learn and not too hard to master but misconceptions on the proper procedures also includes many individuals having no clue on where to start. Soldering is accomplished by quickly heating a metal or metallic alloy to join metallic surfaces together. A good soldering job can be rewarding while a poor job can lead to electrical failures and frustration. These steps will help improve soldering skills along with teaching you the basics and importance on how to perfect your soldering skills. Doing the job right the first time eliminates the need for costly rework.


Secrets To Achieving Good Soldering Soldering Iron

1. Always use a quality soldering iron. We recommend an iron with a ceramic element core. Keep in mind that total power or wattage of the iron is less important than its thermal recovery ability. Thermal recovery is the ability of the iron to "recover" to proper temperatures immediately after soldering. Ceramic elements have been known to be better at maintaining proper temps. Although they are designed using lower wattage, they tend to heat much faster. A "cheap" soldering iron is usually constructed with a wire coil element. Wire coil units typically lose heat when used and are slow to recover from the initial temperature drop delaying usage. We recommend also refraining from using butane torch/battery-type soldering irons unless portability is crucial.


2. Proper solder tip sizes and shapes are very important in getting a good solder connection. When soldering wires, we prefer using the flat tipped ones (sometimes called "spade tips"). Avoid the rounded conical tips, which are primarily used to repair or solder very small IC chips on PC boards.

When working with wires, you want a tip that is about as wide as the wire you will be working on. A little bigger or smaller is fine, but too small and you will have trouble heating up the wire quickly or at all.


3. Always use quality type/brand solder. For electronics, solder is traditionally comprised of a mixture of tin and lead. secrets_to_achieving_good_solderingAlthough 60/40-tin/lead solder is most commonly found on the market, we prefer 63/37 eutectic solder, which solidifies almost instantly. A 60/40 solder typically cools inconsistently as areas remain soft or semisolid once applied until fully cooled.


4. Pre-tinning the wires or components (coat with a thin layer of solder) or fills the wires or connector contacts with solder so you can easily melt them together. It also prevents the need to hold heat to components for too long. Pre-tinning is accomplished by applying a thin layer of solder to the individual parts before fusing the wires together. When tinning wire, you want to make sure the solder flows all the way to the center, from the end of the wire to the edge of the insulation where you stripped it back.

Secrets To Achieving Good Soldering Solder


5. Use the right amount of solder; do not glob it on. More doesn't necessarily mean better. On the flip side, not using enough solder is just as bad, which can make the connection physically weak. A good solder joint will be smooth and shiny. If the joint is dull and crinkly, the wire probably moved during soldering and might require a do-over.

Secrets To Achieving Good Soldering Tips


6. Keep your iron tip clean by wiping it off regularly with a damp sponge or rag both before and after making connections. A dirty tip can prevent your solder from making proper contact with the parts and can slow down heat transfer to components.


7. In between making connections and immediately after turning off the soldering iron, coat the tip with solder to protect it. Coating prevents the tip's protective metal coating from oxidizing and cracking or wearing away. If you see the coating of solder on the tip discoloring and turning dull gray, add more solder to re-tin the tip, or turn off the soldering iron if you will not be using it very soon (a discolored tip with a rainbow color pattern means the tip is too hot).


8. Clean up the solder with isopropyl alcohol or denatured alcohol to remove used flux when done soldering. Alcohol evaporates and dries quickly, does not leave impurities behind, will not corrode metal, and will not hurt electronics; whereas water can take days to dry and can corrode parts or leave impurities behind.


Secrets To Achieving Good Soldering Heat Shrink Tubing


9. Lastly, use heat-shrink tubing to complete the soldering process to protect the wires.


I then wrote scott this letter (email):


                Scott - I was writing a page in my blog on element 14 entitled Soldering School and I was looking for some images demonstrating good technique. And that my friend is when I came across this picture:  bad-tech.jpg
Your intention of writing the article might have been good... But my friend you should not try to talk about a subject that you know little or nothing about. If you look at the photo you can clearly see that the solder is touching  the soldering iron:  That is a failure in good technique. The solder should never touch the iron when soldering the connection. The only time this is permissible is when you tin your iron, and then you must wipe it off in a damp sponge!
Here is a link you my blog article : You also made several other blunders:

When working with wires, you want a tip that is about as wide as the wire you will be working on. A little bigger or smaller is fine, but too small and you will have trouble heating up the wire quickly or at all.
This in fact is bad advice, The tip should alway be smaller than your work you should never use a bigger tip. The tip should not control the heat of the iron, and if your iron is too hot with a large tip your solder will flow over the work but not envelope each strand, plus you might also melt the wire's insulation. One more point shrink tubing is a good thing but only when It covers a good joint.

In between making connections and immediately after turning off the soldering iron, coat the tip with solder to protect it. Coating prevents the tip's protective metal coating from oxidizing and cracking or wearing away.
Are you kidding me!! LOL. How in the world is a clean tip going to oxidize?? You should always have a tip cleaner around for removing the slick on the tip. I used to have a old school Ungar Imperial that I had since the 70's and still have most of the original tips! Let me see thats 40 years and the tips haven't oxidized away yet.

If you see the coating of solder on the tip discolouring and turning dull grey, add more solder to re-tin the tip.
Nope not even close. First clean the tip with your sponge or tip cleaner, then you can apply fresh solder to the tip, and then wipe it off with the sponge. And then use a clean iron.junk_irons.jpg
BTW the irons that you show in this photo:  Should be avoided like the plague. You can not control this irons temperature at the tip, as its only held in place with a screw, nor do you know about temperature recovery when you are done. You should keep them for your wood burning projects, or cut the chord off and toss the iron. And all metals discolours when you heat it..

Clean up the solder with isopropyl alcohol or denatured alcohol to remove used flux when done soldering. Alcohol evaporates and dries quickly, does not leave impurities behind
Ok for the most part yes, but no. The only way to clean flux off the board or connection is to use a "flux remover" and a very stiff brush such as:ac_cb1.jpg163116s.jpg you can use the alcohol to remove the residues.

Cris Harrison
Fort Worth, Tx.


NEW::=  I just left a comment on his blog as it is restricted to 1024 I am enclosing the copy of my comment to him as well

3/7/2013 at 1:47 AM

Scott I wrote you an email with an open letter to you. This letter can be read at my Blog: This article was full of good intentions and just bad advice and really bad technique. The reason for this is the picture of the soldering iron and the wire as an example of "good technique" but it shows  a lack of understanding of what is happing. If you look at the picture you will see that the solder is in fact touching the iron. Major no-no. There where also other silly to almost stupid remarks in your article. Before you cry foul you should read the first blog of Soldering School and read the course work.
Cris Harrison, BSEE, BSCS
Phoenix Aerospace
Ret Air Force Crew Chief

School? I could have called it Soldering 101, or Soldering For Dummies, but hey what do we do when we need to learn something that is a skill?, Well we go to a school. The word school is just a formal place of learning. So why do we need school for soldering

There are a few reasons:

  • You need to learn the best practices.
  • You need to learn what solders to use and not to use.
  • You also should understand how not to solder and why.
  • And finally, you should understand the tools you need.


Oh yes, this will not take a long time to master, you just need to practice.

And what school course would be books or courseware? So I have dug into the best standards, NASA. Yes, I know you are not launching rockets, but the key to soldering is RELIABILITY! And they have it down pat.


NASA NPC 200-4
1968 ed

Requirements for Soldered Electrical Connections

(This is the standard that I was first taught)

Feb 1998
Soldered Electrical Connections
Feb 1998
Crimping, Interconnecting Cables, Harnesses, and Wiring.
MIL-STD-1130BConnections, Solderless, Electrical Wrapped
For the old folks that like to wire-wrap
IPC J-STD-001ESNASA as of October 2011 has now adopted this standard, but not to worry about it dose not apply to us.


DON'T WASTE YOUR MONEY!weller soldering stationTHIS IS THE BEST!! (and I use it)I Guess you want to know why not to buy #1.. It's junk use this type of iron for you wood or leather crafting. they can't hold the temperature and you can't get tips. You are just throwing you bucks away. #2 its ok there is a lot of Weller stations out there, some good, some very bad. Let the buyer beware. #3. This is a Metcal it's what the professionals use. It is not a resistance iron. that is it uses RF energy to heat up the tip. It goes from cold to hot in about 10 seconds. And it's always cool to the touch.


bad-tech.jpgI have inserted this wonderful picture (on the left) as PLEASE DON'T EVER DO IT THIS WAY!! You will please notice that the solder is touching the iron (to help melt it) But this is the wrong technique.

Why? Because the wire will not be hot enough to melt the wire and help flow the solder around the strands. FAILED This does not mean that you can not pre-wet or tin your iron with solder first, but if you do you should always clean it off. (damp sponge)


This next picture is more wrong than right. Why? First what is right. The soldering iron is not touching the solder. What's wrong?  Because the tip is too large and also you will notice that the wire insulation has started to melt. FAILED This is a great example of when a solder pot would be useful. I pre-tin my leads like this when I am going to insert my leads into a connector shell. You should hold your iron like a pencil, at about angle which is no less than 45 degrees. And always keep your iron (tip) clean.


On last, thing is tools: get good ones. I really like EREM. They are kind of high, but if you don't mind eBay you can always get a score.

One more last thing.. Wire Strippers.. you want something that will not nick your wire. The type of strippers with the yellow handles should be avoided at all costs.200-007.JPG

PS... I live in the US and not in the EU so lead/tin  with a Rosin core solder is the way I roll. If you want to go lead-free also, well first get all new tips. then If you have a solder pot you will need a new one as you can not clean them.










Keep Tuned In More To Come

Cris ~

Protocols again? Are we ever done talking about protocols? No not really. And BTW this is really RSS version 2!  RSS v1 can be found on my other wordpress blog. This version eliminates most of special hardware and its bus and chassis. Most radios heads can be handled by a Arduino Mega256 as it will handle two radios or that is one radio head. If the Mega256 can't handle the job I can then use the Stellaris Launchpad from TI. 


We will use one of my Gables G-3717 Dual Nav Head as the guinea pig.

Gables G-3717 Dual Nav Head

Ok so lets get to work first we need to gather some information.
  • Does this radio head have more than one radio? YES
  • If yes, how many radios are in this head? 2
  • What type of radio head is this? ARINC-410
  • Do we have a pin-out? YES


As you can see from the pictures and the table on the right we need ether 5 ASCII letters or 2 ½ bytes for packed format. We also need to label each radio not the head. So that's another ½ byte for a total of 3 bytes. So why are there 4 bytes? The first is byte is a START signal to the receive side to start looking at the input, and start counting bytes. But wait ARINC-410 is a 2 of 5 code and its LOW ACTIVE! And BTW is 28 volt logic to boot, that's in the aircraft, so we will use 5volts.  Well not going to send them low active and we will convert the ARINC-410 to Packed Binary or Packed BCD so we can pack each nibble..


2 of 5 Code Table









Slave Transmit
Byte 1Byte 2Byte 3Byte 4
FF0001 - 00010000 - 10000111 - 0101






So you can see that the Slave is transmitting what radio #1 (first nibble of Byte 2) is tuned to 108.75 as you can plainly see in the photograph.


Ok so that takes care of the tuning. But what about the other switches. Ok lets make this eazy lets add another byte, making that number 5. And since there are 8 bits in a byte we now have up to eight switches, or by using the whole byte we could have 256 switches, so why don't we just use the 7 low order bits and the MSB the state of the switch so now we have 128 switches and their states. This way we can assign the switches to numbers in a table. So we can safely say that the OFF/ON or Power switch is #1. In the table below bit 7 is the MSB, and the x indicates the state which is a 0 or 1.


Switch Byte and Table Layout
bit 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0Radio #Radio NameSwitch Name



So this really takes care of the Slave_410.tx.c this runs on the embedded microprocessor. We sill need Slave_410.rx.c thats so we can comand the radio head to turn off etc.


So this really takes care of the Slave_410.tx.c this runs on the embedded microprocessor for ARINC-410 class of control head.


Keep Tuned in More to Come



BTW Next blog is the Linux Side Control

Ok so what the heck is a RSS? The RSS is a central location in the simulation for all of the radio stuff.

The Analysis NexGen can handle any type of radio interface, but not limited to ARINC-410, ARINC-429,

ARINC-410 HeadMIL-STD-1553, or any thing else you can dream up ie. Sub Space Radio in Star Trek. The 5 in 1 pictured on

the right is a ARINC-410 head, they are cheap and plentiful on eBay. Radios with dials general fall into the other category of other ie. you are on your own.  The ADF pictured on the right is a syncro transmitter in it which controls the receiver in the electronics bay. Then you have ARINC-429 this is used on more modern control heads with LEDs.


The RSS is also responsible for driving meters, turning lights on or off, and changing instrument flags under control of a slave microprocessor via RSS_Control, but commanded by the simulation. In the lower right I have included a photo of a ADI showing the various flags.adi.jpg

The Audio portion of this system is the ASS or Audio SubSystem. Needless to say we have a Linux Box which houses multiple audio interfaces and the OS must have the Advanced Linux Sound Architecture or ALSA included in the build but more about that later.


There are several pieces of software running to put this all in motion.

  1. RSS_Control iprogram on the LinuxPc and I talks via USB to the control heads and Ethernet to the simulator.
  2. Slave a generic program that runs on an embedded microprocessor on each control head. The Slave program is named Slave_410, Slave_429, etc.
  3. Slant_Range is a program that runs on the LinuxPc that performs slant range calculations to see if you can tune in the required radio station.
  4. Morse is a program that runs on the LinuxPc that generates all of the Call Signs for the bacons.
  5. FAA_DB is a program that on the LinuxPc that has all of the Call Signs, Frequency and Locations.


Here we will only concern ourselves with two programs and four protocols: (The ones in black)RSS.jpg

  1. RSS_Control
    • NavGroup Listener
    • Listens to Simulation
    • Talks to Simulation
    • Listens to Slave
    • Talks to the Slave
  2. Slave
    • Listens to RSS_Control
    • Talks to RSS_Control.



Keep Tuned In More To Come

Cris ~

Dah Rules!

  • The selected processor must support all of the I/0 natively ie. no I/O Expanders.
  • There are more out there, but I own these, with the exception of the Pi.
  • The processors to be in the selection are:
    • Ardunio Duemilanove
    • Ardunio Mega
    • TI Stellaris Launchpad
    • Raspberry Pi
    • Beagle Bone
  • The Solution must be integrated with the Radio SubSystem or RSS.
  • There must be two sets of protocols developed.
    • Between the Control Head and the embedded processor.
    • Between the embedded processor and the RSS.





DuemilanoveATmega328168$1614- 6Y32 KbWireWire$30$46FAIL 1
MegaATmega2560168$1554- 14Y256 KbWireWire$30$45



StellarisARM Cortex-M48032$2043

32 kb +

256 Kb


CSS5 / Eclipse


$13$33PASS 5
PiARM-11 BCM283570032$16




BoneARM Cortex-A870032$30


Linux Angstrom

Eclipse$89$119FAIL 2


The Winners and Losers and Why?!

  1. Does not have enough I/O.
  2. Cost too much for a small job.
  3. I feel the Pi is over kill in this situation. But you might like it.
  4. The Mega has all of the power that you need.
  5. The Stellaris is my personal choice but, its a little heavy handed.


keep tuned in more to come

Cris ~

The Plan Continued.

  • We need to pick a embedded cpu. The requirements are:  
    • It must handle all of the GPIO (see part 1 for the I/O Table), or about 20 pins.
    • It needs a USB interface for a data link to talk to the host.
    • It needs to generate the BFO signal.
    • It needs a PWM output to drive the meter.
    • It needs to have a protocol designed for it. But I has to fit in to the Radio SubSystem or RSS architecture.
  • We need to design a interface card. It should have a relay for the Dial Lamps, and a connection to the Panel Lamp Dimmer. It should have a jack to connect the gain potentiometer to the audio system. It should also have an output for the ADF flags, in various instruments.
  • We also need to replace the syncro with static or absolute digital encoder. It must be static as when the system powers up there is no guarantee where the dial will be tuned to. Remember this is just a AM radio.
  • Here is a block diagram of the ADF system:
  • Now we must get the syncro out of the frame. Here is an abbreviated version, I will post some photos when I do the work.
    (TM 11-5826-255-35 page 3-12):


    1. Loosen two Dxus fasteners located on rear cover, and slide the rear cover off the control unit.
    2. Remove three screws and three lock washers securing retaining (rear) plate to frame.
    3. Remove fixed resistor from retaining (rear) plate by removing the screw.
    4. Remove four screws and nuts securing connector to the retaining (rear) plate.
    5. Remove the retaining (rear) plate.
    6. Loosen two setscrews on collar, and remove spur gear from shaft of helical gear.   Note. If the setscrews cannot be reached, the tuning gear train must be disassembled.
    7. Loosen two setscrews on collar, and remove spur gears from the shaft of transmitter syncro.
    8. Remove collar.
    9. Loosen the three screws located around transmitter synchro at the shaft end.
    10. Orient three rim-clinching clamps to permit removal of transmitter synchro and remove the transmitter synchro.
  • Remember re-assembly is just the reverse order. Make sure that you keep all of the screws, etc. in a nice safe place. What I like to do is to put the screws back where they came from.


keep tuned in more to come

Cris ~

.This is the ADF Control Head that I chose for my project.  It is a Collins 614L-8. they are plentiful on

The Analysis    The Unit is tuned via a 400hz syncro transmitter. So it looks like I will have to find a replacement for the synchro.  The Loop Switch in the upper left must be rewired and the switch logic for the Band Selector Switch behind the Tuning Knob seems ok, but that will have to be verified. The Gain Control is just a 5k pot,  and the Function Switch behind it just need some pull-up resistors. It looks like I can drive the Tuning Meter with a PWM signal from the controller.  Also there is a BFO Switch which induces 142.5 Khz signal on top of the audio.

PS: In TM 11-5826-225-35 section 1-32 Receiver Tuning Meter page 40  says:

"Tuning Meter is M301 mounted on the control unit front panel is a dc microammeter requiring 100 microampere of current for full-scale deflection. The negative side of M301 is grounded.."

The Plan  Well first I need to score a copy of the maintenance manual they are kind of pricey on Ebay so I dug a little more. In the military the Control Unit is part of AN/ARN-83 and I found pdf copies of TM 11-5826-225-12 and TM 11-5826-225-35 with schematic, part diagrams, etc. Also you can score the operators manual here.

Next we have to identify the goes inta and the goes outas, so here goes:


Connections Map
OLoop Ant, Right Step
OLoop Ant, Right Slew
OLoop Ant, Left Step
OLoop Ant, Left Slew
OFunction Switch, ADF
OFunction Switch, ANT
OFunction Switch, LOOP
ORange Switch, 190 – 400
ORange Switch, 400 – 850
ORange Switch, 850 – 1750
OBFO Switch
OGain Control, Bottom
OGain Control, Top
OGain Control, Arm
ITuning Meter
PDial Lamps
PPanel Lamps
DSyncro - L1
DSyncro - L2
DSyncro - L3
DSyncro 400 hz power
**NOTE: O = Output; I = Input; P = Power; D = To Be Deleted



keep tuned in more to come

Cris ~

Do you remember I talked about the Aircrafts Frame of Reference? Well I just reprinted it here if I slipped your mind.Roll-pitch-yaw.gif

And I described it as a  3-D Cartesian (orthogonal right-handed) coordinate system (x, y, z), which is centered (origin) at the rear of the aircraft where:

  • ROLL-axis passes through the propeller and tail. (Positive to the nose)
  • PITCH-axis passes though wing tip to wing tip. (Positive to right wing)
  • YAW-axis is a vertical axis, and is perpendicular to both the ROLL-axis, and PITCH-axis. (positive is down)

which contains a hierarchical model of the aircraft. In this way parameter data inputs can drive individual parts, such as control surfaces. Also parts may be attached to other parts in such a way that movement of one part will cause movement in an other.


Now what does all this mean?

For the most part aircraft designers or aerodynamicists have used spreadsheets to do the math for the aircraft. Bill Lear said "If it looks good, it will fly good." Now I really hate spreadsheets. To me this is like trying to stuff an elephant into that little tin of sardines. So why don't we use a database. I like MySQL or Postgress. So lets get started. So I use phpMyAdim to create MySQL databases, and tables. So first we need to consider what is an object. First are we going to use inches or the metric system in the aircraft.

  • The object needs a name.
  • The object should have a reference document.
  • The name of object we are attaching to.
  • The object needs an attachment point on the aircraft or it parent. In three dimensions (x, y, z).
  • The object has mass or weight.
  • The object size. In three dimensions (height, width, depth).
  • The objects point of origin (x, y, z).


name: engine.1duratec-1.png

reference: CSG_Leaflet_4_2003.pd


attachment point:

mass: 200 kg

size: 679, 670, 685

origin: 207, 335, 535 (center of the flywheel)


name: psru.1

reference: gear-drive

parent: engine.1

attachment point: 0, 0, 0

mass: 29.48

size: 437.36, 534.74, 235.407



name: popeller.1

reference: 72" warp drive

parent: psru.1

attachment point:

mass: 9.07

size: 1828.8, 1828.8, 101

origin: 914.4, 914.4, 101

Ok so here is a map of our simulator:


  • A small network.
  • The CDU.
  • The IO Processor #1.
  • The Simulation Processor.
  • A block diagram of the arduino and what's it doing.
    • Interfaces to the display controllers via I2C.
    • Ps2 keyboard Interface.
    • The switches via some custom hardware.
    • USB virtual serial port.
    • Client Software.
  • A Virtual Serial Port, from the arduino to the IOP#1.
  • The Host software running on IOP#1


The Client Software running on the arduino duemilanove will use a one byte protocol. Valid data can be any 7 bit ASCII character or one of four (4) switches and its associated BCD data value.
arduino 1 Byte Protocol to Host
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
0Valid 7 Bit ASCII Character (Keyboard)
1000BCD from Mode Switch
1001BCD from Display Switch
1010BCD from DEST thumb wheel
1011BCD from FLY-TO thumb wheel
11xxData Not Valid


When Host Software running on the IOP receives a keystroke (one byte at a time) from the arduino the host shall respond with a 4 byte message which has the following format:


Host 4 Byte Protocol to Client (arduino)
Byte 0Byte 1Byte 2Byte 3
START BYTEDispaly - DigitASCII CharAttributes
FF0010 - 0011360


  1. Is the START Byte this will contain a hex FF.
  2. Has two (2) nibbles which are encoded:
    1. Is which display you wish to write to: Target,  Left,  Right,  Center,  Both,  LED.*
    2. Is the digit to be displayed (with 0 offset)
  3. Is the DATA for the display position selected (ASCII).
  4. Is the attributes. Such as BLINK, Lamp Test, Cursor, etc. #


NOTE: * This should be a enumerated list with a 0 offset.

NOTE: # In this blog I will not go into the various attributes.

NOTE: This format is all so used when the CDU is listening to network traffic for updating the display with various parameters, such as Network Time, Stored Locations, Time To Destination (DME), etc.


NOTE: This blog eludes to communications between the Host Software and the Simulator, I have chosen not to talk about it at this time.



keep tuned in more to come

Cris ~


AFTER THOUGHT: This system was designed using an arduino duemilanove. I am now writing code on a stellaris arm® LunchPad module to see if I can move the HOST software to this platform as well.

NexGen is a heterogeneous collection of computers, and embedded microprocessors. These possessors must all listen and talk together. To do this we must rely on some common language. This language is a protocol. There are different protocols for different jobs for instance we have: UDP, TCP, NTP, etc. And they have to be well defined, and understood by both parties. Protocols can be software or hardware based or a combination of both. The Wiki has lots of definitions of what a protocol is or is not so we will use a combination of their's. Our protocol should have the following features:

  • A protocol is a common means for unrelated objects communicate to with each other.
  • A protocol will define any data structures that it uses.
  • A protocol describes the syntax, semantics, of it's use. This is called it's API or Advanced/Application Programming Interface.
  • A protocol will have a formal description.
  • A protocol optional could be defined with Abstract Syntax Notation One (ASN.1). A pdf document of ASN.1 can be found here. pdfIcon.png
  • A protocol must be well understood.
  • Protocols may include signaling, authentication and error detection and correction capabilities.
  • One protocol may be the foundation for another, such as Tcp/Ip or Udp/Ip. Where Ip is really the underlying protocol.
  • A protocol must be a public document.


There is one of our protocols, for one of our CDU's, Computer Display Unit.CDU.jpg It is compriesed of several key components:

  • The Keyboard. We will use a Ps2 keyboard for the keys.
  • The Switches. There are four of them 2 rotary, and 2 thumb wheel switches. the thumb wheel switches are BCD encoded, so we will encode the rotary switches with a priority encoder 74LS148.
  • The Display. The display is comprised of 5 alphanumeric displays, plus 13 additional seven segment display, and two tri-color leds. After looking around and finding 16 segment drivers (hardware) not very common we specified two(2) MAX6955 with an I2C interfaces.

Plus lets not forget about several other parts:

  • Some intelligence for our CDU. So we thought we would use a Arduino. There small and cheap.
  • Our Host. This is a program that runs on one of our Linux boxes.
  • A Client. This is program that runs on the Arduino talking to our Switches, Display, and Keyboard.

Know remember that thing called a protocol? So the questions are:

  1. How does the Arduino communicate with the Host?
  2. How does the Host communicate with the Arduino?
  3. How does the Arduino communicate with the Display?
  4. How does the Arduino communicate with the Keyboard?
  5. And lastly how does the Arduino communicate with the Switches?
  6. Oh, yes how does the Host talk to simulator?
  7. And how does the Host listen to the simulator?


keep tuned in more to come

Cris ~

Forces?! What Forces? There are 4 forces that act on an aircraft: forces.jpg

  1. Lift: This is a force generated by the difference in the speed of air across the uper and lower wing surface. The modern lift equation states that lift is equal to the lift coefficient ( Cl ) times the density of the air ( r ) times half of the square of the velocity ( V ) times the wing area ( A ).
    L = .5ClrV2A Lift is a dynamic pressure as noted by Bernoulli's equation:
    P1 + ½ρv12 + ρgh1 = P2 + ½ρv22 + ρgh2
  2. Weight: This is combined load of the aircraft itself, the crew, the fuel, and the cargo (bombs, missiles, baggage, etc).
  3. Thrust: This is forward force produced by the engine(s). It opposes or overcomes the force of drag. As a general rule, it acts parallel to the longitudinal axis
  4. Drag: The force on an object that resists its motion through a fluid is called drag. When the fluid is a gas like air, it is called aerodynamic drag (or air resistance). Aerodynamic drag comes from anything that is part of the aircraft, props, engine nacelle(s), fuselage, wings, bombs, missiles, landing gear or and their doors, and antennas, and probes. There are two types of drag that we talk about: 
    • parasitic drag: The three types of parasite drag are: form drag, interference drag, and skin friction.
    • induced drag: is a result of an airfoil developing lift.

    We use a formula derived from Bernoulli; where  Drag ( D ) is equal to half of density of air ( ρ ) times the coefficient of drag ( C ) times the aera ( A ) times the speed  of the aircraft ( v2 )  
    D = .5ρCAv2


So what does all this mean? Well Lift must be more than weight (mass) and thrust has to be more than drag but basically the last one is always a losing propasion, that is the faster you go, you have to have more thrust but remember that pesky v2, well thats sort of like chasing a dragons tail. So when you are flying level all the forces are balanced, why not check with Sir Isaac Newton's First Law of Motion as described in "Principia Mathematica Philosophiae Naturalis" in 1686.

"Every object persists in its state of rest or uniform motion in a straight line unless it is compelled to change that state by forces impress on it".

And please dont forget the Newton's Second Law of Motion:

"Force is equal to the change in momentum ( mV ) per change of time. For a constant mass, force equals mass times acceleration."

F = ma we will use this as well.accelerometer.jpg

But here is the rub. The forces are angular measurements, or a vector and they are quantifiable via a transducer called accelerometers.  There cost is very expensive, single channel units, but lucky the world turns, thing change and we win. Kind of sounds like Moore's Law doesn't it.





keep tuned in more to come

Cris ~

Euler Angles are three angles introduced by Leonhard Euler (1776) to describe the orientation of a rigid body. To describe such an orientation in 3-Dimensional Euclidean Space three angles are required.


Euler Angles provide a way to represent the 3D orientation of an object using a combination of three rotations about different axes.


Body Axes

Figure 1 – The Inertial FrameFigure 2 – Yaw rotation into the Vehicle

Figure 3 – Yaw and Pitch Rotation Applied

Figure 4 – Yaw, Pitch, and Roll applied


Then we define the Euler angles as:

  • α is the angle between the x-axis and the line of nodes.
  • β  is the angle between the z-axis and the Z-axis.
  • γ  is the angle between the line of nodes and the X-axis.


So in a flight simulator we have to also deal with the accelerations, along each of the three planes ( pitch, roll, yaw ). They all have an effect on the aircraft. But they are in weird angles. So we have to normalize the aircraft back to normal space as in Figure 1. This is done through a series of matrix rotations. But you can also use Quaternions for the rotation as well. They were first described by Irish mathematician William Rowan Hamilton in 1843

By utilizing quaternions, you can ovoid Gimbal Lock (see below).


Figure 1, at right, relate the various system conversions:euler.jpg


  1. Euler to Matrix
  2. Matrix to Euler
  3. Quaternion to Matrix
  4. Matrix to Quaternion
  5. Euler to Quaternion
  6. Quaternion to Euler


[The information presented here is derived from a diagram by P.M. O'Neill,

September 1981, and from a NASA training manual on quaternions]


To see the complete article please click here.


Gimbal Lock Consider a case of a level sensing platform on an aircraft flying due North with its three gimbal axes mutually perpendicular  and  angles each zero. If the aircraft pitches up 90 degrees, the aircraft and platform's Yaw axis gimbal becomes parallel to the Roll axis gimbal, and changes about yaw can no longer be compensated for.


keep tuned in more to come
Cris ~

Have you ever wondered how you navigate on a round world? Remember Columbus thought was flat. images1.jpgSo if the world was flat you could stick two pins in the map, and follow the angle from North. But as we know today the world is round so, sadly that will not work…

So we came up with Great Circle Navigation.  GCnav.jpgApparently, the first reference to great circle navigation was by John Davis in his book, The Seaman’s Secrets (1594).  The theory was understood, but in practice it could hardly be applied without accurate computation of longitude.

With Harrison’s Chronometer (1736), this was then possible. harrisonclock.jpg 

The theoretical proof was given by Bernhard Riemann around 1900.   












Here is the math that you have to use:


Distance = acos(cos(Lat1-Lat2) – (1-cos(Lon1-Lon2)) * cos(Lat1)*cos(Lat2))


Here is some code:


L1 = Original Lat; L2 = Destination Lat;

Lon1 = Original Lon; Lon2 = Destination Lon

D = Distance in Nautical Miles


Lon1 = -Lon1;

Lon2 = -Lon2;

if(( L1 == L2 ) && ( Lon1 == Lon2 )){


temp = ( cos( L1 ) * cos( L2 ) * cos( Lon1 – Lon2 ))+( sin( L1 ) * sin( L2 ));

if( temp == 1 ){

     temp = 0;}

elsif ( temp == -1 ){

     temp = pi/2;}

else {

     temp = 0 – atan( temp / sqrt( 1 – ( temp * temp ))) + pi / 2;}

     temp = (( sin( L2 ) – sin( L1 ) * cos( temp )) / (sin( temp ) * cos( L1 )))

if( 1 – temp < .00000001 ){

     return( 360 );}

elsif ( 1 + temp < .000000001 ){

     return( 180 );}

else {

     temp = rad2d( -atan( temp / sqrt( 1 – ( temp * temp ))) + pi / 2;)

     if( sin( Lon2 – Lon1 ) > 0 ){

          temp = 360 – temp;}

return( temp );}


This code was written in Perl you can run this code on THIS PAGE

sorry for the Perl but it was easyer to test than a page of C hooked to 2 web pages


keep tuned in more to come

Cris ~