Download: EOS-Shutter V3.1

Canon EOS Shutter-Emulation

Erwin Lotter, 13.04.2022                                    

Currently, this page is a bit out of date. For information about additional EOS models, please try a translation of the German version.

This article describes how to operate a Canon EOS 600D or 1100D camera without a shutter. 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”
(description of the provider)

 2.)  “‘Pro Mini’ atmega328 3.3V Replace ATmega128 Arduino Compatible Nano“
description of the provider)



Both came by direct import from Hong Kong for the price of about 2.50 € and 1.80 € (shipping free!). Tax was not an issue here in Germany due to the low prices, but delivery times can be 2-3 weeks. The only little problem was the CH340G USB controller on the first board, for which the Arduino-IDE had no driver installed, so I had to get one and install manually (CH341SER.zip)..

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. With me it worked, but I have not tested yet whether it works also in a cold night.


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.)

Another small difference to Hendrik's design is that I use simple diodes instead of the MOSFETs at the outputs, which I had still lying around. Possibly they can be omitted completely, but I didn’t want to risk a mainboard and therefore did not try it. In addition, a 5V test operation of the Arduino is possible without problems with the diodes (or MOSFETs) present.

The connection differs significantly for the two camera types, especially because the shutter of the 1100D has only one holding magnet ('coil'), while two are installed in the 600D:

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. 

The emulator is connected to the camera with a ribbon cable with a 0.5 mm pitch, e.g. from a defective shutter whose test points are good for soldering. This cable can also be cut through the middle of the test points so that you can solder it back on later. I would advise against soldering to the connector on the camera board. The grid is rather narrow and solder bridges are difficult to remove.


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.1“), 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".

Emulation strategy

Unlike the original emulation, only the coil signal is used as a trigger presuming that the timing of the long and short shutter mode are identical except for the pause in the 'long mode', since both modes are based on the same mechanical sequence. The light sensor signals remain active, even if their LED is deactivated, but this does not disturb the camera logic. This not only simplifies the emulation considerably, it can now also be used for the live-view mode. However, shooting from the live-view does not work for all cameras, some hang up or react with an error, so that they can only be reset by switching off.

Between the emulated shutter movements, the Arduino processor goes into sleep mode and then only consumes a few microamps. In order to be able to really use this, the power LED of the Arduino has to be unsoldered or broken, which otherwise consumes approx. 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.