The not so Automatic 100

A computer controlled shutter for the classic 100-series Packfilm cameras

Many Photographers would like to have control over shutter speeds and aperture settings of their camera.
The popular folding packfilm cameras of the 1960s are fully automatic. The three manual models (180,190,195) are scarce and very expensive.
The exposure in the automatic cameras is controlled by an analog computer that integrates the current through a light sensitive resistor.
Once the integral reaches a certain value the shutter snaps shut.
Some people have successfully modified the exposure circuit with a potentiometer in place of the photoresistor to set the shutter speeds. I tried this but the results were not so good.
So I threw the analogue electronics out altogether and replaced them with a microcontroller that does the shutter timing.
This works well with shutter times 1, 1/2, 1/4, 1/8, 1/16 1/32, 1/64, 1/128, 1/256, 1/512 seconds and Bulb
Apertures are set by the film speed and Sunny/Dull settings to f/8.8 , 12.5 , 17.5 , 25 , 35 , 50
The modified Automatic 100 works when set with a Light meter.

Hardware


Circuit diagram

Microcontroller

The PIC12F629 from Microchip is very small and cheap.
Six of its eight pins are freely configurable inputs and outputs with interrupts on change.
A 4 Mhz oscillator is on chip.
The 8 Pin DIL package is convenient for hand soldering. There is also a very small SMD package available.
It runs from a 3V> to 5V supply. I chose 4,5V like the original shutter so it can run on 3 AAA cells.
The PICKIT2, a complete development platform for many PIC controllers, is inexpensive and includes all the necessary hard- and software.

Switch

Shutter speeds are set through a BCD (direct, "1" = closed)coding switch.
External 56K pull-up resistors are used because the internal weak pull-ups did not work. The resulting bit pattern is inverted - 0=1111 1=1110 2=1101 etc. A complementatry encoder would result in a BCD pattern but those switches are more scarce and more expensive.

Magnet Driver

The shutter magnet is driven through a "open collector" NPN darlington transistor. I used a MJD122 but any high gain (>1000) type would do.

Shutter contacts

We need the shutter contact that closes on shutter cocking and opens when the first blade has snapped open, the button coontact for "B" mode and the X-sync for the flash connector. All three contacts share a common "ground" wire.

Mechanical q

The circuit goes where the analog circuitry was before. The encoder switch could either be in the front of the shutter or on top of it.

Program

The Assembler program , (assembled HEX file) initializes the PIC first.
When the main loop starts the PIC goes into sleep mode and waits until the shutter is cocked (shutter switch goes low).
On cocking shutter(switch goes low) the PIC turns the holding magnet on and reads the dial switch, then continuously tests for shutter open (shutter switch high).
When the shutter has opened the program calls the exposure table where it finds the value to start the timer with,starts the timer and cuts off the magnet ->shutter closes.
If the dial switch is "9" the program jumps into the "BULB" routine , which holds the shutter open as long as the button contact is pressed.
The button switch uses an input of the dial switchg that is open at "9".
Then the program jumps back into the main loop and the PIC goes to sleeop until the shutter is cocked again.

include 
     __config (_CP_OFF & _MCLRE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF & _CPD_OFF &_PWRTE_OFF)

     cblock 0x20
Delay1								; Adjustable exposure delay
	 endc
     
     org 0

Init:
	 bsf	   INTCON,GIE			; Enable global interrupt
	 bsf	   INTCON,T0IE			; Enable timer0 interrupt
	 bsf	   INTCON,GPIE			; Enable interrupt-on-change
	 clrf	   GPIO					; Initialization GP0-GP5
	 movlw	   0x07					; TURN-OFF analog comparator
	 movwf     CMCON				 
	 
	bsf       STATUS,RP0			; Select bank 1
	 call	   3FFH					; Load callibration value for the internal oscillator
	 movwf 	   OSCCAL	
	 bsf	   IOC,4				; Enable interrupt-on-change, GP4
	 bcf	   TRISIO,5				; Make GP5 an output
	 movlw	   b'00000011'			; Set timer0 prescaler to 16 
	 movwf	   OPTION_REG
	bcf       STATUS,RP0			; Back to bank0

