Skip navigation
1 2 3 4 Previous Next

NexGen Flight Simuator

59 posts

What have I done? It seems that I have created a monster.

Originally, when I started with this undertaking, I made first of several statements, and they are worth repeating.

  • No KeyBoard encoders.
  • Must use standard equipment protocols. AIRINC-429, ARINC-410, etc.
  • Must be able to support x-number of crew stations. ie. P51, 747, L1011, B-52, Starship Enterprise, or naval craft's: CICS bridge, etc.

If you wish to read my diatribe, please go here: to my first website for my aircraft Phoenix2000. BTW 2000 was the year I was going to start ground testing and the name Phoenix is not taken from mythology, but an omage to the film with Jimmy Stuart "Flight of the Phoenix". The re-make was terrible! That plane was real N93082 piloted by Paul Mantz who died when the aircraft crashed.  


Well that it for now.

Stay Tuned In,

~~ Cris




Box / Name
FunctionalityCommunication BusNotes
1. Model

Runs 100 frames/sec, Calculates Velocities, Acceleration, Distance, Time, Knows where we are. tells everybody.

Master Frame, once/sec

Sub Frames broadcasts  Velocities, Acceleration, Distance, Time, Lat, Lon, Alt, Speed, et

  • Navbus: ip
  • FLbus (listens)

Runs: HSI, VSI, RMI; Monitors all Radios. Controls Radio Audio and mixing as well.

Generates Slant-Range info for Radios, DME, etc.

Generates Mose Code for localizers, Handels FAAdb.

Runs as the master for EADIN Lite network (code from NASA tech-brief.)

  • Navbus: ip
  • EADIN Lite B1
  • internet
  • Navbus
4. Gen-IOPRuns other panels, switches, etc. Also handles Flight Controls, Throttles, Fule Burn Rates
  • FLbus
  • EADIN Lite B2
5. GE-MasterWorldviews etc are will be generated via Google Liquid Earth.
  • Navbus: ip
  • Gbus:
  • Internet
x. GE-Slavestakes in information via GE-Master and then projects it.
  • Gbus

NexGen Sim: Hacking a Sitek X-35 Joystick.

Converting the Game Port to USB - Part 1



  1. - Disassemble the unit, and give them a bath, but if your handles turned gummy, I used "Brake Clean" in the Red Can. You will need some elbow grease as well. The GamePort cable has these 15 wires:
    • black, white, red, purple, pink, green, light green, yellow, brown-white, black-white, black (dull, thick), orange, gray, red-white, blue.
  2. - Identify the wires. You should ring them out with your DVM.
  3. There are three circuit boards inside.
P/N 51990-08110, JS1-PA-081 (PCB)P/N 51990-08020, JS1-PA-080 (PCB)


P/N 51990-08020, JS1-PA-080 (PCB)


The potentiometer for the main throttle has three wires: red, black, brown
There are what appear to be 4 cables coming out of the throttle:
black, brown, purple, red, orange, yellow

Here is the pinout for the 15 pin DA-15 connector (Game Port) of the X-35. This plug connects into the X-36 stick.


pincolorpcb pinFunctionArduino
Flt greenC113


This is a work in progress, I will add to shortly.


Keep Tuned In, More to Come.


sonic-cruiser.jpgThe ID-453/ARN-30 is a Vietnam era CDI. The connector on the rear is an ARC 19 pin. Well here I'm going to do this from memory as this indicator has been already been taken apart. So let begin.




Analysis: As you can see there are 2 pointers (Vertical and Horizontal pointers) and 2 flags (Vertical and Horizontal pointers) as well as the T0-FROM meter and a resolver, but let's just talk about the first five. They really are the same, just a D’Arsonval Meter Movements, and they can be driven by the Arduino PCM output.

Device NameMnemonicPowerGround

Vertical Pointer

      Positive Going:

      Negative Going:








Horizontal Pointer

      Positive Going:

      Negative Going:








Vertical Pointer FlagPCM_VPFEF
Horizontal Pointer FlagPCM_HPFGH

To-From Meter










    Rotor Coil
    Stator Coils






O, P





While most Arduinos, such as the Uno, Duemilanove, and the Leonardo only have only 6 PCM ports, the Mega2560 has 16 PCM output ports.

The  OBS pointer or the Omnibearing selector controls the selected bearing. This is shown by a small pointer and a small dot for the reciprocal bearing. This pointer is commonly referred to as the BUG A Resolver, Clifton Precision Type PS-17-E-1, is used to Read the Bearing' which are Sine and CoSine of the angle of the bearing.  The Resolver's COS and SIN are connected together at S1 and S2 (K), which becomes neutral, while S3 (N) and S4 (L) are outputs, SIN and COS respectively.

