MCP Panel unit
I think the most dens populated panel unit is the MCP. On a relative small panel there is a load of buttons, switches, rotary encoders, indicators and displays.
In order to understand this you should read about FSIO panel hardware first.
I worked out a full schematic of the 737 MCP.
MCP Panel schematics
This is a PDF of the scematic (A3 format): MCP-8 DISP Direct placement ok corr CPU conn
The prevous schematics I used 74HC165 and Max7221 chips for the input shift register. For drawing the scematics this is not a problem. However in practice this is INCORRECT and can get you into trouble!!! The 74HC is MOSFET and its output characteristic is NOT TTL. The PIC18F4550 input is TTL. The non matching impedance of this signal at both ends can cause problems.The Max7221 is logicaly the same as Max7219 the difference is some timing in the SPI interface, use Max7219. So if you have copied the schematics before discard and download the latest
I use 4 input chips and 3 display chips.
Yes you’re right, I forgot the Bank Limiter switch that sits behind the HDG dial. If you want to implement that you just need to add an extra input chip.
I walk you trough a few of the indicators and switches, the rest is more of the same.
Displays and indicators
I use 3 display driver chips. The MAX7219 chip will drive 8 7 segment displays of Common Cathode type.
IC5 drives the Left Course display (3 digits) and the IAS/MACH. The latter is the only place where a decimal point is used on digit 2.
Var 0010, name D_CRSL, Link IOCARD_DISPLAY, Digit 4, Numbers 3 // Digits 4-6 Var 0011, name D_MACH, Link IOCARD_DISPLAY, Digit 0, Numbers 4 // Digits 0-3
Note that the rightmost (least significant) digit of a display is the lower numbered digit.
IC5 drives 7 digits, so one digit is left for indicators. (DIG7) IC7LED signal.
Digit 7 of IC5 drives: Indicator on the Speed push button, N1, FD indicator, AT ARM indicator etc.., please see bottom left part of the drawing.
The A segment of the DIG7 of the first display chip is number 64
Var 0030, Link IOCARD_OUT, Output 64 // Led SPEED Var 0031, Link IOCARD_OUT, Output 65 // Led N1
For the other indicators I use the DP drivers of IC6 and 7. Look at the HDG SEL button (S-HDRSEL) somewhere in the middle. The indicator LED of this button is connected to the circuits ment for the decimal point (DP) of the HDG display, digit 0.
The LED indicator of LNAV is connected to the DP of digit 4 of the ALT numeric display. Needless to say: “do not connect the DP on the 7 segment displays”.
The segments of Digit 4 of the second display driver are numbered: 96-103. This means the LNAV indicator is on 103.
So in SIOC:
Var 0032, Link IOCARD_OUT, Output 103 // Led LNAV
I did not use any of the other DP of IC1 and only 3 of the DP’s from IC 5.
Of course, you could implement a 4th display chip and avoid using the DP’s.
Push buttons, switches and rotary encoders
If this is the first panel unit in the chain then the left FD switch (S-FDL) is connected to the ‘A’ input of IC1. This is INPUT 0.
N1 button is connected to input C, so it will be input 2
Var 0020, name FDswitch, Link IOCARD_SW, Input 0 Var 0021, name N1, Link IOCARD_SW, Input 2
The HDG rotary encoder is connected to D en E of the second 74LS165 chip. The A input of the second 74LS165 chip is 8, so the rotary encoder is connected to 11 and 12. In the configuration script you only specify the first (lowest number input) used. So in SIOC:
Var 0021, name RotHDG, Link IOCARD_ENCODER, Input 11, Aceleration 2, Type 1
You’re not bound to the schematic I present here. You’re free to change for instance to make wiring as simple as possible. Just start wiring, don’t wory too much and find out what input a switch is on using the logging function of IOControl.
Let me know what you think.
I build this MCP and connected it to the FSIO CPU Card. It works as one can expect.
Same panel hardware with other system.
To prove that this panel hardware concept can be used with other microprocessors, I connected this MCP to an Arduino and wrote an Arduino program (ino). Find explantion about this here: MCP to an Arduino (UNO).
As the Arduino does not connect to USB, I cannot use IOControl and SIOC. The Arduino connects directly to the PMDGDataEventServer with serial interface.
One or the other?
The difference between a set-up with FSIO CPU/ SIOC and Arduino is that: all FSIO CPU’s use the same microcode regardles of the functions of the panel hardware behind. All configurations is done within the SIOC script. (Single place of configuration data).
The set-up with Arduino is that the Arduino ‘ino’ code has all the panel logic programmed, so you need a separate program for every Arduino-driven panel.
If you use PMDG, and if you want to make other panels that use data not being a part of the PMDG SDK, you need another means of getting to this data. The PMDGDataEventServer only interfaces Data and Events available from PMDG SDK.
SIOC offers connection to FSUIPC data, so it is more flexible.
One can say that FSIO-CPU is not panel-aware and Arduino is panel-aware solution.
The project above proves you could start using Arduino for single individual panels. But, if at a later time, you want to change to SIOC (for PMDG or Pro-SIM) you can do it without rebuilding your panels.
Programs are availalbe
Both programs are available for download when you register with my forum. phpjj.freeforums.org. In the first message of every forum there is a download dropbox link for the subject software.