Download: EOS-Shutter V3.3

Canon EOS Shutter-Emulation                 

Erwin Lotter, 23.01.2022                   

This page describes how to operate various Canon EOS models without a shutter and/or mirror. Currently emulated are:

6D, 6Dmk2, 50D, 60D, 70D, 80D (shutter only), 550D, 600D, 650D, 700D, 1100D, 1200D, 1300D, 2000D, and EOS M, M3, M10, M100.

The technique is based on the Canon EOS 1100D Shutter Emulation presented by Hendrik Beijeman. To simulate the signals expected by the camera, Hendrik used a bare microcontroller chip, which is replaced here by an Arduino. For programming it, the free Arduino IDE is used.

A small Arduino board that can be operated at 3.3V is suitable for easy integration into the camera. A board with an integrated USB interface is advantageous for testing and programming. From the pleasingly large range of inexpensive Arduino boards including the compatible China replicas, which are already available for around 2 euros, I have ordered these two boards:

1.)  MINI USB Nano V3.0 ATmega328P CH340G 5V 16M
            - Compat. Arduino Nano V3.0

2.)  ‘Pro Mini’ atmega328 3.3V 8MHz

Due to the controller specifications, the 3.3V model of the 'Pro Mini' runs only at 8 MHz instead of the more common 16 MHz. It is therefore important to pay attention not only to selecting the correct board type, but also the correct clock frequency during programming! The popular 5V / 16MHz version of the 'Pro Mini' often also runs fine at 3.3V, but it is not guaranteed to work reliably under all operating conditions.
You can also apply a higher voltage from the camera to the RAW pin of the Arduino and then also use the 5V/16MHz Arduino variant. Even the 7.8V from the battery will work. In this case, however, the Arduino is active even when the camera is switched off, which is usually undesirable: it then permanently draws some current and can only be reset by removing the battery.


Before you start, you should be aware that such an intervention will invalidate any warranty. Without sufficient knowledge of electronics, there is a high risk of irreparable damage to the camera!

Unlike Hendrik's solution, I do not use the P5 signal of the camera, because it is not suitable to simulate the Live-View mode. One can, however, draw the required information from the P7 signal alone and simulate all modes with a small modification of Hendrik's timing. Then, it is also avoidable to tap P5 directly on the mainboard of the EOS, which is not quite trivial. Only for the 3.3V you have to solder directly on the EOS board, but this is quite easy. (Unfortunately, the coil supply can not be used to power the Arduino because it is not permanently present.)

All emulators use the coil signals to generate the control signals for the camera, which can be easily tapped into at the test points of the shutter cable. Only for the power supply voltage, you still need to solder directly on the EOS mainboard, but that is quite simple. (Unfortunately, the power supply of the coils can be used to power the Arduino only in the EOS M models because it is not permanent or, as with the 700D, too late.)

The Arduino outputs are isolated from the camera electronics by diodes to prevent damage to the camera electronics if the operating voltage of the Arduino is higher than 3.3V. Thus, for example, a test operation with a 5V Arduino via USB is easily possible.

The wiring differs significantly for the various camera types, with their shutters sometimes having only one holding magnet ('coil') (1100D, M), while others have two. The single and double-digit models (6D, 50D, etc.) also have a separate motor with additional control signals for the mirror.

Connection scheme for 550D, 600D, 1100D, 1200D, 1300D, 2000D, for additional models see below. The description of the functions of the individual signal lines can be found in the control program.
The resistor 'Rs' is optional and serves to protect the mainboard against short circuits. It must not be chosen too high, otherwise the Arduino will have start-up problems. Values around 20 Ω seem well suited. 


An Arduino program – also called sketch – usually is passed via a serial (USB) interface to the Arduino bootloader, which permanently stores and executes the program after a reset or power-up of the Arduino. This takes about half a second, however, and that’s too long for the camera, which apparently checks on start-up, whether the shutter is all right.
For testing, the Arduino can be powered with an external source (such as its own USB port). If an external power supply is already present when the camera is turned on, everything is ok.

For real-time operation, however, the control program („EOS-Shutter V3.3“), configured and compiled to emulate either the 600D or the 1100D, must be transferred to the Arduino in such a way that it overwrites the bootloader and starts immediately when the Arduino is switched on. How this is done is shown very nicely on e.g. Adafruit Learning System. A short summary is given below in the section "Uploading a Boot Program".

Alternatively, lines that need to be low-level at startup can be connected to ground on the Arduino side with a 2.2k resistor. Then, it is sufficient to load the emulator code as a regular sketch.

Another solution is to use a faster bootloader, such as can be installed with the MiniCore package.

Emulation strategy

The Arduino is activated by a coil signal and sends the signals which the camera expects from the photocells and rotation encoders of its shutter. This usually works for all meaningful operating modes, including Live View.

During the times between the emulated shutter movements, the Arduino processor goes into a sleep state and then consumes only a few microamperes. To truly take advantage of this, however, the power LED of the Arduino must be desoldered or broken, as it otherwise consumes about 1 mA.
This also prevents light from the LED from hitting the sensor.

Installation and application of the emulator board

After the shutter removal, for which the camera has to be completely disassembled, there remains a cavity that the Arduino board can be inserted easily. You should also remove the mirror and get significantly less shading with F/5 or faster  optics. As a reward, you get a camera that works completely noiseless and is no longer subject to mechanical wear.

Without a shutter, of course, the minimum exposure time is severely restricted: pictures in daylight or from the moon are no longer possible. The lower limit is determined by the duration of the reading process, which is around 1/10 second. The minimum exposure time at the top edge of the image is approx. 1/50 s and increases linearly downwards by 1/10 s - a behavior that, by the way, also limits the minimum exposure time of darks also with shutter.

This means that with 1 s exposure time there is a difference of about 10% between the top and bottom edges, with 10 s about 1%. In the first case, a flat field correction is advisable in any case, with 1% variation one can usually do without it. Such a level correction can also be done numerically. It is also important to note when recording flats that their exposure time is not too short, i.e. not less than e.g. 10 s.

Uploading a Boot-Program

An Arduino sketch can be uploaded in a way that it overwrites the bootloader and runs without it. For this purpose, a second Arduino is used as an ISP (In-System-Programmer).
Three steps are required:

1. Convert an Arduino into an ISP Programmer

First, the second Arduino - the ISP - is connected to the PC and loaded with the Programmer software. The destination board must not be connected yet! In the Arduino IDE, select „Tools > Board“ and enter the type of the ISP Arduino.
Ensure that the correct COMx interface is selected. Select „File > Examples > ArduinoISP > ArduinoISP“ and then upload as a sketch. Next, the Arduino is marked as a programmer by selecting Tools> Programmer> Arduino as ISP (not ArduinoISP!).

2. Connecting the Boards

Next, the ISP is disconnected from the USB and connected to the target arduino: Gnd-Gnd and Vcc-Vcc are connected, as are D11, D12, D13 (MOSI, MISO and SCK). D10 of the ISP goes to RST of the target. Then connect the ISP to the PC again.

3. Upload to Target

Now, the target board must be indicated as the connected board - including the correct processor and the correct clock frequency (this will not be detected automatically)! Then the desired program is opened as a sketch. The upload, however, is not done with the upload function, but with „Sketch > Upload with Programmer“ (or Shift Upload Button). With this command, the ISP loads the program as boot code into the target.

Connection diagrams of the supported cameras:



650D, 700D



600D, 1100D



EOS M100