ID-453.Guts.jpgIn this picture you will see four black wire-wound resistors These most likely shunts for the meters Just ignore them and test pinouts Here I used a DVM Amprobe  30XR-A30XR-A on the 2k ohm setting and the meters moved So I changed the setting to the Diode.small.gif and I could deflect the meter full scale and change the flags as well.

My Pin Outs:
Connector 1
MnemonicConnector 2
Mega Pin





The only other thing that I have to do now is to take care of the To- From Motor. This is the same as the other two flags but it is bi-directional, so it will require two (2) outputs as well.






  Keep tuned in, More to Come!




Header file: D-453_ARN-30.hHeader 2

  const int Serial_Rx = 0;
  const int Serial_Tx = 1;

// Vertical Pointer & Flag
  const int PWM_VP_pos  = 6;
  const int PWM_VP_neg  = 7;
  const int PWM_VPF_pos = 10;
// Horizontal Pointer & Flag
  const int PWM_HP_pos  = 8;
  const int PWM_HP_neg  = 9;
  const int PWM_HPF_pos = 12;
// To - From Meter
  const int PWM_TFM_pos = 13;
  const int PWM_TFM_neg = 14;

Part of my main file: D-453_ARN-30.c or pde
#include D-453_ARN.h
void setup() {
   pinMode( PWM_VP_pos,  OUTPUT );// for change in direction change polarity
   pinMode( PWM_VP_neg,  OUTPUT );// for change in direction change polarity
   pinMode( PWM_VPF_pos, OUTPUT );
  pinMode( PWM_HP_pos,  OUTPUT );// for change in direction change polarity
  pinMode( PWM_HP_neg,  OUTPUT );// for change in direction change polarity
  pinMode( PWM_VHF_pos, OUTPUT );
  pinMode( PWM_TFM_pos, OUTPUT );// for change in direction change polarity
  pinMode( PWM_TFM_neg, OUTPUT ); }// for change in direction change polarity
//      OUTPUT +/- SCALING




1. Oct 7. 16 Changed all variable names with '-' in them to '_' .... Blond Moment. LOL

2. Oct 18.16 Changed the format of the table in Red.   (trying to fix the pdf downloader)

sonic-cruiser.jpgThe Analysis: The Processor Select Panel, 7-F511F00121-1, is from an Apache Longbow AH-64D. The Panel is rather simple but it will work for my Navigation Computer Select and Fault Panel

processor select panel.jpg
Parts List
Part NumberDescription
Assembly, Panel, Processor Select
Panel, Light plate
7-511F00023-5Plate, Support, Front
7-511F00024-5Plate, Support, Rear
MS21347-A211Switch Toggle, DPDT, MIL-S-8834  Lever Lock/IWTS Terminals
D38999/20JB35PND38999/20JB35PNConnector, Male, MIL-DTL-38999 III, 13 pins
(11-35 Arrangement)


Lamp Housing - Korry 5/8" Type 427 Pokehome, Pin Configuration Type 2, Single Common Type 5
18651-014Lamp Lens
Lamp, T-1 Sub-Midget Flanged; 28 V, 0.024 A
D38599/26JB35SNMating Connector
Photo of the panel in my test harness

I plan on installing it just forward of my side stick, on the right-hand side of the cockpit.  I have looked all over the Internet for an interconnection list or printouts but I can not seem to find one. So it seems that I am going to do this the old fashion way and create one myself. Luckily my panel had the mating connector and a pigtail on it.  So this is what you will need the following:

6S1.SP1 = CR1 + CR2
7S1.SP2 = CR2 + CR2
11DS2, SP#
12DS2, SP#
  • Your favourite DVM
  • Wire stripper (thermal is a must), as this is Teflon covered wire. you can find then on eBay about $99.00+ 


  • A voltage source (5vdc)
  • The connector's "Contact Arrangement"
  • assorted screwdrivers and other tools
  • note paper, computer, etc.


The Plan:

  1. First, grab my thermal stripper and strip the ends. Not only do I want to find where the wires go to but I want to also  fill in the table on the left, for this the Connector's Contact Arrangement is a must.
  2. Remove the SP1/SP2 Displays Lens Cap
  3. Remove the panel's light plate.
  4. Identify the wire and its connector's position.
  5. Flip the toggle switch from off to SP1
  6. recheck #3 sb:#41
  7. Flip the toggle switch from off to SP2
  8. recheck #3 sb:#41
  9. Re-attach the panel's Light palate and Displays Lens Cap.