MainLoop:	 
	 bcf	   INTCON,T0IF			; Clear timer0 interrupt flag
	 bcf	   INTCON,GPIF			; Clear switch interrupt flag
	 
	 sleep							; Wait for switch being pressed 

	 btfss	   INTCON,T0IF			; Debouncing (4096us delay)
	 goto	   $-1
	 
	bsf	  	  GPIO,5				; Set GP5 output high. (turns ON the electromagnet, holds shutter open)
	
	 movf	   GPIO,w				; Read coded switch (shutter dial)
	 andlw	   b'00001111'			; Clear the upper nibble
	 xorlw	   b'00001111'			; Invert for straight BCD switch

	 btfss	   GPIO,4				; Wait for shutter to be opened. (switch being released)
	 goto 	   $-1
	 
	 clrf	   TMR0					; Start timer0 
	
	 call	   LookUpTable			; Get exposure time
	 call	   Delay				; Exposure

Close:	 
	bcf	 	  GPIO,5				; Set GP5 output low. (turns OFF the electromagnet, closes shutter)
	 
	 goto	   MainLoop

Delay:								; Exposure: (adjustable time delay)
	 movwf	   Delay1				
	 bcf	   INTCON,T0IF			; Clear timer0 interrupt flag
	 btfss	   INTCON,T0IF			; Wait for timer0 overflow interrupt flag (4096us)
	 goto	   $-1
	 decfsz	   Delay1,f				; 4096us x delay1 (value is taken from LookUpTable)
	 goto	   $-4
	 return

LookUpTable:						; LookUpTable returns delay1 value
	 addwf	 PCL,f
	 retlw	 b'00000000'			; Coded switch:0 4096us x 256
	 retlw	 b'10000001'	 		; Coded switch:1 4096us x 128
	 retlw	 b'01000001'			; Coded switch:2 4096us x 64
	 retlw	 b'00100001'			; Coded switch:3 4096us x 32
	 retlw	 b'00010001'			; Coded switch:4 4096us x 16
	 retlw	 b'00001001'			; Coded switch:5 4096us x 8
	 retlw	 b'00000101'			; Coded switch:6 4096us x 4
	 retlw	 b'00000011'			; Coded switch:7 4096us x 2
	 retlw	 b'00000001'			; Coded switch:8 4096us x 1
	 call	 BULB					; Coded switch:9 regime B 

BULB:
	 btfss	   GPIO,1				; Wait for button switch being released
	 goto 	   $-1
	 goto	   Close
	 
end

Test

Testing the shutter speeds with an oscilloscope shows that they are accurate.
Test shots with FP-100C, light measured with a Gossen Digiflash meter are exposed correctly.
Cocking the shutter powers the magnet.
To release the magnet without taking a picture the bellows is pushed back the bellows switch in the battery compartment cuts off power to the pic. The shutter can now be tripped without opening.

Test photos:

This PIC project could be easily modified for driving solenoid shutters like the Ilex, Melles-Griot etc.

Photos


Prototype, PIC side view


Prototype, switch /driver side view


Prototype, side view


Shutter, front view. black=ground, red=+4,5v, rec/brown=magnet, white=button-sw, violet=shutter-sw


Shutter shell with dial switch and LED


PIC board in the place of the old circuitry.


Driver transistor, electrolytic cap., Zeners, pull-up resistors.


Electronics in place, pc socket wired, before closing.

Many thanks to Anatoly Johnson for helping me with the programming.
Written by Georg Holderied 2011.You are welcome to copy, distribute, modify this project.
I would appreciate a link back to my flickr page http://www.flickr.com/photos/polapix/