Unlike our previous interfaces, SimVimCockpit has a "system bus" architecture that allows you to extend the number of inputs and outputs for hundreds of toggle switches, buttons, encoders, dozens of numeric displays and gauges, and guarantees that you can make a full set of input controls for any complex cockpit.
The term "bus" is related to a set of unified wires which can be used by multiple components in the system to receive or send data.
As a central control unit for SimVimCockpit Interface any of Atmega2560 based controller boards available on market can be used with SimVim firmware, which you need to upload to this controller directly from the plugin menu.
The firmware is an essential part of SimVim interface, and provides all input/output functionality together with SimVim plugin.
To form the "system bus" 8 contacts of the controller board are allocated as fixed outputs (pins # 22 ... 29):
All the bus wires are connected to the controller board pins via serial resistors (200-300 ohm each).
This is not necessary, you can omit the resistors, but they act as a fault protection components in case if one of the bus wires makes a short-circuit to the GND somewhere along its length, which could cause overload the controller output. So, if you sure all your connections are reliable, you can make the bus without resistors
NOTE: The +5V output pin used only as a source for any number of multiplexers connected to SimVim bus and also it can be used to power some low-current output devices - LCDs, PWM controlled coil gauges and other. See more detail about system powering here.
This bus architecture allows you to create a flexible modular system that guarantees that you can make a full set of input controls for your cockpit and easily expand it by connecting extension modules to the bus at any time into the working system.
To extend the number of inputs/outputs and connect multiple switches, encoders, annunciators, displays a cheap CD74HC4067 multiplexer breakout boards are used.
CD74HC4067 multiplexer works as multiposition electronic switch, when only one of the 16 terminals is connected to the signal (SIG) pin at any given time. The 4 address inputs on this board (S0...S3) are used to select one of 16 ports (0..15) to be connected.
To extend the number of inputs to 16 you need to connect a new extension board to SimVim data bus as described here, and select any free pin number for this input extension. The "SIG" output of every input multiplexer is connected directly to this pin.
To connect a number of 7-segment displays, LED serial drivers, PWM devices, stepper motors the CD74HC4067 module is used as output multiplexer. One muliplexer can control up to 16x output devices.
All inputs of every output multiplexer besides of "EN" are connected to the system bus and use 4 address lines and one "S" (SIG) line. The "EN" input is connected to the controller output pin assigned for this output multiplexer board.
Note: Any single extension board can be used either for inputs or outputs only! Don't try to connect switches to output multiplexer.
As was mentioned above you can buy any of the available ATMega2560 controller boards, including the "standard" Arduino Mega2560. There are many others manufacturers and sellers of various controller boards with this atmega2560 controller. In the photo you can see three mini controller boards that we are using.
All these controller boards have been tested with SimVimCockpit, the firmware was uploaded to every of these boards from SimVim plugin menu without any problems.
There are some other atmega2560 controller boards on the market like "Crumbuino-Mega", various "core" modules. You can find them yourself using such keywords as "2560 core", "atmega2560 mini", etc.
Usually, a bus refers to a set of wires used to transfer data between components, when every component uses the same signal lines of this bus and can be connected to them logically either simultaneously or only one device in one particular period of time.
To simplify diagrams the signal buses are represented as single thick lines instead of drawing a large number of signal lines:
The SimVim firmware is an optimized program code that should synchronize control of a large number of different input/output devices. SimVimCockpit interface doesn't allow to use the controller board as a "usual" Arduino and users can't add any custom code, as there is no Arduino sketch, and the plugin uploads firmware directly to the board. At this moment we are using Atmega2560 as a convenient and easily available controller platform for SimVim firmware.
In SimVimCockpit you can make almost everything without the need for additional coding. The Interface is supposed to be self-sufficient in creating any I/O configuration, as it will support a large variety of I/O devices, and the ability to provide conditions for complex interaction of these devices with simulator data and each other. But, we plan to include the option to connect a programmable slave board to the master controller for additional functionality.