The Plan Phase 2:

First, attach the cable ends to a mini DB-15 connector (VGA connector).
Remember that I do not want my lighting circuits, anywhere near my logic so I will use three separate relays to drive them. Your processor selection will effect your build. At one end I have an Arduino Duemilanove (2009) or Mega and at the other end, I could use a TI Launchpad  (MSP‑EXP430FR5969) product. The only thing to remember is that you will need some I/O pins and a USB interface, and depending on the amount of I/O I2C might be helpful for an I/O expander if you were short on digital I/O pins.

Now let's get our hands dirty. According to the Analysis, we will need the following I/O pins:





Keep tuned in, More to Come!




  1. Changed #3 to #4 Sept 14, 16




Phase 3: Hardware.

Phase 4: Protocols, Communications

Phase 4: Software.


ps I guess I really don't have time to finish this blog post as I have to start getting ready for Cockpit Fest US in Lancaster Texas. 

And you can also follow along on Facebook®

ppt2pdf.2.jpgThis may sound harsh, but coming from the Linux world, to put it bluntly, they are just a pain in my tush! So every time I open a ppt slideshow with LibreOffice, and then it is in an editable mode, and that is no good. But then I can "Export" it as a pdf file. (PIMA) but by rooting around on the Internet today I found I can run LibreOffice in a headless mode.


libreoffice --headless --invisible --convert-to pdf  .pdflibreoffice.jpg


So I can now put it together in a little shell script and save it to my Desktop:


#! /bin/bash

echo "This is a PowerPoint (ppt) to (pdf)"

echo "looking for the form of  *123.ppt  not *.ppt"

echo "Enter Filename:  "

read filename

echo $filename

libreoffice --headless --invisible --convert-to pdf  $filename

/usr/local/bin/libreoffice --headless --invisible --convert-to pdf  $filename


You will now have to make it executable.  You can do this two ways:

  1. Find the and right-click on it and open the property's dialog and make it executable.
  2. If you are in your shell you can chmod it.  $chmod +x  The +x made it executable.

Now here it is in action:


harrison@Whirlwind /mnt/MyData/home/harrison/school/Design News $ ../../Desktop/

This is a Power Point (ppt) to (pdf)

looking for the form of  *123.ppt  not *.ppt

Enter Filename:



convert /mnt/MyData/home/harrison/school/Design News/DN-CEC-Mastering-the-Embedded-Design-Cycle-Day1.ppt -> /mnt/MyData/home/harrison/school/Design News/DN-CEC-Mastering-the-Embedded-Design-Cycle-Day1.pdf using filter : impress_pdf_Export

Overwriting: /mnt/MyData/home/harrison/school/Design News/DN-CEC-Mastering-the-Embedded-Design-Cycle-Day1.pdf



Keep Tuned in, More to Come

Cris ~



I have a /usr/local/scripts file  and that's where I put it. but it didn't work

I had to change the last line
FROM: libreoffice --headless --invisible --convert-to pdf  $file

TO: /usr/local/bin/libreoffice --headless --invisible --convert-to pdf    $filename

If you look up Angle in the Wikipedia , it claims that there are four (4) methods of  measuring angles: Degrees, Radians, Turns, and Gons. But they are really five (5) and that is BAM or Binary Angular Measurement.

If we get rid of Turns, and Gons. That leaves three (3): Degrees, Radians, BAM. Only Radians and Degrees units of measurement  do well with Floating Point math.  But when we use BAMs its BAM32 or BAM16 and they are Fixed Point Math. So I will show you Degrees to Radian back to Degrees, and will show you the math behind a BAM (Not Fixed Point).


SSR Engineering, Inc. "BAMs are used to represent an angular measure; there are 65,535 BAMs per 360°.  An angle provided in BAMs can be converted to degrees by the following relationship:"
Angle (Degrees) = (360 / 65,535) * Angle (BAMs)


This is written in  ANSI C. I have typedef both Degrees and Radians, to make the library more readable.



typedef double Degrees;

typedef double Radians;

Radians <> Degrees
Nautical Miles
DMS <> Degrees

// Radians 2 Degrees

Degrees rad2d( Radians rad ) {
  return( rad * 180.0/pi );}

//  Knots 2 Degrees

double kn2d( double knots ) {

return( knots/60 );}

//  Nautical Miles 2 Degrees

Degrees nm2d( double d ){

return( d * pi/180.0 * 60.0 );}

// dms2d should take any struct of type dms_s  and convert to degrees

