Hi, everybody.
I recently bought myself an A480 and completely fell in love with CHDK, which is completely awesome.
I started to experiment with script writing and decided I'd like to write a script that would take accurate exposures at almost any light level - I'd really like to capture a sunrise, starting at twilight.
Here's what I got so far - I don't know how well it should work on other cameras.
Hopefully all of the parameters make sense - Starting stops is just the initial TV96 value divided by 96, and the camera goes from there by taking pictures and analyzing the RAW histogram.
@title Day/night intervalometer
@param a Save RAW
@default a 1
@param b Starting stops @ ISO80
@default b 0
@param c Pause between shots (s)
@default c 10
@param e Max shot length (15 s)
@default e 1
@param d EV offset (2/3rds)?
@default d -2
rem These can be parameters, but I don't think
rem there's enough room for them
rem @param i 100% level
rem @default i 64
i = 64
rem @param f Coverage %
rem @default f 99
f = 99
i = i * 8
j = i / 4
rem *** NON-PARAMETER VARIABLES ***
rem uvwxyz/UVWXYZ are reserved for counters
rem yz/YZ are reserved for counters in subroutines
rem N - shot counter (only tuned shots, not guide shots)
rem I - guide shot ISO - 0 for 100, 1 for 1600
rem G - guide shot shutter speed, TV96 value
rem g - tuned shot shutter speed, TV96 value
rem C - tuned shot correction amount, based on histo
rem F - flag - used for multi-line if/then statements
rem h - histogram range
rem H - ""
rem J - previous adjustment direction
rem to prevent flip-flopping for a while
rem 1 - longer exposure time
rem -1 - shorter exposure time
rem 0 - first change this shot
rem L - shutter speed limit imposed on shot
rem K - iso level of the final image
L = -768
if e = 1 then L = -375
if e = 2 then L = -471
if e = 3 then L = -527
if e = 4 then L = -567
if e = 5 then L = -597
if e = 6 then L = -623
if e = 7 then L = -644
if e = 8 then L = -663
if e = 9 then L = -679
if e = 10 then L = -693
if e = 11 then L = -707
if e = 12 then L = -719
if e = 13 then L = -730
if e = 14 then L = -740
if e = 15 then L = -750
if e = 16 then L = -759
N = 0
if a < 0 then a = 0
if a > 1 then a = 1
shot_histo_enable 1
I = 1
G = (b * 96) + 414
:anothershot
set_raw 0
if I = 0 then set_iso 2
if I = 1 then set_iso 6
J = 0
do
if G <= 0 and I = 0 then F = 1 else F = 0
if F = 1 then I = 1
if F = 1 then set_iso 6
if F = 1 then G = G + 384
F = 0
if G >= 768 and I = 1 then F = 1 else F = 0
if F = 1 then I = 0
if F = 1 then set_iso 2
if F = 1 then G = G - 384
F = 0
set_tv96_direct (G + 1)
shoot
F = 1
h = get_histo_range 0 j
H = get_histo_range 0 i
if (h >= f) and (G > -480) and (J > -1) then G = G - 96
if (h >= f) and (G > -480) and (J > -1) then J = 1
if (h >= f) and (G > -480) and (J > -1) then F = 0
if (H <= f) and (G < 1053) and (J < 1) then G = G + 96
if (H <= f) and (G > 1053) and (J < 1) then J = -1
if (H <= f) and (G < 1053) and (J < 1) then F = 0
until F = 1
N = N + 1
print "TAKING SHOT", N
rem Y = 0
rem do
rem Y = Y + 8
rem H = get_histo_range 0 Y
rem until (Y >= 1024) or (H >= f)
rem hopefully faster (and more accurate) routine for finding histogram level
Y = 0
do
Y = Y + 64
H = get_histo_range 0 Y
until (Y >= 1024) or (H >= f)
Y = Y - 64
do
Y = Y + 16
H = get_histo_range 0 Y
until (Y >= 1024) or (H >= f)
Y = Y - 16
do
Y = Y + 4
H = get_histo_range 0 Y
until (Y >= 1024) or (H >= f)
Y = (Y * 1059) / 1000
C = 0
do
C = C - 8
Y = (Y * 1059) / 1000
until (Y >= i)
set_raw a
g = G
if I = 1 then g = g - 384
g = g - 30
g = g - (d * 32)
g = g + C + 1
K = 1
if g > 1053 then g = 1053
if (g < L) then K = 2
if (g < L) then g = g + 30
if (g < L) then K = 3
if (g < L) then g = g + 96
if (g < L) then K = 4
if (g < L) then g = g + 96
if (g < L) then K = 5
if (g < L) then g = g + 96
if (g < L) then K = 6
if (g < L) then g = g + 96
if (g < L) then G = L
set_iso K
set_tv96_direct g
shoot
print "WAIT..."
sleep c*1000
goto "anothershot"
:endprogram
shot_histo_enable 0
end
I dunno if anybody would find this to be useful, or have any suggestions, but there you go.
I haven't had a chance to test it very much with night shots, but it seems to do auto exposure pretty well during the day, and will go from 1/2000 all the way up to a couple of minutes.