QuickRemote interface
QuickRemote is a low cost USB interface for a computer control of the shutter of Digital SLR, for long exposure, capture.of sequences, help for focusing, etc. An hardware solution for these functions consist to use the serial or the parallel (printer) interface. But now, USB is a more rationale, plus-and-play, and easy to use method. Remember, the images captured by the camera are downloaded to the computer through an USB link. So, QuickRemote is an homogeneous solution: only one USB link is necessary between the computer and the DSLR. Amplified USB cable can be used for distance up to 10 meters.
QuickRemote include also a 8-bits ports (DB9 connector), programmable, for future extension, like autoguiding, focusing, ...
The
QuickRemote interface.
Functional
diagram.
QuickRemote use a FT245BM chip, a easy to use USB to parallel FIFO. See here for details http://www.ftdichip.com.
The
FT245BM chip.
To make life even simpler, the FT245BM can be used in the form of piggyback module. Ideal for prototyping and instant to use. See for example
DLP-USB245M : http://www.ftdichip.com/Products/EvaluationKits/DIPModules.htm
USBMOD2B
: http://www.elexol.com
QuickRemote exploit a special mode of the FTDI chip, called "Bit-Bang" mode. This basically latches data to the data lines until another write is performed by the computer. The job is simple for programmer! For a very good description of the Bit-Bang mode, download these file: http://www.dlpdesign.com/images/bit-bang-usb.pdf
The figure below present the typical electronic circuit. The pin 15 of the USBMOD2B is the bit 0 of the parallel FIFO. A very minimal number of circuit is necessary.
Schematic
diagram. The USBMOD2 can be easily replaced by a DLP-USB245M (click
here for download the datasheet).
There is no need to develop drivers for FTDI chips. The required DLL supplied by FTDI is free. A very decisive advantage! FTDI chip is also powerful, see for example the development of QuickAudine, the USB interface of the CCD camera Audine.
Listing below (C code) shows how to command the shutter.
//************ DECLARATION ******************
#include <ftdi.h>
...
...
...
typedef DWORD FT_HANDLE;
typedef DWORD FT_STATUS;
EXTERN
FT_HANDLE UsbHandle;
EXTERN HMODULE g_usb_module;
typedef FT_STATUS
(WINAPI *PtrToOpen)(PVOID, FT_HANDLE *);
EXTERN PtrToOpen g_usb_Open;
EXTERN
int UsbOpen(PVOID);
typedef FT_STATUS (WINAPI *PtrToClose)(FT_HANDLE);
EXTERN
PtrToClose g_usb_Close;
EXTERN int UsbClose();
typedef FT_STATUS (WINAPI
*PtrToWrite)(FT_HANDLE, LPVOID, DWORD, LPDWORD);
EXTERN PtrToWrite g_usb_Write;
EXTERN
int UsbWrite(LPVOID, DWORD, LPDWORD);
typedef FT_STATUS (WINAPI *PtrToSetBitMode)(FT_HANDLE,
USHORT, USHORT);
EXTERN PtrToSetBitMode g_usb_SetBitMode;
EXTERN int UsbSetBitMode(UCHAR,
UCHAR);
...
load_libftdi();
...
//********** SHUTTER COMMAND ************
unsigned
char tx[1];
unsigned long ret_bytes;
UsbOpen(0); // open ftdi device
UsbSetBitMode(0xff,1); // enable bitbang mode
tx[0]=0;
UsbWrite(tx,1,&ret_bytes);
tx[0]=1;
UsbWrite(tx,1,&ret_bytes);
// open the shutter
sleep(exposure); // delay, i.e. exposure time
tx[0]=0;
UsbWrite(tx,1,&ret_bytes);
// close the shutter
CloseUsb(); // close ftdi device
//********************************************************************
int
UsbWrite(LPVOID lpvBuffer,DWORD dwBuffSize,LPDWORD lpdwBytes)
{
return
(*g_usb_Write)(UsbHandle,lpvBuffer,dwBuffSize,lpdwBytes);
}
//********************************************************************
int
UsbOpen(PVOID pvDevice)
{
return (*g_usb_Open)(pvDevice,&UsbHandle);
}
//********************************************************************
int
UsbClose()
{
return (*g_usb_Close)(UsbHandle);
}
//********************************************************************
int
UsbSetBitMode(UCHAR ucMask,UCHAR ucEnable)
{
return (*g_usb_SetBitMode)(UsbHandle,ucMask,ucEnable);
}
//*******************************************************************
int
load_libftdi(void)
{
g_usb_module=LoadLibrary("Ftd2xx.dll");
if
(g_usb_module == NULL)
{
AfxMessageBox("Error:
Can't Load Ftd2xx.dll");
return 1;
}
g_usb_Write=(PtrToWrite)GetProcAddress(g_usb_module,
"FT_Write");
g_usb_Open = (PtrToOpen)GetProcAddress(g_usb_module,
"FT_Open");
g_usb_Close
= (PtrToClose)GetProcAddress(g_usb_module, "FT_Close");
g_usb_SetBitMode
= (PtrToSetBitMode)GetProcAddress(g_usb_module, "FT_SetBitMode");
return
0;
}
QuickRemote include in a small box a specific PCB, a FT245BM chip, two optocouplers TLP627-4, a control LED, an USB connector and a DB9 connector for user I/O. Available from:
Essentiel Electronique
3 rue Montmorency
31200
Toulouse - France
Web : http://www.essentielelectronique.com
Email
: raymond@essentielelectronique.com