The SimVimCockpit interface uses a single 16 MHz microcontroller AVR ATmega2560 board as the central control unit. You can use any of the ATmega2560-based controller boards available on the market (Arduino Mega and others).
To make the controller work with SimVimCockpit you need to upload SimVim Firmware to it directly from the plugin menu. The firmware is an integral part of SimVim interface, it provides input/output functionality and hardware adapting, while the SimVim Plugin performs all configuration and data processing logic in the system.
All 70 controller pins are available for inputs and outputs (direct and extended), except those used for serial communication or reserved for Ethernet module (in LAN version). Potentially, you can have more than 500 digital inputs (plus extended button matrix slave board with 150+ inputs), up to 32 axis inputs, 300-500 LEDs, several LCDs and tens of 7-segment displays.
8 pins (# 22 ... 20) are reserved as 4 address bus lines used for all extended inputs/outputs and 4 control lines for output devices:
These signal lines are for outputs only:
NOTE: The +5V output pin can be used as a source for all multiplexers connected to SimVim bus and also it can be used to power some low-current output devices.
See more detail about system powering here.
This architecture allows you to create a flexible modular system and 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.
Note: These 8 pins are configured as outputs, so you should remember the common safety precautions regarding microcontroller (Arduino) pins working as outputs, that is, you should not allow an outputs overload situation, that could happen if you mistakenly short an output pin to ground (GND). In case when this output is in a "high level" state it will drain too high current that can damage it.
In SimVim firmware these outputs are always in "low level" and for only a very short period of program time they are in a high level state, so it's unlikely you could overload the address wire. But, you can add serial safety resistors (120 - 300 ohm each) that act as simple current limiting components. If you are sure that all your connections are reliable, you can make the bus without resistors.
For input (and some outputs) extension the CD74HC4067 multiplexers (sold as cheap breakout boards) are used in our system. Also, you can use the 8-channel 74HC4051 multiplexers if needed.
CD74HC4067 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.
The SimVim firmware program constantly, very quickly cycling through the address from 0 to 15 for all connected to the controller multiplexers. In the moment when needed channel is opened it either reads the input state or send data for output device connected to the selected channel
To extend the number of inputs to 16 you need to connect an extension board to SimVim address bus as described here, and select any free pin number for this input extension. The "SIG" (or may be "Z") output of every input multiplexer is connected directly to this pin.
So, you can connect 16 toggle switches or momentary buttons to the multiplexer inputs, or use appropriate number of inputs for rotary switches and encoders.
Note: probably only one output extension board will be needed for your system.
To extend a number of 7-segment displays the CD74HC4067 module can be used as output multiplexer. One muliplexer can control up to 16x 7-segment displays (and LED drivers if needed).
Five inputs (S0,S1,S2,S3,Z) of multiplexer are connected to the 4 address bus 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.
1. SimVimCockpit supports multiple serial outputs (up to 64x LEDs for one output), for this you need to use LED drivers or shift registers (you can see the list of such drivers on the "Components" section).
2. SimVimCockpit supports "LED matrix output" (up to 64x LEDs for one output), for this you need to use the MAX7219 controller .
3. To extend the number of PWM outputs in SimVimCockpit you can use one 24-channel PWM driver TLC5947 ).
4. For stepper motors control additional SimVim Stepper controller board is used. It is one Uno or Nano Arduino board with special SimVim stepper control firmware uploaded to it from the SimVim plugin menu.
5. For servo control additional SimVimServo controller board is used. It is one Uno or Nano Arduino board with special SimVimServo control firmware uploaded to it from the SimVim plugin menu. Also you can use the WitMotion 16-32-channel Servo Controllers.
6. Support for Button Matrix Extension board, the "SimVimMatrix" firmware is added and the "Matrix" board is included in the configurator.
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.
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 are considering the option to connect a programmable slave board to the master controller for additional functionality.