double dms2d( struct dms_s DMS) {
double d1, m; Degrees d;

Degrees d;
m = DMS.S/60.0;
d1 = (m + DMS.M)/60.0;
d = DMS.D + d1;

// Degrees 2 Radians

Radians d2rad( Degrees d ) {

  return( d * pi/180.0 );}

//  Knots 2 MPH

double kn2mph( double knots ){

return( d2rad( kn2d( knots )));}

//  Degrees 2 Nautical Miles

double d2nm( Degrees d ) {
return( d * 180.0 * 60.0/pi );}

Note that the C Math Library does not have pi defined:

pi = atan2(1,1) *4;


struct dms_s {

  Degrees deg;

  char hemisphere;  // This is a hold over from Perl and not used





struct location_s {

  char ID[5]; // IDs are 4 letters long + trailing \n"

  struct dms_s NS;

  struct dms_s EW;

  double alt; // Station altitude. in feet



struct DMS_s {

double D;  // Degrees

double M; // Minutes

double S; // Seconds

} DMS;

//  Nautical Miles 2 Standard Mile 

double nm2sm( double nm ) {

return( nm * 1.151 );}

// d2dms should take a decimal angle and convert it to any struct of type dms_s
void d2dms( Degrees d ){
int s;
//  the +0.5 is to get rid of the rounding errors.
//  there are 3600 seconds in one degree
s = (int)(d*36000000+0.5);
DMS.S = s%600000/10000.0;
s = s/600000.0;
DMS.M = s%60;
s = s/60;
//  the %360 is to make sure that we don't report 360 degrees.
DMS.D = s%360;

// Radians 2 Nautical Miles

Radians2nm( Radians rad ){

return( rad * 3437.7387 );}


I have included the following information for a .h or header file.


Description of Functions
Function header file information
Degrees to:
Degrees 2 DMSvoid d2dms( Degrees d );
Degrees 2 Nautical Milesdouble d2nm( Degrees d );
Degrees 2 RadiansRadians d2rad( Degrees d );
DMS 2 Dregees double dms2d( struct dms_s DMS);
Knots to:
Knots 2 Degreesdouble kn2d( double knots );
Knots 2 MPHdouble kn2mph( double knots );
Nautical Miles to:
Nautical Miles 2 DegreesDegrees nm2d( double d );
Nautical Miles 2 Standard Miledouble nm2sm( double nm );
Radians to:
Radians 2 DegreesDegrees rad2d( Radians rad )
Radians 2 Nautical MileRadians2nm( Radians rad );


I have included the following description of a BAM. This is what  a BAM16 is.  You can create BAM32 with which you can describe any location on Earth with the size of a postage stamp.

Real Time Systems Design And Analysis

Chapter 7.5.3. - Binary Angular Measure

By Phillip A. LaPlante

Another type of scaled number is based on the property that adding 180o to any
angle is analogous to taking its two’s complement. This technique, called binary angular measurement (BAM) works as follows.
Consider the LSB of an n-bit word to be 2n−1 · 180 degrees with the most significant bit (MSB) = 180 degrees.
The range of any angle θ represented this way is 0 ≤ θ ≤ 360 − 180 · 2(n−1)

degrees. A 16-bit BAM word is shown in Figure 7.6. For more accuracy, BAM can be extended to two more words.

Each n-bit word has a maximum value of:  2n - 2-(n−1) · 180o  = 360o - LSB

with granularity: 2-(n−1) · 180o  = LSB


Consider the 16-bit BAM word:  0000 0000 10100 110

Its binary angular measurement is 166 · 180o · 2−15 = 0.9118o.


180904522.5..............................180 · 2-14180 · 2-15
Figure 7.6 16 bit Binary Angular Mesurement word [Lapante]


BAM can be added and subtracted together and multiplied and divided by constants as if they were unsigned integers, and converted at the last stage to produce floating-point results.

It is easy to show that the overflow condition for BAM numbers presents no problem as the angle simply wraps around to 0.

BAM is frequently used in navigation software, robotic control, and in conjunction with digitizing imaging devices.

Why did I say: "The Earth and its mathematics", because all of the math used in flight, or navigational simulators or SPS(games), are based on the Earth and it's dimensions ~ though the NAV simulation represents but a small fraction of the math used in flight simulators.

figure 1

Having nothing to do with the definition of Nautical Miles (“nMile”), from ???, we know that at the Earth's equatorial circumference is 21,604.2 [or 21,639 or ???] nMile. From High School Math and Geography, we know that a great circle is defined as any plane which passes through the center of the Earth (if the Earth were a sphere) [see figure 1]. We also know that the shortest distance between any two points of the surface of a spherical Earth must be a great circle route. Now, if the Earth were only a sphere.

From High School Math, we know that a circle has 360ℴ (degrees), So if we divide 21604.2 by 360 or 21604.2n.m. /360 = 60.011 ≈ 60n.m at the equator. Remember that the closer you get to the poles , the longitudinal degrees converge, therefore, the change must be accounted for by using the cosine of the latitude.


The following inverse pair of formulas describe the spherical relationships between the difference in distance (Δdist) along a parallel of latitude (lat) corresponding to a difference in longitude (Δlong), and vice-versa.  (The formulas are simply stated here without explanation, but a full explanation of their derivation can be found in the book ‘Astro Navigation Demystified’ ).
  • Δdist = Δlong x Cos(lat), and inversely
  • Δlong = Δdist ÷ Cos(lat)
figure 2



The traditional, historic definition of 1 nMile is 1 minute [= 1/60 degree] of latitude along the Greenwich meridian - thus, by this definition, 60 nMile = 1 degree of latitude; the current standard SI definition: 1 nMile is 1852 meters.

Engineers and Cartographers do use degrees, as anyone who has looked at a map will recognize: latitude and longitude are denoted in degrees, minutes, and seconds; but, we will use radians for angle measurement So what is a radian?

Looking at a circle[figure 2], we get the definition of a Radian as the angle subtended at the center of the circle by an arc of the circumference of the circle whose length is equal to the radius of the circle.

∠XOY = 1 radian, where r = OX = OY = XY

Again from High School Math, we know the total circumference of a circle of radius, r, is 2 ∙ π ∙ r; thus, there are 2 ∙ π Radians in the circumference of a circle.

Since 2 ∙ π radians is equivalent to 360 degrees, a full circle, the relationships are :

  • 1 radian  = 180 / π degrees, and inversely
  • 1 degree = π / 180 radians.

A radian can be written in a variety of ways: 1c, 2 radians, 3r, 4R, 5 ㎭.

The defined and some (approximate) derived relationships between degrees and radians:

360º = 2 ∙ π ㎭

1º = .01745 ㎭

1 ㎭ = 57.2957º


Keep Tuned In, More To Come

~~ Cris    


PS. Thank you, Paul, for all your help!



24MAY2016 fixed title typo it sb its

You should know by know that I have a pension for things that well blow up or end badly. You can alway go to the German Safty Test video for your giggles.  He now (1:52 - 2:39) draws and explains a schematic of the power supply of this silly thing. For some strange reason, he puts a transformer after a bridge rectifier. Now when I went to grade school (a long, long time ago, when we did "duck and cover")  and you found out that DC will not make a magnet. You just don't create the magnetic lines of force.  Also, NEVER put a cap between transformer windings. Below here is what he should have drawn:

New-Schematic.pngHe gets a big FAIL.


See you soon

  Cris H.

Ok, Hold on buckle in. This post will not be pretty.  THE PROBLEM: Is the Arduino's instance on their IDE and a crippled ANSI C/C++ language called Sketch.  By the time, you have written a couple of what they call a Sketchs. They have really messed with you. As the two functions that basically you use are setup() and loop(). My aim here is not to teach you how to write a nice program in ASNI C/C++.


harrison@Whirlwind ~ $ ls Tools


harrison@Whirlwind ~ $

My Tool Directory

Figure 1

My Goal: Is to show you the light, just to guide you. My "go to" tool for Integrated Software Development Environment is the Eclipse IDE with standard GNU toolchains, running on my LinuxMint 17r2 desktop. I do not work in a M$ environment so I will not distract you with those comments.  I have several specialized versions of Eclipse such as eclipse-avr, which is what I will be talking about. OK, let's get started. Fist we have to download a bunch of stuff. Now I put all my tools in my Tools directory (Figure 1). Use my directory structure it will make you life easier for you, so try it. Note: All downloads are for Linux 64 bit ubuntu distro.

  1. Arduino's IDE
  2. eclipse IDE.
  3. Java Runtime 6 or higher (use your package manager. Synaptic) It comes with the distro.
  4. AVR plugin for eclipse. (Well get this in eclipse itself)
  5. The GNU-AVR toolchain. You will need to execute this command string in your terminal:
    sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude


Screen Shot of Synaptic Package Monitor
Figure 2

OK let's start in your arduino directory and we will install the arduino-1.6.2-linux64.tar.xz as arduino/arduino-1.62.

Now go to your eclipse-avr directory and will install the eclipse-cpp-mars-R-linux-gtk-x86_64.tar.gz as eclipse/eclipse

If you haven't executed the command to get the GNU-AVR toolchain, then do so now.  Now is a good time to check for the JAVA Runtime 6. If you have 7 you don't need 6 (Figure 2).

Ok, now we have to launch eclipse, click on the eclipse icon in your Tools/eclipse-avr/eclipse/ directory. It will ask you for you default workspace (say yes), you can always change it. DO NOT CHECK THE BOX "Use this as the default and do not ask again." Now the eclipse IDE will launch.  So let's add the AVR plugin. Go to: Help > Install New Software. A new window called Install will open. Near the top is a drop-down box with "work with:" to it's left. Click the box and type then click add. In the pop-up box that appears type AVR Eclipse Plugin into the "name" box (Figure 3).

Screenshot from.eclipse.png

Screen Shot of eclipse Install/Add Repository

Figure 3

Now Please restart your eclipse IDE File > Restart. When eclipse restarts  your eclipse IDE should now look like this (Figure 4):

AVR plug-in installed

Figure 4


Keep Tuned In, More To Come
~~ Cris

UPDATE 8/23 Blame this on Mario... He though that NetBeans IDE might also work for the AVR programming. Here's what I got after hours of getting it configured. It looks like I will have to put it out of its misery, and remove a really bad tool.  ~~ CAH



Utter Failure, What a Joke

Figure 5


MPCD Prototype

Figure 1

Well, here we are back at the MPCD, I have blogged twice before about this unit. First, where I got the pin-out for  MPCD and got it working. Then I had to rewire the cable. Well, now it's the third time..

The Interface ( switches ) are arranged in 5 x 4 matrix, so I could just build a matrix, add diodes, and write a scan module. Nah, that's too much work! If you remember my CP-1252/ASN-128 CDU (Figure 2).  I interfaced the CDU  with an Arduino and the PS/2 interface. Good, this will simplify both my hardware development and software, REUSE the PS2 Keyboard code base. This gives me my code-base for both the CDU and the IOP.

The Set Up. Dah rules, there are just a few:

  • Each key switch is connected to the PS2 Keyboard controller an SPST, normally off, momentary push, non-locking switch.
  • Each key switch shall be referenced by its position on the bezel.
  • Each key switch shall be labeled in the code base as KeySwitch.[letter] ie the  busted switch on the bottom as KeySwitch.Q
  • Each key switch shall be lit by an internal LED.
  • Each LED shall be known as KeySwitchLED[letter] the same switch as before would now be KeySwitchLED.Q
  • For reference, all the switches and LEDs shall have two (2) contacts each. My notation ::= is defined as
    • Switch Common ::=  1
    • Switch Active Leg ::=  2
    • LED common ::= 3
    • LED anode ::= 4

Since there are 20 keys, I only need to use three eight-bit, I2C, I/O expanders, the Texas Instruments PCF8574A.Now that means I have 4 extra pins on expander #3. I have a chart (Figure 3) consisting of ASCII output, expander, i/o pin. It is color codedto help keep it straight.


LEFT (top down)RIGHT (top down)TOP (left to rightBOTTOM (left to right)
ADDENDUM: It seems that the switches are labeled counter-clockwise from the top-left.

Interface Table
Figure 3










CP-1252/ASN-128 CDU

Figure 2


The Communication. You should remember that I consider the Arduino rather stupid. So his function in life is to pass key presses to an IOP. The IOP has to generate the appropriate video and light the appropriate keys. So I want to make this device independent.  So let's get on with the Key LED processing.


First let's write the function "MFD_LED"  it will have two arguments: led_ID (char), Led_State (int)

and then the "LedDriver" it will have three arguments: expander_ID (int), Port_Number (int), led_state (int)


// 8574A address range 0x38 to 0x4F
// defines
#define EXPANDER1 0x38
#define EXPANDER2 0x39
#define EXPANDER3 0x3A
#define EXPANDER4 0x3C 
#define EXPANDER5 0x3E
#define EXPANDER6 0x41


Current Style Bezel
Figure 4
// prototypes

LedDriver( int expander_ID, int PortNumber, int led_state );
void MFD_LED( char led_ID , int led_state );  // the void might be changed to an int.

// Control the LEDs.
MFD_LED( char led_ID , int led_state ){
if(led_state => A && led_state <= H){
  LedDriver( EXPANDER4, PortNumber, led_state );}
if(led_state => I && led_state <= P){
  LedDriver( EXPANDER5, PortNumber, led_state);}
if(led_state => Q && led_state <= T){
  LedDriver( EXPANDER6, PortNumber, led_state );}
if(led_state > T){
    // error or special.}


LedDriver( int expander_ID, int Port_Number, int led_state ){
// This function is to wrap the 3 Arduino's Wire Libary calls.
Wire.beginTransmission(expander_ID);  //Begin the transmission to PCF8574A
Wire.send(led_state);                //Send the data to PCF8574A
Wire.endTransmission();              //End the Transmission

SOFTWARE: In fact, I will be using three (3) different software libraries:

  1. Ps2 Keyboard library that just outputs ASCII characters (no IBM scan codes).
  2. Wire library that talks to the PCF8574A I/O Expanders. 3 output for the LEDs and one input for some switches.
  3. Serial library that lets the Arduino communicate with the world via a USB virtual serial connection.

Stay Tuned In, More To Come,



My Lab

Figure 1

Ok, Not quite everything I do makes some form of loose flying and then landing crud, dust, FOD or whatever you want to call it. I'm going to refer to it as FOD or Foreign Object Debris. In your shop, FOD is something that you want to manage and or mitigate. Personally I live small 2 bedroom apartment, and I don't have a lot of room. My lab is about 11 x 13 feet one wall is just storage. Sometimes you can't even walk around,  and I alway  have too much going on at once.

Problem: 'So how do I control FOD in this mess??'

Oreck XL
Figure 2

So the first thing that I acquired from the local Goodwill was this Oreck XL handheld, which cleaned the desktop ok. But this solution does not go far enough.

Way Too Big!
Figure 3

Figure 3 is what I want, but way too big, and costs big bucks. So I need to do this on no budget or almost for free.

Solution: And it's going to be cheap!

Dust collection systems work on cyclonic action or a cyclone in a can. You need a source of clean air, got it (figure 2).  What about a can? I went to Home Depot and got a 5 gallon "Homer Buckett" and lid (Figure 4).

Figure 4

First you will need to drill a hole in the center top of your bucket to accept your vacuum's hose.  This will have to be air tight.

Second you will need to drill or cut out an oval hole in the side of the bucket. This hole should be  below the strengthening rings.

More to come!



NexGen: Rudder Pedals

Posted by phoenixcomm Top Member Jul 31, 2015

Well, you know you need rudder pedals to perform coordinated turns, and differential braking. I used to have this solved with a  Thrustmaster  RCS (Figure 1), But in moving etc they got strayed, misplaced or stolen. Sometime in 2011 I came across this hot mess (Figure 2) using two (2) air cylinders cross plumbed, ensures device centered.


Thrustmaster RCS

Figure 1

A good idea, bad implementation.

Figure 2

CH pedals

Figure 3

CH pedal internal

Figure 4

Athough the pedals are fixed (not good) the idea is brilliant. The other day while scrounging around at a local Goodwill store, I came up with a set of CH Products pedals (Figure 3). So here is the plan...

  THE ANALYSIS>The end unit should look somewhat like figure 1. That is one bar anchored in the center on a pivot. This has a mounting plate on either end mounted with a pivot. then the top can just be a rod that is also mounted on the plates and has a center pivot as well. This gives us the movement that we require for aircraft pedals.The CH pedals will be affixed to plates so the end results resembles Figure 1. The CH pedals cable only has 4 wires and will have to be replaced by a standard DB-25 cable that I have laying around. The unit will need 3 axis, two for brakes (one each pedal) and a center for the rudder


Close Up of the Mount

Figure 5

Crosswind pedals

Figure 6

If you look at figure 4 you will see the pedal sits on a post coming up through from the base the pedal pivots on the white arm. This could be replaced with a hunk of Delrin® plastic or some soft brass.  The two pivot points are a pair of sealed bearings. Figure 6 is a picture of the new kid on the block.

8/1/2015 In response to mcb1. Figures 7 and 8 are the real things from a Beechcraft. You will notice that each pedal is attached to a bar with an arm. You will also notice the brake cylinder mounted to pedal as well. this is for differential breaking. In Figure 9 you can clearly see them with the guts out of the way.  You now can see clearly the yellow actuator arms. These would be connected to a clevis on the tail. So you now can use one pot or two. Now this is where you could mount the two air cylinders, connected to each other (Figure 2). The two air cylinders would keep the pedals centered, and aligned without the need for the second cross bars (Figures 1, 6).



Beechcraft  Pedals: Top Right

Figure 7

Beechcraft Pedals: Top Rear

Figure 8

Beechcraft Pedals: Stripped

Figure 9



Beechcraft Pedals: with BellCrank

Figure 10

Beechcraft Pedals: Showing the Geometry

Figure 11

8/2/2015 Ok I just posted the blurb below and found these two photos (Figures 10, 11). This will make my life easier. I can mount my Rudder Potentiometer via the center of the Bellcrank. For auto centering, I can mount my two air cylinders on each end of the  Bellcrank.  I hope this clears thing us for the non-aircraft types,  and my self..  lol


Ok this is more of a bather than a post. Buckle up the ride will not be smooth! The US National Highway Traffic Safety Administration (NHTSA) in April 8, 2005 said it should be on all cars by 2008 and now trucks.. ok thats cool. Commercial Aircraft have had them for years BC (Before Cars) .. b727wheel.jpgBut in between those 2 camps there is a huge Black Hole. Whatever  you wish to call the tires, ie: rubber, skins, sneakers, and others. Tires are the most ignored, or understood part of your plane.

Your cars tires life is pretty easy compared to an aircraft tire. You could use your car's tires to take off.. But landing is a whole nother kettle of fish. You, that is your wheels hit the runway at 70 to 200  knots. Try this stunt with car tires and they will shred.  And then you most likely will die. Game over. No do overs. Why is this you ask? Well it has to do with several factors: strong centrifugal forces,  and Traction Waves. Every time you land your tires distort. The forces on a Boeing 747 is about 6,000G. This has to do with the weight of the plane and the speed that you touch down.. Even a light aircraft landing at 100kn you tires will take a wallop.

Analysis:  Ok now what do we need? Ok lets use a car's TPMS as a model.

  1. We need the sensor in the tire with a transponder.. The data that we need and would like to capture:
    • Tire Pressure.. most of the damage is to under inflation.
    • Tire Temperature..
    • Tire mounted accelerometers to generate X and Y This tell you the amount of defection in the tire.
  2. We need a rf receiver at 428Mhz to acquire the data
  3. We need a rf transmitter near each wheel sending 127Khz to be the initiator.
  4. The receiver should send data to the embedded microprocessor via a bus, ie. CAN, TCPIP  etc.
  5. The display system and master caution will receive its data from the embedded microprocessor via a bus.

Function Generator
Image 1

This is one of thoughs things that just comes along. It is a B&K Precision 3010 Function Generator, it was 5 bucks at the local Goodwill. It did not have a power cord set and I'm never going to find one (image 2).


Power Plug not NEMA

Image 2


Hack #1

Image 3


Hack #2

Image 4

This connector is not the standard oval, its smaller. Over time I have seen some terrible hacks, good ol' Southern Engineering, Rigging, etc (please see images 3 and 4). But I'm getting that cart before the horse again.. So I guess I will have to power this up with my suicide cord set. After soldering a chassis power connector, and then plugging it in. It's Alive!!

The images below where taken with my Tektronix 475A Oscilloscope

TTL Output

Image 5

Square Wave

Image 6

Sine Wave

Image 7

Triangle Wave

Image 8










Now I will have to find a power connector.


  Stay Tuned In, More to Come

  ~~ Cris

  B&K 3010 Function Generator - User Guide

  B&K 3010 Function Generator - Schematics

UPDATE 7/29/2105: I just had one of my computers die on me. It's power supply died. I normally toss the case and keep the wire with the connectors on them (good for hook-up wire). Well, you know the saying: my software had a bug in it. They say: "that we are doomed to repeat history"; it's kind of what happened to me.  As I was pulling the dead power supply for is parts and the donation of its power cord connector. It seems that the reason that my power supply died was because of the BUG.

This Power Supply Died From a Bug

image 9

Bigger Bug

Image 10

Donor Power Supply Plug

Image 11

You had that pile of transistors and you didn't know if they worked? Well I know I have... So today while rummaging around

Before we started
Image 1

in my local pawn shop I spoted this old tester in one of the stores bins. I was labled in Spanish no less.  It was marked $14.95, but I got it for 5 bucks.. When I opened it up, I found out was rather crude, and nothing to write home about.



The Guts No Blood yet

Image 2

The Schematic
Image 3


THE PLAN: I would like to have a more modern device.. maybe even with a USB interface to my laptop. I know this may seem a little grandiose. But what the hey. I could even have a Arduino buried in there as well.. And besides I know I can't get that battery any more! I would also like to test other types of devices.

Keep Tuned In, More To Come

Cris ~~

Hey here is a block diagram of the Plan!!

Block Diagram of tester
Image 4

The neat part of this tester is that I can test  unknown and unlabelled parts. The test leads can be put on any leads, so there is no wrong way to test or install a part. The I2C Bus is connected to a Arduino Mega which will do the lifting. .